Skip to content

Commit 6de7b2e

Browse files
davemgreentru
authored andcommitted
[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. (cherry picked from commit a82c106)
1 parent e22c304 commit 6de7b2e

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)