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