1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=pentiumpro -verify-machineinstrs | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @func_f(i32 %X) { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_f: 6*9880d681SAndroid Build Coastguard Worker; CHECK: jns 7*9880d681SAndroid Build Coastguard Worker %tmp1 = add i32 %X, 1 ; <i32> [#uses=1] 8*9880d681SAndroid Build Coastguard Worker %tmp = icmp slt i32 %tmp1, 0 ; <i1> [#uses=1] 9*9880d681SAndroid Build Coastguard Worker br i1 %tmp, label %cond_true, label %cond_next 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workercond_true: ; preds = %entry 12*9880d681SAndroid Build Coastguard Worker %tmp2 = tail call i32 (...) @bar( ) ; <i32> [#uses=0] 13*9880d681SAndroid Build Coastguard Worker br label %cond_next 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workercond_next: ; preds = %cond_true, %entry 16*9880d681SAndroid Build Coastguard Worker %tmp3 = tail call i32 (...) @baz( ) ; <i32> [#uses=0] 17*9880d681SAndroid Build Coastguard Worker ret i32 undef 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdeclare i32 @bar(...) 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdeclare i32 @baz(...) 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; rdar://10633221 25*9880d681SAndroid Build Coastguard Worker; rdar://11355268 26*9880d681SAndroid Build Coastguard Workerdefine i32 @func_g(i32 %a, i32 %b) nounwind { 27*9880d681SAndroid Build Coastguard Workerentry: 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_g: 29*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 30*9880d681SAndroid Build Coastguard Worker; CHECK: cmovs 31*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 32*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %sub, 0 33*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 34*9880d681SAndroid Build Coastguard Worker ret i32 %cond 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; rdar://10734411 38*9880d681SAndroid Build Coastguard Workerdefine i32 @func_h(i32 %a, i32 %b) nounwind { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_h: 41*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 42*9880d681SAndroid Build Coastguard Worker; CHECK: cmov 43*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl 44*9880d681SAndroid Build Coastguard Worker; CHECK: ret 45*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %b, %a 46*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 47*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 48*9880d681SAndroid Build Coastguard Worker ret i32 %cond 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Workerdefine i32 @func_i(i32 %a, i32 %b) nounwind { 51*9880d681SAndroid Build Coastguard Workerentry: 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_i: 53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 54*9880d681SAndroid Build Coastguard Worker; CHECK: cmov 55*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl 56*9880d681SAndroid Build Coastguard Worker; CHECK: ret 57*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, %b 58*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 59*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 60*9880d681SAndroid Build Coastguard Worker ret i32 %cond 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Workerdefine i32 @func_j(i32 %a, i32 %b) nounwind { 63*9880d681SAndroid Build Coastguard Workerentry: 64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_j: 65*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 66*9880d681SAndroid Build Coastguard Worker; CHECK: cmov 67*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl 68*9880d681SAndroid Build Coastguard Worker; CHECK: ret 69*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %a, %b 70*9880d681SAndroid Build Coastguard Worker %sub = sub i32 %a, %b 71*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 72*9880d681SAndroid Build Coastguard Worker ret i32 %cond 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Workerdefine i32 @func_k(i32 %a, i32 %b) nounwind { 75*9880d681SAndroid Build Coastguard Workerentry: 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_k: 77*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 78*9880d681SAndroid Build Coastguard Worker; CHECK: cmov 79*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movl 80*9880d681SAndroid Build Coastguard Worker; CHECK: ret 81*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %b, %a 82*9880d681SAndroid Build Coastguard Worker %sub = sub i32 %a, %b 83*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 84*9880d681SAndroid Build Coastguard Worker ret i32 %cond 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker; redundant cmp instruction 87*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l(i32 %a, i32 %b) nounwind { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l: 90*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 91*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %b, %a 92*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 93*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 %a 94*9880d681SAndroid Build Coastguard Worker ret i32 %cond 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Workerdefine i32 @func_m(i32 %a, i32 %b) nounwind { 97*9880d681SAndroid Build Coastguard Workerentry: 98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_m: 99*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 100*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, %b 101*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 102*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %b, i32 %sub 103*9880d681SAndroid Build Coastguard Worker ret i32 %cond 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker; If EFLAGS is live-out, we can't remove cmp if there exists 106*9880d681SAndroid Build Coastguard Worker; a swapped sub. 107*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l2(i32 %a, i32 %b) nounwind { 108*9880d681SAndroid Build Coastguard Workerentry: 109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l2: 110*9880d681SAndroid Build Coastguard Worker; CHECK: cmp 111*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %b, %a 112*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 113*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.else 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerif.then: 116*9880d681SAndroid Build Coastguard Worker %cmp2 = icmp sgt i32 %b, %a 117*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp2, i32 %sub, i32 %a 118*9880d681SAndroid Build Coastguard Worker ret i32 %sel 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerif.else: 121*9880d681SAndroid Build Coastguard Worker ret i32 %sub 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l3(i32 %a, i32 %b) nounwind { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l3: 126*9880d681SAndroid Build Coastguard Worker; CHECK: sub 127*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 128*9880d681SAndroid Build Coastguard Worker; CHECK: jge 129*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %b, %a 130*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, %b 131*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.else 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerif.then: 134*9880d681SAndroid Build Coastguard Worker ret i32 %sub 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerif.else: 137*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %sub, 1 138*9880d681SAndroid Build Coastguard Worker ret i32 %add 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker; rdar://11830760 141*9880d681SAndroid Build Coastguard Worker; When Movr0 is between sub and cmp, we need to move "Movr0" before sub. 142*9880d681SAndroid Build Coastguard Workerdefine i32 @func_l4(i32 %a, i32 %b) nounwind { 143*9880d681SAndroid Build Coastguard Workerentry: 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_l4: 145*9880d681SAndroid Build Coastguard Worker; CHECK: xor 146*9880d681SAndroid Build Coastguard Worker; CHECK: sub 147*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 148*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %b, %a 149*9880d681SAndroid Build Coastguard Worker %sub = sub i32 %a, %b 150*9880d681SAndroid Build Coastguard Worker %.sub = select i1 %cmp, i32 0, i32 %sub 151*9880d681SAndroid Build Coastguard Worker ret i32 %.sub 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker; rdar://11540023 154*9880d681SAndroid Build Coastguard Workerdefine i32 @func_n(i32 %x, i32 %y) nounwind { 155*9880d681SAndroid Build Coastguard Workerentry: 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_n: 157*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub 158*9880d681SAndroid Build Coastguard Worker; CHECK: cmp 159*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %x, %y 160*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %sub, 0 161*9880d681SAndroid Build Coastguard Worker %y.x = select i1 %cmp, i32 %y, i32 %x 162*9880d681SAndroid Build Coastguard Worker ret i32 %y.x 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker; PR://13046 165*9880d681SAndroid Build Coastguard Workerdefine void @func_o() nounwind uwtable { 166*9880d681SAndroid Build Coastguard Workerentry: 167*9880d681SAndroid Build Coastguard Worker %0 = load i16, i16* undef, align 2 168*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then.i, label %if.end.i 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerif.then.i: ; preds = %entry 171*9880d681SAndroid Build Coastguard Worker unreachable 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerif.end.i: ; preds = %entry 174*9880d681SAndroid Build Coastguard Worker br i1 undef, label %sw.bb, label %sw.default 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workersw.bb: ; preds = %if.end.i 177*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then44, label %if.end29 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerif.end29: ; preds = %sw.bb 180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_o: 181*9880d681SAndroid Build Coastguard Worker; CHECK: cmp 182*9880d681SAndroid Build Coastguard Worker %1 = urem i16 %0, 10 183*9880d681SAndroid Build Coastguard Worker %cmp25 = icmp eq i16 %1, 0 184*9880d681SAndroid Build Coastguard Worker %. = select i1 %cmp25, i16 2, i16 0 185*9880d681SAndroid Build Coastguard Worker br i1 %cmp25, label %if.then44, label %sw.default 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workersw.default: ; preds = %if.end29, %if.end.i 188*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then.i96, label %if.else.i97 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerif.then.i96: ; preds = %sw.default 191*9880d681SAndroid Build Coastguard Worker unreachable 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerif.else.i97: ; preds = %sw.default 194*9880d681SAndroid Build Coastguard Worker unreachable 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerif.then44: ; preds = %if.end29, %sw.bb 197*9880d681SAndroid Build Coastguard Worker %aModeRefSel.1.ph = phi i16 [ %., %if.end29 ], [ 3, %sw.bb ] 198*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then.i103, label %if.else.i104 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Workerif.then.i103: ; preds = %if.then44 201*9880d681SAndroid Build Coastguard Worker unreachable 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerif.else.i104: ; preds = %if.then44 204*9880d681SAndroid Build Coastguard Worker ret void 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker; rdar://11855129 207*9880d681SAndroid Build Coastguard Workerdefine i32 @func_p(i32 %a, i32 %b) nounwind { 208*9880d681SAndroid Build Coastguard Workerentry: 209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_p: 210*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 211*9880d681SAndroid Build Coastguard Worker; CHECK: cmovs 212*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %b, %a 213*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %add, 0 214*9880d681SAndroid Build Coastguard Worker %add. = select i1 %cmp, i32 %add, i32 0 215*9880d681SAndroid Build Coastguard Worker ret i32 %add. 216*9880d681SAndroid Build Coastguard Worker} 217*9880d681SAndroid Build Coastguard Worker; PR13475 218*9880d681SAndroid Build Coastguard Worker; If we have sub a, b and cmp b, a and the result of cmp is used 219*9880d681SAndroid Build Coastguard Worker; by sbb, we should not optimize cmp away. 220*9880d681SAndroid Build Coastguard Workerdefine i32 @func_q(i32 %a0, i32 %a1, i32 %a2) { 221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_q: 222*9880d681SAndroid Build Coastguard Worker; CHECK: cmp 223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sbb 224*9880d681SAndroid Build Coastguard Worker %1 = icmp ult i32 %a0, %a1 225*9880d681SAndroid Build Coastguard Worker %2 = sub i32 %a1, %a0 226*9880d681SAndroid Build Coastguard Worker %3 = select i1 %1, i32 -1, i32 0 227*9880d681SAndroid Build Coastguard Worker %4 = xor i32 %2, %3 228*9880d681SAndroid Build Coastguard Worker ret i32 %4 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker; rdar://11873276 231*9880d681SAndroid Build Coastguard Workerdefine i8* @func_r(i8* %base, i32* nocapture %offset, i32 %size) nounwind { 232*9880d681SAndroid Build Coastguard Workerentry: 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_r: 234*9880d681SAndroid Build Coastguard Worker; CHECK: sub 235*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 236*9880d681SAndroid Build Coastguard Worker; CHECK: j 237*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub 238*9880d681SAndroid Build Coastguard Worker; CHECK: ret 239*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %offset, align 8 240*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %0, %size 241*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %return, label %if.end 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Workerif.end: 244*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %0, %size 245*9880d681SAndroid Build Coastguard Worker store i32 %sub, i32* %offset, align 8 246*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i8, i8* %base, i32 %sub 247*9880d681SAndroid Build Coastguard Worker br label %return 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerreturn: 250*9880d681SAndroid Build Coastguard Worker %retval.0 = phi i8* [ %add.ptr, %if.end ], [ null, %entry ] 251*9880d681SAndroid Build Coastguard Worker ret i8* %retval.0 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker; Test optimizations of dec/inc. 255*9880d681SAndroid Build Coastguard Workerdefine i32 @func_dec(i32 %a) nounwind { 256*9880d681SAndroid Build Coastguard Workerentry: 257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_dec: 258*9880d681SAndroid Build Coastguard Worker; CHECK: decl 259*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 260*9880d681SAndroid Build Coastguard Worker; CHECK: cmovsl 261*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i32 %a, 1 262*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %sub, 0 263*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %sub, i32 0 264*9880d681SAndroid Build Coastguard Worker ret i32 %cond 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine i32 @func_inc(i32 %a) nounwind { 268*9880d681SAndroid Build Coastguard Workerentry: 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_inc: 270*9880d681SAndroid Build Coastguard Worker; CHECK: incl 271*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 272*9880d681SAndroid Build Coastguard Worker; CHECK: cmovsl 273*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %a, 1 274*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %add, 0 275*9880d681SAndroid Build Coastguard Worker %cond = select i1 %cmp, i32 %add, i32 0 276*9880d681SAndroid Build Coastguard Worker ret i32 %cond 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Worker; PR13966 280*9880d681SAndroid Build Coastguard Worker@b = common global i32 0, align 4 281*9880d681SAndroid Build Coastguard Worker@a = common global i32 0, align 4 282*9880d681SAndroid Build Coastguard Workerdefine i32 @func_test1(i32 %p1) nounwind uwtable { 283*9880d681SAndroid Build Coastguard Workerentry: 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: func_test1: 285*9880d681SAndroid Build Coastguard Worker; CHECK: andb 286*9880d681SAndroid Build Coastguard Worker; CHECK: j 287*9880d681SAndroid Build Coastguard Worker; CHECK: ret 288*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @b, align 4 289*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %0, %p1 290*9880d681SAndroid Build Coastguard Worker %conv = zext i1 %cmp to i32 291*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @a, align 4 292*9880d681SAndroid Build Coastguard Worker %and = and i32 %conv, %1 293*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %and to i8 294*9880d681SAndroid Build Coastguard Worker %2 = urem i8 %conv1, 3 295*9880d681SAndroid Build Coastguard Worker %tobool = icmp eq i8 %2, 0 296*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %if.end, label %if.then 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Workerif.then: 299*9880d681SAndroid Build Coastguard Worker %dec = add nsw i32 %1, -1 300*9880d681SAndroid Build Coastguard Worker store i32 %dec, i32* @a, align 4 301*9880d681SAndroid Build Coastguard Worker br label %if.end 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Workerif.end: 304*9880d681SAndroid Build Coastguard Worker ret i32 undef 305*9880d681SAndroid Build Coastguard Worker} 306