Skip to content

Commit a82c106

Browse files
committed
[ARM] Change CRC predicate to just HasCRC
This removes the backend requirement for crc instructions on HasV8, relying on just HasCRC instead. This should allow them to be selected with ArmV7 + crc, making them more usable whilst hopefully not making them incorrectly generated (they only come from intrinsics, and HasCRC usually requires HasV8). This is how most other instructions are specified.
1 parent dc3f758 commit a82c106

File tree

6 files changed

+29
-26
lines changed

6 files changed

+29
-26
lines changed

llvm/lib/Target/ARM/ARMInstrInfo.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4854,7 +4854,7 @@ class AI_crc32<bit C, bits<2> sz, string suffix, SDPatternOperator builtin>
48544854
: AInoP<(outs GPRnopc:$Rd), (ins GPRnopc:$Rn, GPRnopc:$Rm), MiscFrm, NoItinerary,
48554855
!strconcat("crc32", suffix), "\t$Rd, $Rn, $Rm",
48564856
[(set GPRnopc:$Rd, (builtin GPRnopc:$Rn, GPRnopc:$Rm))]>,
4857-
Requires<[IsARM, HasV8, HasCRC]> {
4857+
Requires<[IsARM, HasCRC]> {
48584858
bits<4> Rd;
48594859
bits<4> Rn;
48604860
bits<4> Rm;

llvm/lib/Target/ARM/ARMInstrThumb2.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3448,7 +3448,7 @@ class T2I_crc32<bit C, bits<2> sz, string suffix, SDPatternOperator builtin>
34483448
: T2ThreeRegNoP<(outs rGPR:$Rd), (ins rGPR:$Rn, rGPR:$Rm), NoItinerary,
34493449
!strconcat("crc32", suffix, "\t$Rd, $Rn, $Rm"),
34503450
[(set rGPR:$Rd, (builtin rGPR:$Rn, rGPR:$Rm))]>,
3451-
Requires<[IsThumb2, HasV8, HasCRC]> {
3451+
Requires<[IsThumb2, HasCRC]> {
34523452
let Inst{31-27} = 0b11111;
34533453
let Inst{26-21} = 0b010110;
34543454
let Inst{20} = C;

llvm/test/CodeGen/ARM/crc32.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
; RUN: llc -mtriple=thumbv7 -mattr=+crc -o - %s | FileCheck %s
12
; RUN: llc -mtriple=thumbv8 -o - %s | FileCheck %s
3+
; RUN: llc -mtriple=armv7 -mattr=+crc -o - %s | FileCheck %s
4+
; RUN: llc -mtriple=armv8 -o - %s | FileCheck %s
25

36
define i32 @test_crc32b(i32 %cur, i8 %next) {
47
; CHECK-LABEL: test_crc32b:

llvm/test/MC/ARM/crc32-thumb.s

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
@ CHECK: crc32b r0, r1, r2 @ encoding: [0xc1,0xfa,0x82,0xf0]
99
@ CHECK: crc32h r0, r1, r2 @ encoding: [0xc1,0xfa,0x92,0xf0]
1010
@ CHECK: crc32w r0, r1, r2 @ encoding: [0xc1,0xfa,0xa2,0xf0]
11-
@ CHECK-V7: error: instruction requires: crc armv8
12-
@ CHECK-V7: error: instruction requires: crc armv8
13-
@ CHECK-V7: error: instruction requires: crc armv8
11+
@ CHECK-V7: error: instruction requires: crc
12+
@ CHECK-V7: error: instruction requires: crc
13+
@ CHECK-V7: error: instruction requires: crc
1414
@ CHECK-NOCRC: error: instruction requires: crc
1515
@ CHECK-NOCRC: error: instruction requires: crc
1616
@ CHECK-NOCRC: error: instruction requires: crc
@@ -22,9 +22,9 @@
2222
@ CHECK: crc32cb r0, r1, r2 @ encoding: [0xd1,0xfa,0x82,0xf0]
2323
@ CHECK: crc32ch r0, r1, r2 @ encoding: [0xd1,0xfa,0x92,0xf0]
2424
@ CHECK: crc32cw r0, r1, r2 @ encoding: [0xd1,0xfa,0xa2,0xf0]
25-
@ CHECK-V7: error: instruction requires: crc armv8
26-
@ CHECK-V7: error: instruction requires: crc armv8
27-
@ CHECK-V7: error: instruction requires: crc armv8
25+
@ CHECK-V7: error: instruction requires: crc
26+
@ CHECK-V7: error: instruction requires: crc
27+
@ CHECK-V7: error: instruction requires: crc
2828
@ CHECK-NOCRC: error: instruction requires: crc
2929
@ CHECK-NOCRC: error: instruction requires: crc
3030
@ CHECK-NOCRC: error: instruction requires: crc

llvm/test/MC/ARM/crc32.s

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
@ CHECK: crc32b r0, r1, r2 @ encoding: [0x42,0x00,0x01,0xe1]
99
@ CHECK: crc32h r0, r1, r2 @ encoding: [0x42,0x00,0x21,0xe1]
1010
@ CHECK: crc32w r0, r1, r2 @ encoding: [0x42,0x00,0x41,0xe1]
11-
@ CHECK-V7: error: instruction requires: crc armv8
12-
@ CHECK-V7: error: instruction requires: crc armv8
13-
@ CHECK-V7: error: instruction requires: crc armv8
11+
@ CHECK-V7: error: instruction requires: crc
12+
@ CHECK-V7: error: instruction requires: crc
13+
@ CHECK-V7: error: instruction requires: crc
1414
@ CHECK-NOCRC: error: instruction requires: crc
1515
@ CHECK-NOCRC: error: instruction requires: crc
1616
@ CHECK-NOCRC: error: instruction requires: crc
@@ -22,9 +22,9 @@
2222
@ CHECK: crc32cb r0, r1, r2 @ encoding: [0x42,0x02,0x01,0xe1]
2323
@ CHECK: crc32ch r0, r1, r2 @ encoding: [0x42,0x02,0x21,0xe1]
2424
@ CHECK: crc32cw r0, r1, r2 @ encoding: [0x42,0x02,0x41,0xe1]
25-
@ CHECK-V7: error: instruction requires: crc armv8
26-
@ CHECK-V7: error: instruction requires: crc armv8
27-
@ CHECK-V7: error: instruction requires: crc armv8
25+
@ CHECK-V7: error: instruction requires: crc
26+
@ CHECK-V7: error: instruction requires: crc
27+
@ CHECK-V7: error: instruction requires: crc
2828
@ CHECK-NOCRC: error: instruction requires: crc
2929
@ CHECK-NOCRC: error: instruction requires: crc
3030
@ CHECK-NOCRC: error: instruction requires: crc

llvm/test/MC/ARM/directive-arch_extension-crc.s

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
.type crc,%function
1616
crc:
1717
crc32b r0, r1, r2
18-
@ CHECK-V7: error: instruction requires: crc armv8
18+
@ CHECK-V7: error: instruction requires: crc
1919
crc32h r0, r1, r2
20-
@ CHECK-V7: error: instruction requires: crc armv8
20+
@ CHECK-V7: error: instruction requires: crc
2121
crc32w r0, r1, r2
22-
@ CHECK-V7: error: instruction requires: crc armv8
22+
@ CHECK-V7: error: instruction requires: crc
2323

2424
crc32cb r0, r1, r2
25-
@ CHECK-V7: error: instruction requires: crc armv8
25+
@ CHECK-V7: error: instruction requires: crc
2626
crc32ch r0, r1, r2
27-
@ CHECK-V7: error: instruction requires: crc armv8
27+
@ CHECK-V7: error: instruction requires: crc
2828
crc32cw r0, r1, r2
29-
@ CHECK-V7: error: instruction requires: crc armv8
29+
@ CHECK-V7: error: instruction requires: crc
3030

3131
.arch_extension nocrc
3232
@ CHECK-V7: error: architectural extension 'crc' is not allowed for the current base architecture
@@ -36,22 +36,22 @@ crc:
3636
.type nocrc,%function
3737
nocrc:
3838
crc32b r0, r1, r2
39-
@ CHECK-V7: error: instruction requires: crc armv8
39+
@ CHECK-V7: error: instruction requires: crc
4040
@ CHECK-V8: error: instruction requires: crc
4141
crc32h r0, r1, r2
42-
@ CHECK-V7: error: instruction requires: crc armv8
42+
@ CHECK-V7: error: instruction requires: crc
4343
@ CHECK-V8: error: instruction requires: crc
4444
crc32w r0, r1, r2
45-
@ CHECK-V7: error: instruction requires: crc armv8
45+
@ CHECK-V7: error: instruction requires: crc
4646
@ CHECK-V8: error: instruction requires: crc
4747

4848
crc32cb r0, r1, r2
49-
@ CHECK-V7: error: instruction requires: crc armv8
49+
@ CHECK-V7: error: instruction requires: crc
5050
@ CHECK-V8: error: instruction requires: crc
5151
crc32ch r0, r1, r2
52-
@ CHECK-V7: error: instruction requires: crc armv8
52+
@ CHECK-V7: error: instruction requires: crc
5353
@ CHECK-V8: error: instruction requires: crc
5454
crc32cw r0, r1, r2
55-
@ CHECK-V7: error: instruction requires: crc armv8
55+
@ CHECK-V7: error: instruction requires: crc
5656
@ CHECK-V8: error: instruction requires: crc
5757

0 commit comments

Comments
 (0)