1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare void @bar() 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine void @test1(i32* nocapture %X) nounwind minsize { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %X, align 4 8*9880d681SAndroid Build Coastguard Worker %and = and i32 %tmp1, 255 9*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %and, 47 10*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerif.then: 13*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 14*9880d681SAndroid Build Coastguard Worker br label %if.end 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerif.end: 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 19*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $47, (%{{rdi|rcx}}) 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine void @test2(i32 %X) nounwind minsize { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %and = and i32 %X, 255 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %and, 47 26*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerif.then: 29*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 30*9880d681SAndroid Build Coastguard Worker br label %if.end 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerif.end: 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 35*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $47, %{{dil|cl}} 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %X) nounwind minsize { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker %and = and i32 %X, 255 41*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %and, 255 42*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerif.then: 45*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 46*9880d681SAndroid Build Coastguard Worker br label %if.end 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerif.end: 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 51*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $-1, %{{dil|cl}} 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; PR16083 55*9880d681SAndroid Build Coastguard Workerdefine i1 @test4(i64 %a, i32 %b) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %tobool = icmp ne i32 %b, 0 58*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %lor.end, label %lor.rhs 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerlor.rhs: ; preds = %entry 61*9880d681SAndroid Build Coastguard Worker %and = and i64 0, %a 62*9880d681SAndroid Build Coastguard Worker %tobool1 = icmp ne i64 %and, 0 63*9880d681SAndroid Build Coastguard Worker br label %lor.end 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerlor.end: ; preds = %lor.rhs, %entry 66*9880d681SAndroid Build Coastguard Worker %p = phi i1 [ true, %entry ], [ %tobool1, %lor.rhs ] 67*9880d681SAndroid Build Coastguard Worker ret i1 %p 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker@x = global { i8, i8, i8, i8, i8, i8, i8, i8 } { i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 1 }, align 4 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; PR16551 73*9880d681SAndroid Build Coastguard Workerdefine void @test5(i32 %X) nounwind minsize { 74*9880d681SAndroid Build Coastguard Workerentry: 75*9880d681SAndroid Build Coastguard Worker %bf.load = load i56, i56* bitcast ({ i8, i8, i8, i8, i8, i8, i8, i8 }* @x to i56*), align 4 76*9880d681SAndroid Build Coastguard Worker %bf.lshr = lshr i56 %bf.load, 32 77*9880d681SAndroid Build Coastguard Worker %bf.cast = trunc i56 %bf.lshr to i32 78*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %bf.cast, 1 79*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerif.then: 82*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 83*9880d681SAndroid Build Coastguard Worker br label %if.end 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerif.end: 86*9880d681SAndroid Build Coastguard Worker ret void 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 89*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmpl $1,{{.*}}x+4 90*9880d681SAndroid Build Coastguard Worker; CHECK: ret 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2_1: 94*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl 95*9880d681SAndroid Build Coastguard Worker; CHECK: cmpl $256 96*9880d681SAndroid Build Coastguard Worker; CHECK: jne 97*9880d681SAndroid Build Coastguard Workerdefine void @test2_1(i32 %X) nounwind minsize { 98*9880d681SAndroid Build Coastguard Workerentry: 99*9880d681SAndroid Build Coastguard Worker %and = and i32 %X, 255 100*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %and, 256 101*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerif.then: 104*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 105*9880d681SAndroid Build Coastguard Worker br label %if.end 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerif.end: 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_1: 112*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $1, %{{dil|cl}} 113*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_1(i8 %x) nounwind minsize { 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 116*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, 1 117*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerif.then: 120*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 121*9880d681SAndroid Build Coastguard Worker br label %if.end 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerif.end: 124*9880d681SAndroid Build Coastguard Worker ret void 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_47: 128*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $47, %{{dil|cl}} 129*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_47(i8 %x) nounwind minsize { 130*9880d681SAndroid Build Coastguard Workerentry: 131*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 132*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, 47 133*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerif.then: 136*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 137*9880d681SAndroid Build Coastguard Worker br label %if.end 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerif.end: 140*9880d681SAndroid Build Coastguard Worker ret void 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_127: 144*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $127, %{{dil|cl}} 145*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_127(i8 %x) nounwind minsize { 146*9880d681SAndroid Build Coastguard Workerentry: 147*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 148*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, 127 149*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerif.then: 152*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 153*9880d681SAndroid Build Coastguard Worker br label %if.end 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerif.end: 156*9880d681SAndroid Build Coastguard Worker ret void 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_neg1: 160*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $-1, %{{dil|cl}} 161*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_neg1(i8 %x) nounwind minsize { 162*9880d681SAndroid Build Coastguard Workerentry: 163*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 164*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, -1 165*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerif.then: 168*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 169*9880d681SAndroid Build Coastguard Worker br label %if.end 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Workerif.end: 172*9880d681SAndroid Build Coastguard Worker ret void 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_neg2: 176*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $-2, %{{dil|cl}} 177*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_neg2(i8 %x) nounwind minsize { 178*9880d681SAndroid Build Coastguard Workerentry: 179*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 180*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, -2 181*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerif.then: 184*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 185*9880d681SAndroid Build Coastguard Worker br label %if.end 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerif.end: 188*9880d681SAndroid Build Coastguard Worker ret void 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_neg127: 192*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $-127, %{{dil|cl}} 193*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_neg127(i8 %x) nounwind minsize { 194*9880d681SAndroid Build Coastguard Workerentry: 195*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 196*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, -127 197*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerif.then: 200*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 201*9880d681SAndroid Build Coastguard Worker br label %if.end 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerif.end: 204*9880d681SAndroid Build Coastguard Worker ret void 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_neg128: 208*9880d681SAndroid Build Coastguard Worker; CHECK: cmpb $-128, %{{dil|cl}} 209*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_neg128(i8 %x) nounwind minsize { 210*9880d681SAndroid Build Coastguard Workerentry: 211*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 212*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, -128 213*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerif.then: 216*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 217*9880d681SAndroid Build Coastguard Worker br label %if.end 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerif.end: 220*9880d681SAndroid Build Coastguard Worker ret void 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sext_i8_icmp_255: 224*9880d681SAndroid Build Coastguard Worker; CHECK: movb $1, 225*9880d681SAndroid Build Coastguard Worker; CHECK: testb 226*9880d681SAndroid Build Coastguard Worker; CHECK: jne 227*9880d681SAndroid Build Coastguard Workerdefine void @test_sext_i8_icmp_255(i8 %x) nounwind minsize { 228*9880d681SAndroid Build Coastguard Workerentry: 229*9880d681SAndroid Build Coastguard Worker %sext = sext i8 %x to i32 230*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %sext, 255 231*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Workerif.then: 234*9880d681SAndroid Build Coastguard Worker tail call void @bar() nounwind 235*9880d681SAndroid Build Coastguard Worker br label %if.end 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerif.end: 238*9880d681SAndroid Build Coastguard Worker ret void 239*9880d681SAndroid Build Coastguard Worker} 240