xref: /llvm-project/llvm/test/Transforms/InstCombine/select-with-extreme-eq-cond.ll (revision 6f8afafd308d37d9abc4af0801dd5a4451c13718)
1*6f8afafdSVeera; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2*6f8afafdSVeera; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*6f8afafdSVeera
4*6f8afafdSVeeradefine i1 @compare_unsigned_min(i8 %x, i8 %y) {
5*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_unsigned_min(
6*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
7*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
8*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult i8 [[X]], [[Y]]
9*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP2]]
10*6f8afafdSVeera;
11*6f8afafdSVeerastart:
12*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
13*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
14*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
15*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
16*6f8afafdSVeera  ret i1 %result
17*6f8afafdSVeera}
18*6f8afafdSVeera
19*6f8afafdSVeeradefine i1 @compare_signed_min(i8 %x, i8 %y) {
20*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_signed_min(
21*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
22*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
23*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp slt i8 [[X]], [[Y]]
24*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
25*6f8afafdSVeera;
26*6f8afafdSVeerastart:
27*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, -128
28*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, -128
29*6f8afafdSVeera  %cmp3 = icmp slt i8 %x, %y
30*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
31*6f8afafdSVeera  ret i1 %result
32*6f8afafdSVeera}
33*6f8afafdSVeera
34*6f8afafdSVeeradefine i1 @compare_unsigned_max(i8 %x, i8 %y) {
35*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_unsigned_max(
36*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
37*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
38*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp ugt i8 [[X]], [[Y]]
39*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
40*6f8afafdSVeera;
41*6f8afafdSVeerastart:
42*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 255
43*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 255
44*6f8afafdSVeera  %cmp3 = icmp ugt i8 %x, %y
45*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
46*6f8afafdSVeera  ret i1 %result
47*6f8afafdSVeera}
48*6f8afafdSVeera
49*6f8afafdSVeeradefine i1 @compare_signed_max(i8 %x, i8 %y) {
50*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_signed_max(
51*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
52*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
53*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp sgt i8 [[X]], [[Y]]
54*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
55*6f8afafdSVeera;
56*6f8afafdSVeerastart:
57*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 127
58*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 127
59*6f8afafdSVeera  %cmp3 = icmp sgt i8 %x, %y
60*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
61*6f8afafdSVeera  ret i1 %result
62*6f8afafdSVeera}
63*6f8afafdSVeera
64*6f8afafdSVeeradefine i1 @relational_cmp_unsigned_min(i8 %x, i8 %y) {
65*6f8afafdSVeera; CHECK-LABEL: define i1 @relational_cmp_unsigned_min(
66*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
67*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
68*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp ult i8 [[X]], [[Y]]
69*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
70*6f8afafdSVeera;
71*6f8afafdSVeerastart:
72*6f8afafdSVeera  %cmp1 = icmp ule i8 %x, 0
73*6f8afafdSVeera  %cmp2 = icmp ugt i8 %y, 0
74*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
75*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
76*6f8afafdSVeera  ret i1 %result
77*6f8afafdSVeera}
78*6f8afafdSVeera
79*6f8afafdSVeeradefine i1 @relational_cmp_signed_min(i8 %x, i8 %y) {
80*6f8afafdSVeera; CHECK-LABEL: define i1 @relational_cmp_signed_min(
81*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
82*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
83*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp slt i8 [[X]], [[Y]]
84*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
85*6f8afafdSVeera;
86*6f8afafdSVeerastart:
87*6f8afafdSVeera  %cmp1 = icmp sle i8 %x, -128
88*6f8afafdSVeera  %cmp2 = icmp sgt i8 %y, -128
89*6f8afafdSVeera  %cmp3 = icmp slt i8 %x, %y
90*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
91*6f8afafdSVeera  ret i1 %result
92*6f8afafdSVeera}
93*6f8afafdSVeera
94*6f8afafdSVeeradefine i1 @relational_cmp_unsigned_max(i8 %x, i8 %y) {
95*6f8afafdSVeera; CHECK-LABEL: define i1 @relational_cmp_unsigned_max(
96*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
97*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
98*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp ugt i8 [[X]], [[Y]]
99*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
100*6f8afafdSVeera;
101*6f8afafdSVeerastart:
102*6f8afafdSVeera  %cmp1 = icmp uge i8 %x, 255
103*6f8afafdSVeera  %cmp2 = icmp ult i8 %y, 255
104*6f8afafdSVeera  %cmp3 = icmp ugt i8 %x, %y
105*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
106*6f8afafdSVeera  ret i1 %result
107*6f8afafdSVeera}
108*6f8afafdSVeera
109*6f8afafdSVeeradefine i1 @relational_cmp_signed_max(i8 %x, i8 %y) {
110*6f8afafdSVeera; CHECK-LABEL: define i1 @relational_cmp_signed_max(
111*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
112*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
113*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp sgt i8 [[X]], [[Y]]
114*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP4]]
115*6f8afafdSVeera;
116*6f8afafdSVeerastart:
117*6f8afafdSVeera  %cmp1 = icmp sge i8 %x, 127
118*6f8afafdSVeera  %cmp2 = icmp slt i8 %y, 127
119*6f8afafdSVeera  %cmp3 = icmp sgt i8 %x, %y
120*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
121*6f8afafdSVeera  ret i1 %result
122*6f8afafdSVeera}
123*6f8afafdSVeera
124*6f8afafdSVeeradeclare void @use(i1)
125*6f8afafdSVeera
126*6f8afafdSVeeradefine i1 @compare_signed_max_multiuse(i8 %x, i8 %y) {
127*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_signed_max_multiuse(
128*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
129*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
130*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp sgt i8 [[X]], [[Y]]
131*6f8afafdSVeera; CHECK-NEXT:    call void @use(i1 [[TMP4]])
132*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = icmp sgt i8 [[X]], [[Y]]
133*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
134*6f8afafdSVeera;
135*6f8afafdSVeerastart:
136*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 127
137*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 127
138*6f8afafdSVeera  %cmp3 = icmp sgt i8 %x, %y
139*6f8afafdSVeera  call void @use(i1 %cmp3)
140*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
141*6f8afafdSVeera  ret i1 %result
142*6f8afafdSVeera}
143*6f8afafdSVeera
144*6f8afafdSVeeradefine i1 @compare_signed_min_samesign(i8 %x, i8 %y) {
145*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_signed_min_samesign(
146*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
147*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
148*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = icmp slt i8 [[X]], [[Y]]
149*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
150*6f8afafdSVeera;
151*6f8afafdSVeerastart:
152*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, -128
153*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, -128
154*6f8afafdSVeera  %cmp3 = icmp samesign slt i8 %x, %y
155*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
156*6f8afafdSVeera  ret i1 %result
157*6f8afafdSVeera}
158*6f8afafdSVeera
159*6f8afafdSVeeradefine i1 @compare_flipped(i8 %x, i8 %y) {
160*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_flipped(
161*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
162*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
163*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = icmp ult i8 [[X]], [[Y]]
164*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
165*6f8afafdSVeera;
166*6f8afafdSVeerastart:
167*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
168*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
169*6f8afafdSVeera  %cmp3 = icmp ugt i8 %y, %x
170*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
171*6f8afafdSVeera  ret i1 %result
172*6f8afafdSVeera}
173*6f8afafdSVeera
174*6f8afafdSVeeradefine i1 @compare_swapped(i8 %x, i8 %y) {
175*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_swapped(
176*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
177*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
178*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = icmp ult i8 [[X]], [[Y]]
179*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
180*6f8afafdSVeera;
181*6f8afafdSVeerastart:
182*6f8afafdSVeera  %cmp1 = icmp ne i8 %x, 0
183*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
184*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
185*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp3, i1 %cmp2
186*6f8afafdSVeera  ret i1 %result
187*6f8afafdSVeera}
188*6f8afafdSVeera
189*6f8afafdSVeeradefine i1 @compare_swapped_flipped_unsigned_max(i8 %x, i8 %y) {
190*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_swapped_flipped_unsigned_max(
191*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
192*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
193*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = icmp ugt i8 [[X]], [[Y]]
194*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
195*6f8afafdSVeera;
196*6f8afafdSVeerastart:
197*6f8afafdSVeera  %cmp1 = icmp ne i8 %x, 255
198*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 255
199*6f8afafdSVeera  %cmp3 = icmp ult i8 %y, %x
200*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp3, i1 %cmp2
201*6f8afafdSVeera  ret i1 %result
202*6f8afafdSVeera}
203*6f8afafdSVeera
204*6f8afafdSVeeradefine i1 @compare_unsigned_min_illegal_type(i9 %x, i9 %y) {
205*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_unsigned_min_illegal_type(
206*6f8afafdSVeera; CHECK-SAME: i9 [[X:%.*]], i9 [[Y:%.*]]) {
207*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
208*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult i9 [[X]], [[Y]]
209*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[TMP2]]
210*6f8afafdSVeera;
211*6f8afafdSVeerastart:
212*6f8afafdSVeera  %cmp1 = icmp eq i9 %x, 0
213*6f8afafdSVeera  %cmp2 = icmp ne i9 %y, 0
214*6f8afafdSVeera  %cmp3 = icmp ult i9 %x, %y
215*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
216*6f8afafdSVeera  ret i1 %result
217*6f8afafdSVeera}
218*6f8afafdSVeera
219*6f8afafdSVeeradefine i1 @compare_true_poison(i8 %x, i8 %y) {
220*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_true_poison(
221*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
222*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
223*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[X]], [[Y]]
224*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[CMP3]]
225*6f8afafdSVeera;
226*6f8afafdSVeerastart:
227*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
228*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
229*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
230*6f8afafdSVeera  %result = select i1 %cmp1, i1 poison, i1 %cmp3
231*6f8afafdSVeera  ret i1 %result
232*6f8afafdSVeera}
233*6f8afafdSVeera
234*6f8afafdSVeeradefine <2 x i1> @compare_vector(<2 x i8> %x, <2 x i8> %y) {
235*6f8afafdSVeera; CHECK-LABEL: define <2 x i1> @compare_vector(
236*6f8afafdSVeera; CHECK-SAME: <2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]]) {
237*6f8afafdSVeera; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult <2 x i8> [[X]], [[Y]]
238*6f8afafdSVeera; CHECK-NEXT:    ret <2 x i1> [[TMP1]]
239*6f8afafdSVeera;
240*6f8afafdSVeera  %cmp1 = icmp eq <2 x i8> %x, zeroinitializer
241*6f8afafdSVeera  %cmp2 = icmp ne <2 x i8> %y, zeroinitializer
242*6f8afafdSVeera  %cmp3 = icmp ult <2 x i8> %x, %y
243*6f8afafdSVeera  %result = select <2 x i1> %cmp1, <2 x i1> %cmp2, <2 x i1> %cmp3
244*6f8afafdSVeera  ret <2 x i1> %result
245*6f8afafdSVeera}
246*6f8afafdSVeera
247*6f8afafdSVeeradefine i1 @compare_pointer_negative(ptr %x, ptr %y) {
248*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_pointer_negative(
249*6f8afafdSVeera; CHECK-SAME: ptr [[X:%.*]], ptr [[Y:%.*]]) {
250*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
251*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[X]], inttoptr (i8 127 to ptr)
252*6f8afafdSVeera; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne ptr [[Y]], inttoptr (i8 127 to ptr)
253*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp sgt ptr [[X]], [[Y]]
254*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[TMP2]], i1 [[TMP3]], i1 [[TMP4]]
255*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
256*6f8afafdSVeera;
257*6f8afafdSVeerastart:
258*6f8afafdSVeera  %X = inttoptr i8 127 to ptr
259*6f8afafdSVeera  %cmp1 = icmp eq ptr %x, %X
260*6f8afafdSVeera  %cmp2 = icmp ne ptr %y, %X
261*6f8afafdSVeera  %cmp3 = icmp sgt ptr %x, %y
262*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
263*6f8afafdSVeera  ret i1 %result
264*6f8afafdSVeera}
265*6f8afafdSVeera
266*6f8afafdSVeeradefine i1 @compare_float_negative(half %x, half %y) {
267*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_float_negative(
268*6f8afafdSVeera; CHECK-SAME: half [[X:%.*]], half [[Y:%.*]]) {
269*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
270*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = fcmp oeq half [[X]], 0xH0000
271*6f8afafdSVeera; CHECK-NEXT:    [[TMP3:%.*]] = fcmp one half [[Y]], 0xH0000
272*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = fcmp ult half [[X]], [[Y]]
273*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[TMP2]], i1 [[TMP3]], i1 [[TMP4]]
274*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
275*6f8afafdSVeera;
276*6f8afafdSVeerastart:
277*6f8afafdSVeera  %cmp1 = fcmp oeq half %x, 0.0
278*6f8afafdSVeera  %cmp2 = fcmp one half %y, 0.0
279*6f8afafdSVeera  %cmp3 = fcmp ult half %x, %y
280*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
281*6f8afafdSVeera  ret i1 %result
282*6f8afafdSVeera}
283*6f8afafdSVeera
284*6f8afafdSVeeradefine i1 @compare_unsigned_max_swapped_lhs_rhs_negative(i8 %x, i8 %y) {
285*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_unsigned_max_swapped_lhs_rhs_negative(
286*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
287*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
288*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8 [[X]], -1
289*6f8afafdSVeera; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp ne i8 [[Y]], -1
290*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[DOTNOT]], i1 [[TMP2]], i1 false
291*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
292*6f8afafdSVeera;
293*6f8afafdSVeerastart:
294*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 255
295*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 255
296*6f8afafdSVeera  %cmp3 = icmp ugt i8 %x, %y
297*6f8afafdSVeera  %result = select i1 %cmp2, i1 %cmp1, i1 %cmp3
298*6f8afafdSVeera  ret i1 %result
299*6f8afafdSVeera}
300*6f8afafdSVeera
301*6f8afafdSVeeradefine i1 @compare_signed_min_negative(i8 %x, i8 %y) {
302*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_signed_min_negative(
303*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
304*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
305*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8 [[X]], -127
306*6f8afafdSVeera; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[Y]], -127
307*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp slt i8 [[X]], [[Y]]
308*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[TMP2]], i1 [[TMP3]], i1 [[TMP4]]
309*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
310*6f8afafdSVeera;
311*6f8afafdSVeerastart:
312*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, -127
313*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, -127
314*6f8afafdSVeera  %cmp3 = icmp slt i8 %x, %y
315*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
316*6f8afafdSVeera  ret i1 %result
317*6f8afafdSVeera}
318*6f8afafdSVeera
319*6f8afafdSVeeradefine i1 @compare_unsigned_max_negative(i8 %x, i8 %y) {
320*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_unsigned_max_negative(
321*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
322*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
323*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8 [[X]], -1
324*6f8afafdSVeera; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[Y]], -1
325*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp ult i8 [[X]], [[Y]]
326*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[TMP2]], i1 [[TMP3]], i1 [[TMP4]]
327*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
328*6f8afafdSVeera;
329*6f8afafdSVeerastart:
330*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 255
331*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 255
332*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
333*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
334*6f8afafdSVeera  ret i1 %result
335*6f8afafdSVeera}
336*6f8afafdSVeera
337*6f8afafdSVeeradefine i1 @non_strict_op_negative(i8 %x, i8 %y) {
338*6f8afafdSVeera; CHECK-LABEL: define i1 @non_strict_op_negative(
339*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
340*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
341*6f8afafdSVeera; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i8 [[X]], 0
342*6f8afafdSVeera; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i8 [[Y]], 0
343*6f8afafdSVeera; CHECK-NEXT:    [[TMP4:%.*]] = icmp ule i8 [[X]], [[Y]]
344*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[TMP2]], i1 [[TMP3]], i1 [[TMP4]]
345*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
346*6f8afafdSVeera;
347*6f8afafdSVeerastart:
348*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
349*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
350*6f8afafdSVeera  %cmp3 = icmp ule i8 %x, %y
351*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
352*6f8afafdSVeera  ret i1 %result
353*6f8afafdSVeera}
354*6f8afafdSVeera
355*6f8afafdSVeeradefine i1 @compare_poison_negative(i8 %x, i8 %y) {
356*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_poison_negative(
357*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
358*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
359*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Y]], 0
360*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[CMP2]]
361*6f8afafdSVeera;
362*6f8afafdSVeerastart:
363*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
364*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
365*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 poison
366*6f8afafdSVeera  ret i1 %result
367*6f8afafdSVeera}
368*6f8afafdSVeera
369*6f8afafdSVeeradefine i1 @mismatched_cond_lhs_negative(i8 %x, i8 %y, i8 %z) {
370*6f8afafdSVeera; CHECK-LABEL: define i1 @mismatched_cond_lhs_negative(
371*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]]) {
372*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
373*6f8afafdSVeera; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[X]], 0
374*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Y]], 0
375*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[Z]], [[Y]]
376*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 [[CMP3]]
377*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
378*6f8afafdSVeera;
379*6f8afafdSVeerastart:
380*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
381*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
382*6f8afafdSVeera  %cmp3 = icmp ult i8 %z, %y
383*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
384*6f8afafdSVeera  ret i1 %result
385*6f8afafdSVeera}
386*6f8afafdSVeera
387*6f8afafdSVeeradefine i1 @mismatched_trueval_lhs_negative(i8 %x, i8 %y, i8 %z) {
388*6f8afafdSVeera; CHECK-LABEL: define i1 @mismatched_trueval_lhs_negative(
389*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]]) {
390*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
391*6f8afafdSVeera; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[X]], 0
392*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Y]], 0
393*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[X]], [[Z]]
394*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 [[CMP3]]
395*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
396*6f8afafdSVeera;
397*6f8afafdSVeerastart:
398*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
399*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
400*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %z
401*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
402*6f8afafdSVeera  ret i1 %result
403*6f8afafdSVeera}
404*6f8afafdSVeera
405*6f8afafdSVeeradefine i1 @mismatched_constant_negative(i8 %x, i8 %y) {
406*6f8afafdSVeera; CHECK-LABEL: define i1 @mismatched_constant_negative(
407*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
408*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
409*6f8afafdSVeera; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[X]], 0
410*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Y]], 2
411*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[X]], [[Y]]
412*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 [[CMP3]]
413*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
414*6f8afafdSVeera;
415*6f8afafdSVeerastart:
416*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
417*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 2
418*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
419*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
420*6f8afafdSVeera  ret i1 %result
421*6f8afafdSVeera}
422*6f8afafdSVeera
423*6f8afafdSVeeradefine i1 @mismatched_constant_two_negative(i8 %x, i8 %y) {
424*6f8afafdSVeera; CHECK-LABEL: define i1 @mismatched_constant_two_negative(
425*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
426*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
427*6f8afafdSVeera; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[X]], 2
428*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[Y]], 0
429*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[X]], [[Y]]
430*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 [[CMP3]]
431*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
432*6f8afafdSVeera;
433*6f8afafdSVeerastart:
434*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 2
435*6f8afafdSVeera  %cmp2 = icmp ne i8 %y, 0
436*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
437*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
438*6f8afafdSVeera  ret i1 %result
439*6f8afafdSVeera}
440*6f8afafdSVeera
441*6f8afafdSVeeradefine i1 @compare_eq_eq_negative(i8 %x, i8 %y) {
442*6f8afafdSVeera; CHECK-LABEL: define i1 @compare_eq_eq_negative(
443*6f8afafdSVeera; CHECK-SAME: i8 [[X:%.*]], i8 [[Y:%.*]]) {
444*6f8afafdSVeera; CHECK-NEXT:  [[START:.*:]]
445*6f8afafdSVeera; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[X]], 0
446*6f8afafdSVeera; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[Y]], 0
447*6f8afafdSVeera; CHECK-NEXT:    [[CMP3:%.*]] = icmp ult i8 [[X]], [[Y]]
448*6f8afafdSVeera; CHECK-NEXT:    [[RESULT:%.*]] = select i1 [[CMP1]], i1 [[CMP2]], i1 [[CMP3]]
449*6f8afafdSVeera; CHECK-NEXT:    ret i1 [[RESULT]]
450*6f8afafdSVeera;
451*6f8afafdSVeerastart:
452*6f8afafdSVeera  %cmp1 = icmp eq i8 %x, 0
453*6f8afafdSVeera  %cmp2 = icmp eq i8 %y, 0
454*6f8afafdSVeera  %cmp3 = icmp ult i8 %x, %y
455*6f8afafdSVeera  %result = select i1 %cmp1, i1 %cmp2, i1 %cmp3
456*6f8afafdSVeera  ret i1 %result
457*6f8afafdSVeera}
458