xref: /llvm-project/llvm/test/Transforms/InstCombine/select-or-cmp.ll (revision 62a25a4c7c3b291f0805894926419f1a64cd83f8)
1*62a25a4cSYihang Liu; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*62a25a4cSYihang Liu; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*62a25a4cSYihang Liu
4*62a25a4cSYihang Liudefine i32 @select_or_icmp(i32 %x, i32 %y, i32 %z) {
5*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp(
6*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Z:%.*]]
7*62a25a4cSYihang Liu;
8*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
9*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
10*62a25a4cSYihang Liu  %C = or i1 %A, %B
11*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
12*62a25a4cSYihang Liu  ret i32 %D
13*62a25a4cSYihang Liu}
14*62a25a4cSYihang Liu
15*62a25a4cSYihang Liudefine <2 x i8> @select_or_icmp_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
16*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_vec(
17*62a25a4cSYihang Liu; CHECK-NEXT:    ret <2 x i8> [[Z:%.*]]
18*62a25a4cSYihang Liu;
19*62a25a4cSYihang Liu  %A = icmp ne <2 x i8> %x, %z
20*62a25a4cSYihang Liu  %B = icmp ne <2 x i8> %y, %z
21*62a25a4cSYihang Liu  %C = or <2 x i1> %A, %B
22*62a25a4cSYihang Liu  %D = select <2 x i1> %C, <2 x i8> %z, <2 x i8> %x
23*62a25a4cSYihang Liu  ret <2 x i8> %D
24*62a25a4cSYihang Liu}
25*62a25a4cSYihang Liu
26*62a25a4cSYihang Liudefine i32 @select_or_icmp2(i32 %x, i32 %y, i32 %z) {
27*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp2(
28*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Z:%.*]]
29*62a25a4cSYihang Liu;
30*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
31*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
32*62a25a4cSYihang Liu  %C = or i1 %A, %B
33*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %y
34*62a25a4cSYihang Liu  ret i32 %D
35*62a25a4cSYihang Liu}
36*62a25a4cSYihang Liu
37*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt(i32 %x, i32 %y, i32 %z) {
38*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt(
39*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[X:%.*]]
40*62a25a4cSYihang Liu;
41*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
42*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
43*62a25a4cSYihang Liu  %C = or i1 %A, %B
44*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
45*62a25a4cSYihang Liu  ret i32 %D
46*62a25a4cSYihang Liu}
47*62a25a4cSYihang Liu
48*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt2(i32 %x, i32 %y, i32 %z) {
49*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt2(
50*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Y:%.*]]
51*62a25a4cSYihang Liu;
52*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
53*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
54*62a25a4cSYihang Liu  %C = or i1 %A, %B
55*62a25a4cSYihang Liu  %D = select i1 %C, i32 %y, i32 %z
56*62a25a4cSYihang Liu  ret i32 %D
57*62a25a4cSYihang Liu}
58*62a25a4cSYihang Liu
59*62a25a4cSYihang Liudefine i32 @select_or_icmp_inv_alt(i32 %x, i32 %y, i32 %z) {
60*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_inv_alt(
61*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[X:%.*]]
62*62a25a4cSYihang Liu;
63*62a25a4cSYihang Liu  %A = icmp ne i32 %z, %x
64*62a25a4cSYihang Liu  %B = icmp ne i32 %z, %y
65*62a25a4cSYihang Liu  %C = or i1 %A, %B
66*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
67*62a25a4cSYihang Liu  ret i32 %D
68*62a25a4cSYihang Liu}
69*62a25a4cSYihang Liu
70*62a25a4cSYihang Liudefine i32 @select_or_inv_icmp_alt(i32 %x, i32 %y, i32 %z) {
71*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_inv_icmp_alt(
72*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[X:%.*]]
73*62a25a4cSYihang Liu;
74*62a25a4cSYihang Liu  %A = icmp ne i32 %z, %x
75*62a25a4cSYihang Liu  %B = icmp ne i32 %z, %y
76*62a25a4cSYihang Liu  %C = or i1 %B, %A
77*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
78*62a25a4cSYihang Liu  ret i32 %D
79*62a25a4cSYihang Liu}
80*62a25a4cSYihang Liu
81*62a25a4cSYihang Liudefine <2 x i8> @select_or_icmp_alt_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
82*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_vec(
83*62a25a4cSYihang Liu; CHECK-NEXT:    ret <2 x i8> [[X:%.*]]
84*62a25a4cSYihang Liu;
85*62a25a4cSYihang Liu  %A = icmp ne <2 x i8> %x, %z
86*62a25a4cSYihang Liu  %B = icmp ne <2 x i8> %y, %z
87*62a25a4cSYihang Liu  %C = or <2 x i1> %A, %B
88*62a25a4cSYihang Liu  %D = select <2 x i1> %C, <2 x i8> %x, <2 x i8> %z
89*62a25a4cSYihang Liu  ret <2 x i8> %D
90*62a25a4cSYihang Liu}
91*62a25a4cSYihang Liu
92*62a25a4cSYihang Liudefine i32 @select_or_inv_icmp(i32 %x, i32 %y, i32 %z) {
93*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_inv_icmp(
94*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Z:%.*]]
95*62a25a4cSYihang Liu;
96*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
97*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
98*62a25a4cSYihang Liu  %C = or i1 %B , %A
99*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
100*62a25a4cSYihang Liu  ret i32 %D
101*62a25a4cSYihang Liu}
102*62a25a4cSYihang Liu
103*62a25a4cSYihang Liudefine i32 @select_or_icmp_inv(i32 %x, i32 %y, i32 %z) {
104*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_inv(
105*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Z:%.*]]
106*62a25a4cSYihang Liu;
107*62a25a4cSYihang Liu  %A = icmp ne i32 %z, %x
108*62a25a4cSYihang Liu  %B = icmp ne i32 %z, %y
109*62a25a4cSYihang Liu  %C = or i1 %A, %B
110*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
111*62a25a4cSYihang Liu  ret i32 %D
112*62a25a4cSYihang Liu}
113*62a25a4cSYihang Liu
114*62a25a4cSYihang Liu
115*62a25a4cSYihang Liu; Below used to be negative tests in InstSimplify, but are no more negative cases here
116*62a25a4cSYihang Liu
117*62a25a4cSYihang Liudefine i32 @select_and_icmp_pred_bad_1(i32 %x, i32 %y, i32 %z) {
118*62a25a4cSYihang Liu; CHECK-LABEL: @select_and_icmp_pred_bad_1(
119*62a25a4cSYihang Liu; CHECK-NEXT:    [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
120*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B_NOT]], i32 [[X]], i32 [[Z]]
121*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
122*62a25a4cSYihang Liu;
123*62a25a4cSYihang Liu  %A = icmp eq i32 %x, %z
124*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
125*62a25a4cSYihang Liu  %C = or i1 %A, %B
126*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
127*62a25a4cSYihang Liu  ret i32 %D
128*62a25a4cSYihang Liu}
129*62a25a4cSYihang Liu
130*62a25a4cSYihang Liudefine i32 @select_and_icmp_pred_bad_2(i32 %x, i32 %y, i32 %z) {
131*62a25a4cSYihang Liu; CHECK-LABEL: @select_and_icmp_pred_bad_2(
132*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[Z]]
133*62a25a4cSYihang Liu;
134*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
135*62a25a4cSYihang Liu  %B = icmp eq i32 %y, %z
136*62a25a4cSYihang Liu  %C = or i1 %A, %B
137*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
138*62a25a4cSYihang Liu  ret i32 %D
139*62a25a4cSYihang Liu}
140*62a25a4cSYihang Liu
141*62a25a4cSYihang Liudefine i32 @select_and_icmp_pred_bad_3(i32 %x, i32 %y, i32 %z) {
142*62a25a4cSYihang Liu; CHECK-LABEL: @select_and_icmp_pred_bad_3(
143*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
144*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B]], i32 [[Z]], i32 [[X]]
145*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
146*62a25a4cSYihang Liu;
147*62a25a4cSYihang Liu  %A = icmp eq i32 %x, %z
148*62a25a4cSYihang Liu  %B = icmp eq i32 %y, %z
149*62a25a4cSYihang Liu  %C = or i1 %A, %B
150*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
151*62a25a4cSYihang Liu  ret i32 %D
152*62a25a4cSYihang Liu}
153*62a25a4cSYihang Liu
154*62a25a4cSYihang Liudefine i32 @select_and_icmp_pred_bad_4(i32 %x, i32 %y, i32 %z) {
155*62a25a4cSYihang Liu; CHECK-LABEL: @select_and_icmp_pred_bad_4(
156*62a25a4cSYihang Liu; CHECK-NEXT:    [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
157*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B_NOT]], i32 [[X]], i32 [[Z]]
158*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
159*62a25a4cSYihang Liu;
160*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
161*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
162*62a25a4cSYihang Liu  %C = and i1 %A, %B
163*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
164*62a25a4cSYihang Liu  ret i32 %D
165*62a25a4cSYihang Liu}
166*62a25a4cSYihang Liu
167*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_1(i32 %x, i32 %y, i32 %z) {
168*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_1(
169*62a25a4cSYihang Liu; CHECK-NEXT:    [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
170*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B_NOT]], i32 [[Z]], i32 [[X]]
171*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
172*62a25a4cSYihang Liu;
173*62a25a4cSYihang Liu  %A = icmp eq i32 %x, %z
174*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
175*62a25a4cSYihang Liu  %C = or i1 %A, %B
176*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
177*62a25a4cSYihang Liu  ret i32 %D
178*62a25a4cSYihang Liu}
179*62a25a4cSYihang Liu
180*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_2(i32 %x, i32 %y, i32 %z) {
181*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_2(
182*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[X]]
183*62a25a4cSYihang Liu;
184*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
185*62a25a4cSYihang Liu  %B = icmp eq i32 %y, %z
186*62a25a4cSYihang Liu  %C = or i1 %A, %B
187*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
188*62a25a4cSYihang Liu  ret i32 %D
189*62a25a4cSYihang Liu}
190*62a25a4cSYihang Liu
191*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_3(i32 %x, i32 %y, i32 %z) {
192*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_3(
193*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
194*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B]], i32 [[X]], i32 [[Z]]
195*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
196*62a25a4cSYihang Liu;
197*62a25a4cSYihang Liu  %A = icmp eq i32 %x, %z
198*62a25a4cSYihang Liu  %B = icmp eq i32 %y, %z
199*62a25a4cSYihang Liu  %C = or i1 %A, %B
200*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
201*62a25a4cSYihang Liu  ret i32 %D
202*62a25a4cSYihang Liu}
203*62a25a4cSYihang Liu
204*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_4(i32 %x, i32 %y, i32 %z) {
205*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_4(
206*62a25a4cSYihang Liu; CHECK-NEXT:    [[B_NOT:%.*]] = icmp eq i32 [[Y:%.*]], [[Z]]
207*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[B_NOT]], i32 [[Z]], i32 [[X]]
208*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
209*62a25a4cSYihang Liu;
210*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
211*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
212*62a25a4cSYihang Liu  %C = and i1 %A, %B
213*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
214*62a25a4cSYihang Liu  ret i32 %D
215*62a25a4cSYihang Liu}
216*62a25a4cSYihang Liu
217*62a25a4cSYihang Liu
218*62a25a4cSYihang Liu; Negative tests
219*62a25a4cSYihang Liu
220*62a25a4cSYihang Liudefine i32 @select_or_icmp_bad_true_val(i32 %x, i32 %y, i32 %z, i32 %k) {
221*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_bad_true_val(
222*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
223*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
224*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
225*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[K:%.*]], i32 [[X]]
226*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
227*62a25a4cSYihang Liu;
228*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
229*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
230*62a25a4cSYihang Liu  %C = or i1 %A, %B
231*62a25a4cSYihang Liu  %D = select i1 %C, i32 %k, i32 %x
232*62a25a4cSYihang Liu  ret i32 %D
233*62a25a4cSYihang Liu}
234*62a25a4cSYihang Liu
235*62a25a4cSYihang Liudefine i32 @select_or_icmp_bad_false_val(i32 %x, i32 %y, i32 %z, i32 %k) {
236*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_bad_false_val(
237*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
238*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
239*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
240*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[K:%.*]]
241*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
242*62a25a4cSYihang Liu;
243*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
244*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
245*62a25a4cSYihang Liu  %C = or i1 %A, %B
246*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %k
247*62a25a4cSYihang Liu  ret i32 %D
248*62a25a4cSYihang Liu}
249*62a25a4cSYihang Liu
250*62a25a4cSYihang Liudefine i32 @select_or_icmp_bad_op(i32 %x, i32 %y, i32 %z, i32 %k) {
251*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_bad_op(
252*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[K:%.*]], [[Z:%.*]]
253*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
254*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
255*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X:%.*]]
256*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
257*62a25a4cSYihang Liu;
258*62a25a4cSYihang Liu  %A = icmp ne i32 %k, %z
259*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
260*62a25a4cSYihang Liu  %C = or i1 %A, %B
261*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
262*62a25a4cSYihang Liu  ret i32 %D
263*62a25a4cSYihang Liu}
264*62a25a4cSYihang Liu
265*62a25a4cSYihang Liudefine i32 @select_or_icmp_bad_op_2(i32 %x, i32 %y, i32 %z, i32 %k) {
266*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_bad_op_2(
267*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[K:%.*]]
268*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z:%.*]]
269*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
270*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[Z]], i32 [[X]]
271*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
272*62a25a4cSYihang Liu;
273*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %k
274*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
275*62a25a4cSYihang Liu  %C = or i1 %A, %B
276*62a25a4cSYihang Liu  %D = select i1 %C, i32 %z, i32 %x
277*62a25a4cSYihang Liu  ret i32 %D
278*62a25a4cSYihang Liu}
279*62a25a4cSYihang Liu
280*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_5(i32 %x, i32 %y, i32 %z, i32 %k) {
281*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_5(
282*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[K:%.*]]
283*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z:%.*]]
284*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
285*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[Z]]
286*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
287*62a25a4cSYihang Liu;
288*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %k
289*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
290*62a25a4cSYihang Liu  %C = or i1 %A, %B
291*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %z
292*62a25a4cSYihang Liu  ret i32 %D
293*62a25a4cSYihang Liu}
294*62a25a4cSYihang Liu
295*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_true_val(i32 %x, i32 %y, i32 %z, i32 %k) {
296*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_true_val(
297*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
298*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
299*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
300*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[K:%.*]], i32 [[Z]]
301*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
302*62a25a4cSYihang Liu;
303*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
304*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
305*62a25a4cSYihang Liu  %C = or i1 %A, %B
306*62a25a4cSYihang Liu  %D = select i1 %C, i32 %k, i32 %z
307*62a25a4cSYihang Liu  ret i32 %D
308*62a25a4cSYihang Liu}
309*62a25a4cSYihang Liu
310*62a25a4cSYihang Liudefine i32 @select_or_icmp_alt_bad_false_val(i32 %x, i32 %y, i32 %z, i32 %k) {
311*62a25a4cSYihang Liu; CHECK-LABEL: @select_or_icmp_alt_bad_false_val(
312*62a25a4cSYihang Liu; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[X:%.*]], [[Z:%.*]]
313*62a25a4cSYihang Liu; CHECK-NEXT:    [[B:%.*]] = icmp ne i32 [[Y:%.*]], [[Z]]
314*62a25a4cSYihang Liu; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
315*62a25a4cSYihang Liu; CHECK-NEXT:    [[D:%.*]] = select i1 [[C]], i32 [[X]], i32 [[K:%.*]]
316*62a25a4cSYihang Liu; CHECK-NEXT:    ret i32 [[D]]
317*62a25a4cSYihang Liu;
318*62a25a4cSYihang Liu  %A = icmp ne i32 %x, %z
319*62a25a4cSYihang Liu  %B = icmp ne i32 %y, %z
320*62a25a4cSYihang Liu  %C = or i1 %A, %B
321*62a25a4cSYihang Liu  %D = select i1 %C, i32 %x, i32 %k
322*62a25a4cSYihang Liu  ret i32 %D
323*62a25a4cSYihang Liu}
324