@@ -28,10 +28,8 @@ define i1 @eq_basic(i8 %x, i8 %y) {
28
28
define i1 @ne_basic_equal_5 (i8 %x , i8 %y ) {
29
29
; CHECK-LABEL: define i1 @ne_basic_equal_5
30
30
; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]]) {
31
- ; CHECK-NEXT: [[SUB:%.*]] = add i8 [[X]], -5
32
- ; CHECK-NEXT: [[C1:%.*]] = icmp ne i8 [[X]], 5
33
- ; CHECK-NEXT: [[C2:%.*]] = icmp ule i8 [[SUB]], [[Y]]
34
- ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C1]], [[C2]]
31
+ ; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[X]], -6
32
+ ; CHECK-NEXT: [[AND:%.*]] = icmp ult i8 [[TMP1]], [[Y]]
35
33
; CHECK-NEXT: ret i1 [[AND]]
36
34
;
37
35
%sub = add i8 %x , -5
@@ -44,10 +42,7 @@ define i1 @ne_basic_equal_5(i8 %x, i8 %y) {
44
42
define i1 @eq_basic_equal_minus_1 (i8 %x , i8 %y ) {
45
43
; CHECK-LABEL: define i1 @eq_basic_equal_minus_1
46
44
; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]]) {
47
- ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
48
- ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[X]], -1
49
- ; CHECK-NEXT: [[C2:%.*]] = icmp ugt i8 [[ADD]], [[Y]]
50
- ; CHECK-NEXT: [[OR:%.*]] = or i1 [[C1]], [[C2]]
45
+ ; CHECK-NEXT: [[OR:%.*]] = icmp uge i8 [[X]], [[Y]]
51
46
; CHECK-NEXT: ret i1 [[OR]]
52
47
;
53
48
%add = add i8 %x , 1
@@ -60,10 +55,8 @@ define i1 @eq_basic_equal_minus_1(i8 %x, i8 %y) {
60
55
define i1 @ne_basic_equal_minus_7 (i8 %x , i8 %y ) {
61
56
; CHECK-LABEL: define i1 @ne_basic_equal_minus_7
62
57
; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]]) {
63
- ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 7
64
- ; CHECK-NEXT: [[C1:%.*]] = icmp ne i8 [[X]], -7
65
- ; CHECK-NEXT: [[C2:%.*]] = icmp ule i8 [[ADD]], [[Y]]
66
- ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C1]], [[C2]]
58
+ ; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[X]], 6
59
+ ; CHECK-NEXT: [[AND:%.*]] = icmp ult i8 [[TMP1]], [[Y]]
67
60
; CHECK-NEXT: ret i1 [[AND]]
68
61
;
69
62
%add = add i8 %x , 7
@@ -159,10 +152,8 @@ define <2 x i1> @eq_vector(<2 x i8> %x, <2 x i8> %y) {
159
152
define <2 x i1 > @ne_vector_equal_5 (<2 x i8 > %x , <2 x i8 > %y ) {
160
153
; CHECK-LABEL: define <2 x i1> @ne_vector_equal_5
161
154
; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
162
- ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i8> [[X]], <i8 -5, i8 -5>
163
- ; CHECK-NEXT: [[C1:%.*]] = icmp ne <2 x i8> [[X]], <i8 5, i8 5>
164
- ; CHECK-NEXT: [[C2:%.*]] = icmp ule <2 x i8> [[SUB]], [[Y]]
165
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i1> [[C1]], [[C2]]
155
+ ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i8> [[X]], <i8 -6, i8 -6>
156
+ ; CHECK-NEXT: [[AND:%.*]] = icmp ult <2 x i8> [[TMP1]], [[Y]]
166
157
; CHECK-NEXT: ret <2 x i1> [[AND]]
167
158
;
168
159
%sub = add <2 x i8 > %x , <i8 -5 , i8 -5 >
@@ -175,10 +166,7 @@ define <2 x i1> @ne_vector_equal_5(<2 x i8> %x, <2 x i8> %y) {
175
166
define <2 x i1 > @eq_vector_equal_minus_1 (<2 x i8 > %x , <2 x i8 > %y ) {
176
167
; CHECK-LABEL: define <2 x i1> @eq_vector_equal_minus_1
177
168
; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
178
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 1, i8 1>
179
- ; CHECK-NEXT: [[C1:%.*]] = icmp eq <2 x i8> [[X]], <i8 -1, i8 -1>
180
- ; CHECK-NEXT: [[C2:%.*]] = icmp ugt <2 x i8> [[ADD]], [[Y]]
181
- ; CHECK-NEXT: [[OR:%.*]] = or <2 x i1> [[C1]], [[C2]]
169
+ ; CHECK-NEXT: [[OR:%.*]] = icmp uge <2 x i8> [[X]], [[Y]]
182
170
; CHECK-NEXT: ret <2 x i1> [[OR]]
183
171
;
184
172
%add = add <2 x i8 > %x , <i8 1 , i8 1 >
@@ -191,10 +179,8 @@ define <2 x i1> @eq_vector_equal_minus_1(<2 x i8> %x, <2 x i8> %y) {
191
179
define <2 x i1 > @ne_vector_equal_minus_7 (<2 x i8 > %x , <2 x i8 > %y ) {
192
180
; CHECK-LABEL: define <2 x i1> @ne_vector_equal_minus_7
193
181
; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
194
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 7, i8 7>
195
- ; CHECK-NEXT: [[C1:%.*]] = icmp ne <2 x i8> [[X]], <i8 -7, i8 -7>
196
- ; CHECK-NEXT: [[C2:%.*]] = icmp ule <2 x i8> [[ADD]], [[Y]]
197
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i1> [[C1]], [[C2]]
182
+ ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i8> [[X]], <i8 6, i8 6>
183
+ ; CHECK-NEXT: [[AND:%.*]] = icmp ult <2 x i8> [[TMP1]], [[Y]]
198
184
; CHECK-NEXT: ret <2 x i1> [[AND]]
199
185
;
200
186
%add = add <2 x i8 > %x , <i8 7 , i8 7 >
@@ -239,13 +225,11 @@ define <2 x i1> @ne_vector_unequal2(<2 x i8> %x, <2 x i8> %y) {
239
225
; ==============================================================================
240
226
; Tests with undef
241
227
; ==============================================================================
242
- define <2 x i1 > @eq_vector_undef (<2 x i8 > %x , <2 x i8 > %y ) {
243
- ; CHECK-LABEL: define <2 x i1> @eq_vector_undef
228
+ define <2 x i1 > @eq_vector_undef_icmp (<2 x i8 > %x , <2 x i8 > %y ) {
229
+ ; CHECK-LABEL: define <2 x i1> @eq_vector_undef_icmp
244
230
; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
245
- ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i8> [[X]], <i8 -5, i8 -5>
246
- ; CHECK-NEXT: [[C1:%.*]] = icmp eq <2 x i8> [[X]], <i8 5, i8 undef>
247
- ; CHECK-NEXT: [[C2:%.*]] = icmp ugt <2 x i8> [[SUB]], [[Y]]
248
- ; CHECK-NEXT: [[OR:%.*]] = or <2 x i1> [[C1]], [[C2]]
231
+ ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i8> [[X]], <i8 -6, i8 -6>
232
+ ; CHECK-NEXT: [[OR:%.*]] = icmp uge <2 x i8> [[TMP1]], [[Y]]
249
233
; CHECK-NEXT: ret <2 x i1> [[OR]]
250
234
;
251
235
%sub = add <2 x i8 > %x , <i8 -5 , i8 -5 >
@@ -255,6 +239,20 @@ define <2 x i1> @eq_vector_undef(<2 x i8> %x, <2 x i8> %y) {
255
239
ret <2 x i1 > %or
256
240
}
257
241
242
+ define <2 x i1 > @eq_vector_undef_add (<2 x i8 > %x , <2 x i8 > %y ) {
243
+ ; CHECK-LABEL: define <2 x i1> @eq_vector_undef_add
244
+ ; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
245
+ ; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i8> [[X]], <i8 -6, i8 -6>
246
+ ; CHECK-NEXT: [[OR:%.*]] = icmp uge <2 x i8> [[TMP1]], [[Y]]
247
+ ; CHECK-NEXT: ret <2 x i1> [[OR]]
248
+ ;
249
+ %sub = add <2 x i8 > %x , <i8 -5 , i8 undef >
250
+ %c1 = icmp eq <2 x i8 > %x , <i8 5 , i8 5 >
251
+ %c2 = icmp ugt <2 x i8 > %sub , %y
252
+ %or = or <2 x i1 > %c1 , %c2
253
+ ret <2 x i1 > %or
254
+ }
255
+
258
256
; ==============================================================================
259
257
; Tests with values commuted
260
258
; ==============================================================================
@@ -277,10 +275,7 @@ define i1 @ne_commuted_equal_minus_1(i8 %x, i8 %py) {
277
275
; CHECK-LABEL: define i1 @ne_commuted_equal_minus_1
278
276
; CHECK-SAME: (i8 [[X:%.*]], i8 [[PY:%.*]]) {
279
277
; CHECK-NEXT: [[Y:%.*]] = sdiv i8 42, [[PY]]
280
- ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[X]], 1
281
- ; CHECK-NEXT: [[C1:%.*]] = icmp ne i8 [[X]], -1
282
- ; CHECK-NEXT: [[C2:%.*]] = icmp uge i8 [[Y]], [[ADD]]
283
- ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C1]], [[C2]]
278
+ ; CHECK-NEXT: [[AND:%.*]] = icmp ugt i8 [[Y]], [[X]]
284
279
; CHECK-NEXT: ret i1 [[AND]]
285
280
;
286
281
%y = sdiv i8 42 , %py ; thwart complexity-based canonicalization
0 commit comments