@@ -7,64 +7,47 @@ define i64 @test_smin_neg_one(i64 %a) {
7
7
; CHECK-LABEL: test_smin_neg_one:
8
8
; CHECK: // %bb.0:
9
9
; CHECK-NEXT: cmn x0, #1
10
- ; CHECK-NEXT: csinv x0, xzr, x0, ge
10
+ ; CHECK-NEXT: csinv x8, x0, xzr, lt
11
+ ; CHECK-NEXT: mvn x0, x8
11
12
; CHECK-NEXT: ret
12
13
%1 = tail call i64 @llvm.smin.i64 (i64 %a , i64 -1 )
13
14
%retval.0 = xor i64 %1 , -1
14
15
ret i64 %retval.0
15
16
}
16
17
17
- define i64 @test_smin_zero (i64 %a ) {
18
- ; CHECK-LABEL: test_smin_zero:
19
- ; CHECK: // %bb.0:
20
- ; CHECK-NEXT: and x0, x0, x0, asr #63
21
- ; CHECK-NEXT: ret
22
- %1 = tail call i64 @llvm.smin.i64 (i64 %a , i64 0 )
23
- %retval.0 = xor i64 %1 , 0
24
- ret i64 %retval.0
25
- }
26
-
27
18
define i64 @test_smin_constant (i64 %a ) {
28
19
; CHECK-LABEL: test_smin_constant:
29
20
; CHECK: // %bb.0:
30
- ; CHECK-NEXT: eor x8, x0, #0x8
21
+ ; CHECK-NEXT: mov w8, #8
31
22
; CHECK-NEXT: cmp x0, #8
32
- ; CHECK-NEXT: csel x0, x8, xzr, lt
23
+ ; CHECK-NEXT: csel x8, x0, x8, lt
24
+ ; CHECK-NEXT: eor x0, x8, #0x8
33
25
; CHECK-NEXT: ret
34
26
%1 = tail call i64 @llvm.smin.i64 (i64 %a , i64 8 )
35
27
%retval.0 = xor i64 %1 , 8
36
28
ret i64 %retval.0
37
29
}
38
30
39
31
; Test for DAGCombiner optimization: fold (xor (smax(x, C), C)) -> select (x > C), xor (x, C), 0
40
-
41
32
define i64 @test_smax_neg_one (i64 %a ) {
42
33
; CHECK-LABEL: test_smax_neg_one:
43
34
; CHECK: // %bb.0:
44
- ; CHECK-NEXT: mvn x8, x0
45
- ; CHECK-NEXT: bic x0, x8, x0, asr #63
35
+ ; CHECK-NEXT: cmp x0, #0
36
+ ; CHECK-NEXT: csinv x8, x0, xzr, ge
37
+ ; CHECK-NEXT: mvn x0, x8
46
38
; CHECK-NEXT: ret
47
39
%1 = tail call i64 @llvm.smax.i64 (i64 %a , i64 -1 )
48
40
%retval.0 = xor i64 %1 , -1
49
41
ret i64 %retval.0
50
42
}
51
43
52
- define i64 @test_smax_zero (i64 %a ) {
53
- ; CHECK-LABEL: test_smax_zero:
54
- ; CHECK: // %bb.0:
55
- ; CHECK-NEXT: bic x0, x0, x0, asr #63
56
- ; CHECK-NEXT: ret
57
- %1 = tail call i64 @llvm.smax.i64 (i64 %a , i64 0 )
58
- %retval.0 = xor i64 %1 , 0
59
- ret i64 %retval.0
60
- }
61
-
62
44
define i64 @test_smax_constant (i64 %a ) {
63
45
; CHECK-LABEL: test_smax_constant:
64
46
; CHECK: // %bb.0:
65
- ; CHECK-NEXT: eor x8, x0, #0x8
47
+ ; CHECK-NEXT: mov w8, #8
66
48
; CHECK-NEXT: cmp x0, #8
67
- ; CHECK-NEXT: csel x0, x8, xzr, gt
49
+ ; CHECK-NEXT: csel x8, x0, x8, gt
50
+ ; CHECK-NEXT: eor x0, x8, #0x8
68
51
; CHECK-NEXT: ret
69
52
%1 = tail call i64 @llvm.smax.i64 (i64 %a , i64 8 )
70
53
%retval.0 = xor i64 %1 , 8
@@ -81,22 +64,13 @@ define i64 @test_umin_neg_one(i64 %a) {
81
64
ret i64 %retval.0
82
65
}
83
66
84
- define i64 @test_umin_zero (i64 %a ) {
85
- ; CHECK-LABEL: test_umin_zero:
86
- ; CHECK: // %bb.0:
87
- ; CHECK-NEXT: mov x0, xzr
88
- ; CHECK-NEXT: ret
89
- %1 = tail call i64 @llvm.umin.i64 (i64 %a , i64 0 )
90
- %retval.0 = xor i64 %1 , 0
91
- ret i64 %retval.0
92
- }
93
-
94
67
define i64 @test_umin_constant (i64 %a ) {
95
68
; CHECK-LABEL: test_umin_constant:
96
69
; CHECK: // %bb.0:
97
- ; CHECK-NEXT: eor x8, x0, #0x8
70
+ ; CHECK-NEXT: mov w8, #8
98
71
; CHECK-NEXT: cmp x0, #8
99
- ; CHECK-NEXT: csel x0, x8, xzr, lo
72
+ ; CHECK-NEXT: csel x8, x0, x8, lo
73
+ ; CHECK-NEXT: eor x0, x8, #0x8
100
74
; CHECK-NEXT: ret
101
75
%1 = tail call i64 @llvm.umin.i64 (i64 %a , i64 8 )
102
76
%retval.0 = xor i64 %1 , 8
@@ -113,52 +87,32 @@ define i64 @test_umax_neg_one(i64 %a) {
113
87
ret i64 %retval.0
114
88
}
115
89
116
- define i64 @test_umax_zero (i64 %a ) {
117
- ; CHECK-LABEL: test_umax_zero:
118
- ; CHECK: // %bb.0:
119
- ; CHECK-NEXT: ret
120
- %1 = tail call i64 @llvm.umax.i64 (i64 %a , i64 0 )
121
- %retval.0 = xor i64 %1 , 0
122
- ret i64 %retval.0
123
- }
124
-
125
90
define i64 @test_umax_constant (i64 %a ) {
126
91
; CHECK-LABEL: test_umax_constant:
127
92
; CHECK: // %bb.0:
128
- ; CHECK-NEXT: eor x8, x0, #0x8
93
+ ; CHECK-NEXT: mov w8, #8
129
94
; CHECK-NEXT: cmp x0, #8
130
- ; CHECK-NEXT: csel x0, x8, xzr, hi
95
+ ; CHECK-NEXT: csel x8, x0, x8, hi
96
+ ; CHECK-NEXT: eor x0, x8, #0x8
131
97
; CHECK-NEXT: ret
132
98
%1 = tail call i64 @llvm.umax.i64 (i64 %a , i64 8 )
133
99
%retval.0 = xor i64 %1 , 8
134
100
ret i64 %retval.0
135
101
}
136
102
137
103
; Test vector cases
138
-
139
104
define <4 x i32 > @test_smin_vector_neg_one (<4 x i32 > %a ) {
140
105
; CHECK-LABEL: test_smin_vector_neg_one:
141
106
; CHECK: // %bb.0:
142
107
; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
143
- ; CHECK-NEXT: cmgt v1 .4s, v1 .4s, v0 .4s
144
- ; CHECK-NEXT: bic v0.16b, v1 .16b, v0.16b
108
+ ; CHECK-NEXT: smin v0 .4s, v0 .4s, v1 .4s
109
+ ; CHECK-NEXT: mvn v0.16b, v0.16b
145
110
; CHECK-NEXT: ret
146
111
%1 = tail call <4 x i32 > @llvm.smin.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >)
147
112
%retval.0 = xor <4 x i32 > %1 , <i32 -1 , i32 -1 , i32 -1 , i32 -1 >
148
113
ret <4 x i32 > %retval.0
149
114
}
150
115
151
- define <4 x i32 > @test_smin_vector_zero (<4 x i32 > %a ) {
152
- ; CHECK-LABEL: test_smin_vector_zero:
153
- ; CHECK: // %bb.0:
154
- ; CHECK-NEXT: movi v1.2d, #0000000000000000
155
- ; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s
156
- ; CHECK-NEXT: ret
157
- %1 = tail call <4 x i32 > @llvm.smin.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >)
158
- %retval.0 = xor <4 x i32 > %1 , <i32 0 , i32 0 , i32 0 , i32 0 >
159
- ret <4 x i32 > %retval.0
160
- }
161
-
162
116
define <4 x i32 > @test_smin_vector_constant (<4 x i32 > %a ) {
163
117
; CHECK-LABEL: test_smin_vector_constant:
164
118
; CHECK: // %bb.0:
@@ -174,25 +128,15 @@ define <4 x i32> @test_smin_vector_constant(<4 x i32> %a) {
174
128
define <4 x i32 > @test_smax_vector_neg_one (<4 x i32 > %a ) {
175
129
; CHECK-LABEL: test_smax_vector_neg_one:
176
130
; CHECK: // %bb.0:
177
- ; CHECK-NEXT: cmge v1.4s, v0.4s, #0
178
- ; CHECK-NEXT: bic v0.16b, v1.16b, v0.16b
131
+ ; CHECK-NEXT: movi v1.2d, #0xffffffffffffffff
132
+ ; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s
133
+ ; CHECK-NEXT: mvn v0.16b, v0.16b
179
134
; CHECK-NEXT: ret
180
135
%1 = tail call <4 x i32 > @llvm.smax.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >)
181
136
%retval.0 = xor <4 x i32 > %1 , <i32 -1 , i32 -1 , i32 -1 , i32 -1 >
182
137
ret <4 x i32 > %retval.0
183
138
}
184
139
185
- define <4 x i32 > @test_smax_vector_zero (<4 x i32 > %a ) {
186
- ; CHECK-LABEL: test_smax_vector_zero:
187
- ; CHECK: // %bb.0:
188
- ; CHECK-NEXT: movi v1.2d, #0000000000000000
189
- ; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s
190
- ; CHECK-NEXT: ret
191
- %1 = tail call <4 x i32 > @llvm.smax.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >)
192
- %retval.0 = xor <4 x i32 > %1 , <i32 0 , i32 0 , i32 0 , i32 0 >
193
- ret <4 x i32 > %retval.0
194
- }
195
-
196
140
define <4 x i32 > @test_smax_vector_constant (<4 x i32 > %a ) {
197
141
; CHECK-LABEL: test_smax_vector_constant:
198
142
; CHECK: // %bb.0:
@@ -215,16 +159,6 @@ define <4 x i32> @test_umin_vector_neg_one(<4 x i32> %a) {
215
159
ret <4 x i32 > %retval.0
216
160
}
217
161
218
- define <4 x i32 > @test_umin_vector_zero (<4 x i32 > %a ) {
219
- ; CHECK-LABEL: test_umin_vector_zero:
220
- ; CHECK: // %bb.0:
221
- ; CHECK-NEXT: movi v0.2d, #0000000000000000
222
- ; CHECK-NEXT: ret
223
- %1 = tail call <4 x i32 > @llvm.umin.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >)
224
- %retval.0 = xor <4 x i32 > %1 , <i32 0 , i32 0 , i32 0 , i32 0 >
225
- ret <4 x i32 > %retval.0
226
- }
227
-
228
162
define <4 x i32 > @test_umin_vector_constant (<4 x i32 > %a ) {
229
163
; CHECK-LABEL: test_umin_vector_constant:
230
164
; CHECK: // %bb.0:
@@ -247,15 +181,6 @@ define <4 x i32> @test_umax_vector_neg_one(<4 x i32> %a) {
247
181
ret <4 x i32 > %retval.0
248
182
}
249
183
250
- define <4 x i32 > @test_umax_vector_zero (<4 x i32 > %a ) {
251
- ; CHECK-LABEL: test_umax_vector_zero:
252
- ; CHECK: // %bb.0:
253
- ; CHECK-NEXT: ret
254
- %1 = tail call <4 x i32 > @llvm.umax.v4i32 (<4 x i32 > %a , <4 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 >)
255
- %retval.0 = xor <4 x i32 > %1 , <i32 0 , i32 0 , i32 0 , i32 0 >
256
- ret <4 x i32 > %retval.0
257
- }
258
-
259
184
define <4 x i32 > @test_umax_vector_constant (<4 x i32 > %a ) {
260
185
; CHECK-LABEL: test_umax_vector_constant:
261
186
; CHECK: // %bb.0:
0 commit comments