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