1
1
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2
- # RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
2
+ # RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3
+ # RUN: | FileCheck %s --check-prefix=RV32I
4
+ # RUN: llc -mtriple=riscv32 -mattr=+zbb -run-pass=legalizer %s -o -\
5
+ # RUN: | FileCheck %s --check-prefix=RV32ZBB
6
+
3
7
---
4
8
name : abs_i8
5
9
body : |
6
10
bb.0.entry:
7
- ; CHECK-LABEL: name: abs_i8
8
- ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
9
- ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
10
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
11
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
12
- ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_ZEXT]], [[C1]](s32)
13
- ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
14
- ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[ASHR]], [[C]](s32)
15
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASHR1]]
16
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR1]]
17
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
18
- ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[C2]]
19
- ; CHECK-NEXT: $x10 = COPY [[AND]](s32)
20
- ; CHECK-NEXT: PseudoRET implicit $x10
11
+ ; RV32I-LABEL: name: abs_i8
12
+ ; RV32I: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
13
+ ; RV32I-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
14
+ ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
15
+ ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
16
+ ; RV32I-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_ZEXT]], [[C1]](s32)
17
+ ; RV32I-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
18
+ ; RV32I-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[ASHR]], [[C]](s32)
19
+ ; RV32I-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_ZEXT]], [[ASHR1]]
20
+ ; RV32I-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR1]]
21
+ ; RV32I-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
22
+ ; RV32I-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[C2]]
23
+ ; RV32I-NEXT: $x10 = COPY [[AND]](s32)
24
+ ; RV32I-NEXT: PseudoRET implicit $x10
25
+ ;
26
+ ; RV32ZBB-LABEL: name: abs_i8
27
+ ; RV32ZBB: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
28
+ ; RV32ZBB-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
29
+ ; RV32ZBB-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
30
+ ; RV32ZBB-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_ZEXT]], [[C]](s32)
31
+ ; RV32ZBB-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
32
+ ; RV32ZBB-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
33
+ ; RV32ZBB-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C1]], [[ASHR]]
34
+ ; RV32ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s32) = G_SMAX [[ASHR]], [[SUB]]
35
+ ; RV32ZBB-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
36
+ ; RV32ZBB-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SMAX]], [[C2]]
37
+ ; RV32ZBB-NEXT: $x10 = COPY [[AND]](s32)
38
+ ; RV32ZBB-NEXT: PseudoRET implicit $x10
21
39
%1:_(s32) = COPY $x10
22
40
%2:_(s32) = G_ASSERT_ZEXT %1, 8
23
41
%0:_(s8) = G_TRUNC %2(s32)
@@ -30,21 +48,36 @@ body: |
30
48
name : abs_i16
31
49
body : |
32
50
bb.0.entry:
33
- ; CHECK-LABEL: name: abs_i16
34
- ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
35
- ; CHECK-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 16
36
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
37
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
38
- ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_SEXT]], [[C1]](s32)
39
- ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
40
- ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[ASHR]], [[C]](s32)
41
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_SEXT]], [[ASHR1]]
42
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR1]]
43
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
44
- ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[XOR]], [[C2]](s32)
45
- ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C2]](s32)
46
- ; CHECK-NEXT: $x10 = COPY [[ASHR2]](s32)
47
- ; CHECK-NEXT: PseudoRET implicit $x10
51
+ ; RV32I-LABEL: name: abs_i16
52
+ ; RV32I: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
53
+ ; RV32I-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 16
54
+ ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
55
+ ; RV32I-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
56
+ ; RV32I-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_SEXT]], [[C1]](s32)
57
+ ; RV32I-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
58
+ ; RV32I-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[ASHR]], [[C]](s32)
59
+ ; RV32I-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ASSERT_SEXT]], [[ASHR1]]
60
+ ; RV32I-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR1]]
61
+ ; RV32I-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
62
+ ; RV32I-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[XOR]], [[C2]](s32)
63
+ ; RV32I-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C2]](s32)
64
+ ; RV32I-NEXT: $x10 = COPY [[ASHR2]](s32)
65
+ ; RV32I-NEXT: PseudoRET implicit $x10
66
+ ;
67
+ ; RV32ZBB-LABEL: name: abs_i16
68
+ ; RV32ZBB: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
69
+ ; RV32ZBB-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 16
70
+ ; RV32ZBB-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
71
+ ; RV32ZBB-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ASSERT_SEXT]], [[C]](s32)
72
+ ; RV32ZBB-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
73
+ ; RV32ZBB-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
74
+ ; RV32ZBB-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C1]], [[ASHR]]
75
+ ; RV32ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s32) = G_SMAX [[ASHR]], [[SUB]]
76
+ ; RV32ZBB-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
77
+ ; RV32ZBB-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SMAX]], [[C2]](s32)
78
+ ; RV32ZBB-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C2]](s32)
79
+ ; RV32ZBB-NEXT: $x10 = COPY [[ASHR1]](s32)
80
+ ; RV32ZBB-NEXT: PseudoRET implicit $x10
48
81
%1:_(s32) = COPY $x10
49
82
%2:_(s32) = G_ASSERT_SEXT %1, 16
50
83
%0:_(s16) = G_TRUNC %2(s32)
@@ -57,14 +90,22 @@ body: |
57
90
name : abs_i32
58
91
body : |
59
92
bb.0.entry:
60
- ; CHECK-LABEL: name: abs_i32
61
- ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
62
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
63
- ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
64
- ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[ASHR]]
65
- ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR]]
66
- ; CHECK-NEXT: $x10 = COPY [[XOR]](s32)
67
- ; CHECK-NEXT: PseudoRET implicit $x10
93
+ ; RV32I-LABEL: name: abs_i32
94
+ ; RV32I: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
95
+ ; RV32I-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
96
+ ; RV32I-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
97
+ ; RV32I-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[ASHR]]
98
+ ; RV32I-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR]]
99
+ ; RV32I-NEXT: $x10 = COPY [[XOR]](s32)
100
+ ; RV32I-NEXT: PseudoRET implicit $x10
101
+ ;
102
+ ; RV32ZBB-LABEL: name: abs_i32
103
+ ; RV32ZBB: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
104
+ ; RV32ZBB-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
105
+ ; RV32ZBB-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C]], [[COPY]]
106
+ ; RV32ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s32) = G_SMAX [[COPY]], [[SUB]]
107
+ ; RV32ZBB-NEXT: $x10 = COPY [[SMAX]](s32)
108
+ ; RV32ZBB-NEXT: PseudoRET implicit $x10
68
109
%0:_(s32) = COPY $x10
69
110
%1:_(s32) = G_ABS %0
70
111
$x10 = COPY %1(s32)
0 commit comments