Skip to content

Commit 3eff30a

Browse files
committed
fix instsimplify testcases by moving them into instcombine
1 parent 15e8e49 commit 3eff30a

File tree

2 files changed

+127
-158
lines changed

2 files changed

+127
-158
lines changed

llvm/test/Transforms/InstSimplify/select-and-cmp.ll renamed to llvm/test/Transforms/InstCombine/select-and-cmp.ll

Lines changed: 64 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
33

44
define i32 @select_and_icmp(i32 %x, i32 %y, i32 %z) {
55
; CHECK-LABEL: @select_and_icmp(
@@ -100,7 +100,6 @@ define <2 x i8> @select_and_icmp_alt_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z)
100100
ret <2 x i8> %D
101101
}
102102

103-
104103
define i32 @select_and_icmp_inv(i32 %x, i32 %y, i32 %z) {
105104
; CHECK-LABEL: @select_and_icmp_inv(
106105
; CHECK-NEXT: ret i32 [[X:%.*]]
@@ -112,14 +111,12 @@ define i32 @select_and_icmp_inv(i32 %x, i32 %y, i32 %z) {
112111
ret i32 %D
113112
}
114113

115-
; Negative tests
114+
115+
; Below used to be negative tests in InstSimplify, but are no more negative cases here
116+
116117
define i32 @select_and_icmp_pred_bad_1(i32 %x, i32 %y, i32 %z) {
117118
; CHECK-LABEL: @select_and_icmp_pred_bad_1(
118-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
119-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
120-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
121-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
122-
; CHECK-NEXT: ret i32 [[D]]
119+
; CHECK-NEXT: ret i32 [[X]]
123120
;
124121
%A = icmp eq i32 %x, %z
125122
%B = icmp ne i32 %y, %z
@@ -130,10 +127,8 @@ define i32 @select_and_icmp_pred_bad_1(i32 %x, i32 %y, i32 %z) {
130127

131128
define i32 @select_and_icmp_pred_bad_2(i32 %x, i32 %y, i32 %z) {
132129
; CHECK-LABEL: @select_and_icmp_pred_bad_2(
133-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
134-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
135-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
136-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
130+
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z:%.*]]
131+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[Z]], i32 [[X]]
137132
; CHECK-NEXT: ret i32 [[D]]
138133
;
139134
%A = icmp ne i32 %x, %z
@@ -145,10 +140,8 @@ define i32 @select_and_icmp_pred_bad_2(i32 %x, i32 %y, i32 %z) {
145140

146141
define i32 @select_and_icmp_pred_bad_3(i32 %x, i32 %y, i32 %z) {
147142
; CHECK-LABEL: @select_and_icmp_pred_bad_3(
148-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
149-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
150-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
151-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
143+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
144+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[X]], i32 [[Z]]
152145
; CHECK-NEXT: ret i32 [[D]]
153146
;
154147
%A = icmp ne i32 %x, %z
@@ -160,10 +153,8 @@ define i32 @select_and_icmp_pred_bad_3(i32 %x, i32 %y, i32 %z) {
160153

161154
define i32 @select_and_icmp_pred_bad_4(i32 %x, i32 %y, i32 %z) {
162155
; CHECK-LABEL: @select_and_icmp_pred_bad_4(
163-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
164156
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
165-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
166-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
157+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[Z]], i32 [[X]]
167158
; CHECK-NEXT: ret i32 [[D]]
168159
;
169160
%A = icmp eq i32 %x, %z
@@ -173,6 +164,60 @@ define i32 @select_and_icmp_pred_bad_4(i32 %x, i32 %y, i32 %z) {
173164
ret i32 %D
174165
}
175166

167+
define i32 @select_and_icmp_alt_bad_1(i32 %x, i32 %y, i32 %z) {
168+
; CHECK-LABEL: @select_and_icmp_alt_bad_1(
169+
; CHECK-NEXT: ret i32 [[Z]]
170+
;
171+
%A = icmp eq i32 %x, %z
172+
%B = icmp ne i32 %y, %z
173+
%C = and i1 %A, %B
174+
%D = select i1 %C, i32 %x, i32 %z
175+
ret i32 %D
176+
}
177+
178+
define i32 @select_and_icmp_alt_bad_2(i32 %x, i32 %y, i32 %z) {
179+
; CHECK-LABEL: @select_and_icmp_alt_bad_2(
180+
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
181+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[X]], i32 [[Z]]
182+
; CHECK-NEXT: ret i32 [[D]]
183+
;
184+
%A = icmp ne i32 %x, %z
185+
%B = icmp eq i32 %y, %z
186+
%C = and i1 %A, %B
187+
%D = select i1 %C, i32 %x, i32 %z
188+
ret i32 %D
189+
}
190+
191+
192+
define i32 @select_and_icmp_alt_bad_3(i32 %x, i32 %y, i32 %z) {
193+
; CHECK-LABEL: @select_and_icmp_alt_bad_3(
194+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
195+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[Z]], i32 [[X]]
196+
; CHECK-NEXT: ret i32 [[D]]
197+
;
198+
%A = icmp ne i32 %x, %z
199+
%B = icmp ne i32 %y, %z
200+
%C = and i1 %A, %B
201+
%D = select i1 %C, i32 %x, i32 %z
202+
ret i32 %D
203+
}
204+
205+
define i32 @select_and_icmp_alt_bad_4(i32 %x, i32 %y, i32 %z) {
206+
; CHECK-LABEL: @select_and_icmp_alt_bad_4(
207+
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
208+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[X]], i32 [[Z]]
209+
; CHECK-NEXT: ret i32 [[D]]
210+
;
211+
%A = icmp eq i32 %x, %z
212+
%B = icmp eq i32 %y, %z
213+
%C = or i1 %A, %B
214+
%D = select i1 %C, i32 %x, i32 %z
215+
ret i32 %D
216+
}
217+
218+
219+
; Negative tests
220+
176221
define i32 @select_and_icmp_bad_true_val(i32 %x, i32 %y, i32 %z, i32 %k) {
177222
; CHECK-LABEL: @select_and_icmp_bad_true_val(
178223
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
@@ -233,66 +278,6 @@ define i32 @select_and_icmp_bad_op_2(i32 %x, i32 %y, i32 %z, i32 %k) {
233278
ret i32 %D
234279
}
235280

236-
define i32 @select_and_icmp_alt_bad_1(i32 %x, i32 %y, i32 %z) {
237-
; CHECK-LABEL: @select_and_icmp_alt_bad_1(
238-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
239-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
240-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
241-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
242-
; CHECK-NEXT: ret i32 [[D]]
243-
;
244-
%A = icmp eq i32 %x, %z
245-
%B = icmp ne i32 %y, %z
246-
%C = and i1 %A, %B
247-
%D = select i1 %C, i32 %x, i32 %z
248-
ret i32 %D
249-
}
250-
251-
define i32 @select_and_icmp_alt_bad_2(i32 %x, i32 %y, i32 %z) {
252-
; CHECK-LABEL: @select_and_icmp_alt_bad_2(
253-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
254-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
255-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
256-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
257-
; CHECK-NEXT: ret i32 [[D]]
258-
;
259-
%A = icmp ne i32 %x, %z
260-
%B = icmp eq i32 %y, %z
261-
%C = and i1 %A, %B
262-
%D = select i1 %C, i32 %x, i32 %z
263-
ret i32 %D
264-
}
265-
266-
define i32 @select_and_icmp_alt_bad_3(i32 %x, i32 %y, i32 %z) {
267-
; CHECK-LABEL: @select_and_icmp_alt_bad_3(
268-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
269-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
270-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
271-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
272-
; CHECK-NEXT: ret i32 [[D]]
273-
;
274-
%A = icmp ne i32 %x, %z
275-
%B = icmp ne i32 %y, %z
276-
%C = and i1 %A, %B
277-
%D = select i1 %C, i32 %x, i32 %z
278-
ret i32 %D
279-
}
280-
281-
define i32 @select_and_icmp_alt_bad_4(i32 %x, i32 %y, i32 %z) {
282-
; CHECK-LABEL: @select_and_icmp_alt_bad_4(
283-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
284-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
285-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
286-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
287-
; CHECK-NEXT: ret i32 [[D]]
288-
;
289-
%A = icmp eq i32 %x, %z
290-
%B = icmp eq i32 %y, %z
291-
%C = or i1 %A, %B
292-
%D = select i1 %C, i32 %x, i32 %z
293-
ret i32 %D
294-
}
295-
296281
define i32 @select_and_icmp_alt_bad_5(i32 %x, i32 %y, i32 %z, i32 %k) {
297282
; CHECK-LABEL: @select_and_icmp_alt_bad_5(
298283
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[K:%.*]]

llvm/test/Transforms/InstSimplify/select-or-cmp.ll renamed to llvm/test/Transforms/InstCombine/select-or-cmp.ll

Lines changed: 63 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
33

44
define i32 @select_or_icmp(i32 %x, i32 %y, i32 %z) {
55
; CHECK-LABEL: @select_or_icmp(
@@ -111,13 +111,13 @@ define i32 @select_or_icmp_inv(i32 %x, i32 %y, i32 %z) {
111111
ret i32 %D
112112
}
113113

114-
; Negative tests
114+
115+
; Below used to be negative tests in InstSimplify, but are no more negative cases here
116+
115117
define i32 @select_and_icmp_pred_bad_1(i32 %x, i32 %y, i32 %z) {
116118
; CHECK-LABEL: @select_and_icmp_pred_bad_1(
117-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
118-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
119-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
120-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
119+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
120+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[X]], i32 [[Z]]
121121
; CHECK-NEXT: ret i32 [[D]]
122122
;
123123
%A = icmp eq i32 %x, %z
@@ -129,11 +129,7 @@ define i32 @select_and_icmp_pred_bad_1(i32 %x, i32 %y, i32 %z) {
129129

130130
define i32 @select_and_icmp_pred_bad_2(i32 %x, i32 %y, i32 %z) {
131131
; CHECK-LABEL: @select_and_icmp_pred_bad_2(
132-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
133-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
134-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
135-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
136-
; CHECK-NEXT: ret i32 [[D]]
132+
; CHECK-NEXT: ret i32 [[Z]]
137133
;
138134
%A = icmp ne i32 %x, %z
139135
%B = icmp eq i32 %y, %z
@@ -144,10 +140,8 @@ define i32 @select_and_icmp_pred_bad_2(i32 %x, i32 %y, i32 %z) {
144140

145141
define i32 @select_and_icmp_pred_bad_3(i32 %x, i32 %y, i32 %z) {
146142
; CHECK-LABEL: @select_and_icmp_pred_bad_3(
147-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
148143
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
149-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
150-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
144+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[Z]], i32 [[X]]
151145
; CHECK-NEXT: ret i32 [[D]]
152146
;
153147
%A = icmp eq i32 %x, %z
@@ -159,10 +153,8 @@ define i32 @select_and_icmp_pred_bad_3(i32 %x, i32 %y, i32 %z) {
159153

160154
define i32 @select_and_icmp_pred_bad_4(i32 %x, i32 %y, i32 %z) {
161155
; CHECK-LABEL: @select_and_icmp_pred_bad_4(
162-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
163-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
164-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
165-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
156+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
157+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[X]], i32 [[Z]]
166158
; CHECK-NEXT: ret i32 [[D]]
167159
;
168160
%A = icmp ne i32 %x, %z
@@ -172,6 +164,59 @@ define i32 @select_and_icmp_pred_bad_4(i32 %x, i32 %y, i32 %z) {
172164
ret i32 %D
173165
}
174166

167+
define i32 @select_or_icmp_alt_bad_1(i32 %x, i32 %y, i32 %z) {
168+
; CHECK-LABEL: @select_or_icmp_alt_bad_1(
169+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
170+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[Z]], i32 [[X]]
171+
; CHECK-NEXT: ret i32 [[D]]
172+
;
173+
%A = icmp eq i32 %x, %z
174+
%B = icmp ne i32 %y, %z
175+
%C = or i1 %A, %B
176+
%D = select i1 %C, i32 %x, i32 %z
177+
ret i32 %D
178+
}
179+
180+
define i32 @select_or_icmp_alt_bad_2(i32 %x, i32 %y, i32 %z) {
181+
; CHECK-LABEL: @select_or_icmp_alt_bad_2(
182+
; CHECK-NEXT: ret i32 [[X]]
183+
;
184+
%A = icmp ne i32 %x, %z
185+
%B = icmp eq i32 %y, %z
186+
%C = or i1 %A, %B
187+
%D = select i1 %C, i32 %x, i32 %z
188+
ret i32 %D
189+
}
190+
191+
define i32 @select_or_icmp_alt_bad_3(i32 %x, i32 %y, i32 %z) {
192+
; CHECK-LABEL: @select_or_icmp_alt_bad_3(
193+
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
194+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B]], i32 [[X]], i32 [[Z]]
195+
; CHECK-NEXT: ret i32 [[D]]
196+
;
197+
%A = icmp eq i32 %x, %z
198+
%B = icmp eq i32 %y, %z
199+
%C = or i1 %A, %B
200+
%D = select i1 %C, i32 %x, i32 %z
201+
ret i32 %D
202+
}
203+
204+
define i32 @select_or_icmp_alt_bad_4(i32 %x, i32 %y, i32 %z) {
205+
; CHECK-LABEL: @select_or_icmp_alt_bad_4(
206+
; CHECK-NEXT: [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
207+
; CHECK-NEXT: [[D:%.*]] = select i1 [[B_NOT]], i32 [[Z]], i32 [[X]]
208+
; CHECK-NEXT: ret i32 [[D]]
209+
;
210+
%A = icmp ne i32 %x, %z
211+
%B = icmp ne i32 %y, %z
212+
%C = and i1 %A, %B
213+
%D = select i1 %C, i32 %x, i32 %z
214+
ret i32 %D
215+
}
216+
217+
218+
; Negative tests
219+
175220
define i32 @select_or_icmp_bad_true_val(i32 %x, i32 %y, i32 %z, i32 %k) {
176221
; CHECK-LABEL: @select_or_icmp_bad_true_val(
177222
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
@@ -217,7 +262,6 @@ define i32 @select_or_icmp_bad_op(i32 %x, i32 %y, i32 %z, i32 %k) {
217262
ret i32 %D
218263
}
219264

220-
221265
define i32 @select_or_icmp_bad_op_2(i32 %x, i32 %y, i32 %z, i32 %k) {
222266
; CHECK-LABEL: @select_or_icmp_bad_op_2(
223267
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[K:%.*]]
@@ -233,66 +277,6 @@ define i32 @select_or_icmp_bad_op_2(i32 %x, i32 %y, i32 %z, i32 %k) {
233277
ret i32 %D
234278
}
235279

236-
define i32 @select_or_icmp_alt_bad_1(i32 %x, i32 %y, i32 %z) {
237-
; CHECK-LABEL: @select_or_icmp_alt_bad_1(
238-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
239-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
240-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
241-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
242-
; CHECK-NEXT: ret i32 [[D]]
243-
;
244-
%A = icmp eq i32 %x, %z
245-
%B = icmp ne i32 %y, %z
246-
%C = or i1 %A, %B
247-
%D = select i1 %C, i32 %x, i32 %z
248-
ret i32 %D
249-
}
250-
251-
define i32 @select_or_icmp_alt_bad_2(i32 %x, i32 %y, i32 %z) {
252-
; CHECK-LABEL: @select_or_icmp_alt_bad_2(
253-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
254-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
255-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
256-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
257-
; CHECK-NEXT: ret i32 [[D]]
258-
;
259-
%A = icmp ne i32 %x, %z
260-
%B = icmp eq i32 %y, %z
261-
%C = or i1 %A, %B
262-
%D = select i1 %C, i32 %x, i32 %z
263-
ret i32 %D
264-
}
265-
266-
define i32 @select_or_icmp_alt_bad_3(i32 %x, i32 %y, i32 %z) {
267-
; CHECK-LABEL: @select_or_icmp_alt_bad_3(
268-
; CHECK-NEXT: [[A:%.*]] = icmp eq i32 [[X:%.*]], [[Z:%.*]]
269-
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
270-
; CHECK-NEXT: [[C:%.*]] = or i1 [[A]], [[B]]
271-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
272-
; CHECK-NEXT: ret i32 [[D]]
273-
;
274-
%A = icmp eq i32 %x, %z
275-
%B = icmp eq i32 %y, %z
276-
%C = or i1 %A, %B
277-
%D = select i1 %C, i32 %x, i32 %z
278-
ret i32 %D
279-
}
280-
281-
define i32 @select_or_icmp_alt_bad_4(i32 %x, i32 %y, i32 %z) {
282-
; CHECK-LABEL: @select_or_icmp_alt_bad_4(
283-
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
284-
; CHECK-NEXT: [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
285-
; CHECK-NEXT: [[C:%.*]] = and i1 [[A]], [[B]]
286-
; CHECK-NEXT: [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
287-
; CHECK-NEXT: ret i32 [[D]]
288-
;
289-
%A = icmp ne i32 %x, %z
290-
%B = icmp ne i32 %y, %z
291-
%C = and i1 %A, %B
292-
%D = select i1 %C, i32 %x, i32 %z
293-
ret i32 %D
294-
}
295-
296280
define i32 @select_or_icmp_alt_bad_5(i32 %x, i32 %y, i32 %z, i32 %k) {
297281
; CHECK-LABEL: @select_or_icmp_alt_bad_5(
298282
; CHECK-NEXT: [[A:%.*]] = icmp ne i32 [[X:%.*]], [[K:%.*]]

0 commit comments

Comments
 (0)