1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 | not grep cmov 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; LSR should be able to eliminate the max computations by 4*9880d681SAndroid Build Coastguard Worker; making the loops use slt/ult comparisons instead of ne comparisons. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" 7*9880d681SAndroid Build Coastguard Workertarget triple = "i386-apple-darwin9" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine void @foo(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %0 = mul i32 %x, %w 12*9880d681SAndroid Build Coastguard Worker %1 = mul i32 %x, %w 13*9880d681SAndroid Build Coastguard Worker %2 = sdiv i32 %1, 4 14*9880d681SAndroid Build Coastguard Worker %.sum2 = add i32 %2, %0 15*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %d, 1 16*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %bb29, label %bb10.preheader 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerbb10.preheader: ; preds = %entry 19*9880d681SAndroid Build Coastguard Worker %3 = icmp sgt i32 %x, 0 20*9880d681SAndroid Build Coastguard Worker br i1 %3, label %bb.nph9, label %bb18.loopexit 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerbb.nph7: ; preds = %bb7.preheader 23*9880d681SAndroid Build Coastguard Worker %4 = mul i32 %y.08, %w 24*9880d681SAndroid Build Coastguard Worker %5 = mul i32 %y.08, %s 25*9880d681SAndroid Build Coastguard Worker %6 = add i32 %5, 1 26*9880d681SAndroid Build Coastguard Worker %tmp8 = icmp sgt i32 1, %w 27*9880d681SAndroid Build Coastguard Worker %smax9 = select i1 %tmp8, i32 1, i32 %w 28*9880d681SAndroid Build Coastguard Worker br label %bb6 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerbb6: ; preds = %bb7, %bb.nph7 31*9880d681SAndroid Build Coastguard Worker %x.06 = phi i32 [ 0, %bb.nph7 ], [ %indvar.next7, %bb7 ] 32*9880d681SAndroid Build Coastguard Worker %7 = add i32 %x.06, %4 33*9880d681SAndroid Build Coastguard Worker %8 = shl i32 %x.06, 1 34*9880d681SAndroid Build Coastguard Worker %9 = add i32 %6, %8 35*9880d681SAndroid Build Coastguard Worker %10 = getelementptr i8, i8* %r, i32 %9 36*9880d681SAndroid Build Coastguard Worker %11 = load i8, i8* %10, align 1 37*9880d681SAndroid Build Coastguard Worker %12 = getelementptr i8, i8* %j, i32 %7 38*9880d681SAndroid Build Coastguard Worker store i8 %11, i8* %12, align 1 39*9880d681SAndroid Build Coastguard Worker br label %bb7 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerbb7: ; preds = %bb6 42*9880d681SAndroid Build Coastguard Worker %indvar.next7 = add i32 %x.06, 1 43*9880d681SAndroid Build Coastguard Worker %exitcond10 = icmp ne i32 %indvar.next7, %smax9 44*9880d681SAndroid Build Coastguard Worker br i1 %exitcond10, label %bb6, label %bb7.bb9_crit_edge 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerbb7.bb9_crit_edge: ; preds = %bb7 47*9880d681SAndroid Build Coastguard Worker br label %bb9 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerbb9: ; preds = %bb7.preheader, %bb7.bb9_crit_edge 50*9880d681SAndroid Build Coastguard Worker br label %bb10 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerbb10: ; preds = %bb9 53*9880d681SAndroid Build Coastguard Worker %indvar.next11 = add i32 %y.08, 1 54*9880d681SAndroid Build Coastguard Worker %exitcond12 = icmp ne i32 %indvar.next11, %x 55*9880d681SAndroid Build Coastguard Worker br i1 %exitcond12, label %bb7.preheader, label %bb10.bb18.loopexit_crit_edge 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerbb10.bb18.loopexit_crit_edge: ; preds = %bb10 58*9880d681SAndroid Build Coastguard Worker br label %bb10.bb18.loopexit_crit_edge.split 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerbb10.bb18.loopexit_crit_edge.split: ; preds = %bb.nph9, %bb10.bb18.loopexit_crit_edge 61*9880d681SAndroid Build Coastguard Worker br label %bb18.loopexit 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerbb.nph9: ; preds = %bb10.preheader 64*9880d681SAndroid Build Coastguard Worker %13 = icmp sgt i32 %w, 0 65*9880d681SAndroid Build Coastguard Worker br i1 %13, label %bb.nph9.split, label %bb10.bb18.loopexit_crit_edge.split 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerbb.nph9.split: ; preds = %bb.nph9 68*9880d681SAndroid Build Coastguard Worker br label %bb7.preheader 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerbb7.preheader: ; preds = %bb.nph9.split, %bb10 71*9880d681SAndroid Build Coastguard Worker %y.08 = phi i32 [ 0, %bb.nph9.split ], [ %indvar.next11, %bb10 ] 72*9880d681SAndroid Build Coastguard Worker br i1 true, label %bb.nph7, label %bb9 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerbb.nph5: ; preds = %bb18.loopexit 75*9880d681SAndroid Build Coastguard Worker %14 = sdiv i32 %w, 2 76*9880d681SAndroid Build Coastguard Worker %15 = icmp slt i32 %w, 2 77*9880d681SAndroid Build Coastguard Worker %16 = sdiv i32 %x, 2 78*9880d681SAndroid Build Coastguard Worker br i1 %15, label %bb18.bb20_crit_edge.split, label %bb.nph5.split 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerbb.nph5.split: ; preds = %bb.nph5 81*9880d681SAndroid Build Coastguard Worker %tmp2 = icmp sgt i32 1, %16 82*9880d681SAndroid Build Coastguard Worker %smax3 = select i1 %tmp2, i32 1, i32 %16 83*9880d681SAndroid Build Coastguard Worker br label %bb13 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerbb13: ; preds = %bb18, %bb.nph5.split 86*9880d681SAndroid Build Coastguard Worker %y.14 = phi i32 [ 0, %bb.nph5.split ], [ %indvar.next1, %bb18 ] 87*9880d681SAndroid Build Coastguard Worker %17 = mul i32 %14, %y.14 88*9880d681SAndroid Build Coastguard Worker %18 = shl i32 %y.14, 1 89*9880d681SAndroid Build Coastguard Worker %19 = srem i32 %y.14, 2 90*9880d681SAndroid Build Coastguard Worker %20 = add i32 %19, %18 91*9880d681SAndroid Build Coastguard Worker %21 = mul i32 %20, %s 92*9880d681SAndroid Build Coastguard Worker br i1 true, label %bb.nph3, label %bb17 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerbb.nph3: ; preds = %bb13 95*9880d681SAndroid Build Coastguard Worker %22 = add i32 %17, %0 96*9880d681SAndroid Build Coastguard Worker %23 = add i32 %17, %.sum2 97*9880d681SAndroid Build Coastguard Worker %24 = sdiv i32 %w, 2 98*9880d681SAndroid Build Coastguard Worker %tmp = icmp sgt i32 1, %24 99*9880d681SAndroid Build Coastguard Worker %smax = select i1 %tmp, i32 1, i32 %24 100*9880d681SAndroid Build Coastguard Worker br label %bb14 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerbb14: ; preds = %bb15, %bb.nph3 103*9880d681SAndroid Build Coastguard Worker %x.12 = phi i32 [ 0, %bb.nph3 ], [ %indvar.next, %bb15 ] 104*9880d681SAndroid Build Coastguard Worker %25 = shl i32 %x.12, 2 105*9880d681SAndroid Build Coastguard Worker %26 = add i32 %25, %21 106*9880d681SAndroid Build Coastguard Worker %27 = getelementptr i8, i8* %r, i32 %26 107*9880d681SAndroid Build Coastguard Worker %28 = load i8, i8* %27, align 1 108*9880d681SAndroid Build Coastguard Worker %.sum = add i32 %22, %x.12 109*9880d681SAndroid Build Coastguard Worker %29 = getelementptr i8, i8* %j, i32 %.sum 110*9880d681SAndroid Build Coastguard Worker store i8 %28, i8* %29, align 1 111*9880d681SAndroid Build Coastguard Worker %30 = shl i32 %x.12, 2 112*9880d681SAndroid Build Coastguard Worker %31 = or i32 %30, 2 113*9880d681SAndroid Build Coastguard Worker %32 = add i32 %31, %21 114*9880d681SAndroid Build Coastguard Worker %33 = getelementptr i8, i8* %r, i32 %32 115*9880d681SAndroid Build Coastguard Worker %34 = load i8, i8* %33, align 1 116*9880d681SAndroid Build Coastguard Worker %.sum6 = add i32 %23, %x.12 117*9880d681SAndroid Build Coastguard Worker %35 = getelementptr i8, i8* %j, i32 %.sum6 118*9880d681SAndroid Build Coastguard Worker store i8 %34, i8* %35, align 1 119*9880d681SAndroid Build Coastguard Worker br label %bb15 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerbb15: ; preds = %bb14 122*9880d681SAndroid Build Coastguard Worker %indvar.next = add i32 %x.12, 1 123*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i32 %indvar.next, %smax 124*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %bb14, label %bb15.bb17_crit_edge 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerbb15.bb17_crit_edge: ; preds = %bb15 127*9880d681SAndroid Build Coastguard Worker br label %bb17 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerbb17: ; preds = %bb15.bb17_crit_edge, %bb13 130*9880d681SAndroid Build Coastguard Worker br label %bb18 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerbb18.loopexit: ; preds = %bb10.bb18.loopexit_crit_edge.split, %bb10.preheader 133*9880d681SAndroid Build Coastguard Worker %36 = icmp slt i32 %x, 2 134*9880d681SAndroid Build Coastguard Worker br i1 %36, label %bb20, label %bb.nph5 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerbb18: ; preds = %bb17 137*9880d681SAndroid Build Coastguard Worker %indvar.next1 = add i32 %y.14, 1 138*9880d681SAndroid Build Coastguard Worker %exitcond4 = icmp ne i32 %indvar.next1, %smax3 139*9880d681SAndroid Build Coastguard Worker br i1 %exitcond4, label %bb13, label %bb18.bb20_crit_edge 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerbb18.bb20_crit_edge: ; preds = %bb18 142*9880d681SAndroid Build Coastguard Worker br label %bb18.bb20_crit_edge.split 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerbb18.bb20_crit_edge.split: ; preds = %bb18.bb20_crit_edge, %bb.nph5 145*9880d681SAndroid Build Coastguard Worker br label %bb20 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerbb20: ; preds = %bb18.bb20_crit_edge.split, %bb18.loopexit 148*9880d681SAndroid Build Coastguard Worker switch i32 %d, label %return [ 149*9880d681SAndroid Build Coastguard Worker i32 3, label %bb22 150*9880d681SAndroid Build Coastguard Worker i32 1, label %bb29 151*9880d681SAndroid Build Coastguard Worker ] 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerbb22: ; preds = %bb20 154*9880d681SAndroid Build Coastguard Worker %37 = mul i32 %x, %w 155*9880d681SAndroid Build Coastguard Worker %38 = sdiv i32 %37, 4 156*9880d681SAndroid Build Coastguard Worker %.sum3 = add i32 %38, %.sum2 157*9880d681SAndroid Build Coastguard Worker %39 = add i32 %x, 15 158*9880d681SAndroid Build Coastguard Worker %40 = and i32 %39, -16 159*9880d681SAndroid Build Coastguard Worker %41 = add i32 %w, 15 160*9880d681SAndroid Build Coastguard Worker %42 = and i32 %41, -16 161*9880d681SAndroid Build Coastguard Worker %43 = mul i32 %40, %s 162*9880d681SAndroid Build Coastguard Worker %44 = icmp sgt i32 %x, 0 163*9880d681SAndroid Build Coastguard Worker br i1 %44, label %bb.nph, label %bb26 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerbb.nph: ; preds = %bb22 166*9880d681SAndroid Build Coastguard Worker br label %bb23 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerbb23: ; preds = %bb24, %bb.nph 169*9880d681SAndroid Build Coastguard Worker %y.21 = phi i32 [ 0, %bb.nph ], [ %indvar.next5, %bb24 ] 170*9880d681SAndroid Build Coastguard Worker %45 = mul i32 %y.21, %42 171*9880d681SAndroid Build Coastguard Worker %.sum1 = add i32 %45, %43 172*9880d681SAndroid Build Coastguard Worker %46 = getelementptr i8, i8* %r, i32 %.sum1 173*9880d681SAndroid Build Coastguard Worker %47 = mul i32 %y.21, %w 174*9880d681SAndroid Build Coastguard Worker %.sum5 = add i32 %47, %.sum3 175*9880d681SAndroid Build Coastguard Worker %48 = getelementptr i8, i8* %j, i32 %.sum5 176*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %48, i8* %46, i32 %w, i32 1, i1 false) 177*9880d681SAndroid Build Coastguard Worker br label %bb24 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerbb24: ; preds = %bb23 180*9880d681SAndroid Build Coastguard Worker %indvar.next5 = add i32 %y.21, 1 181*9880d681SAndroid Build Coastguard Worker %exitcond6 = icmp ne i32 %indvar.next5, %x 182*9880d681SAndroid Build Coastguard Worker br i1 %exitcond6, label %bb23, label %bb24.bb26_crit_edge 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerbb24.bb26_crit_edge: ; preds = %bb24 185*9880d681SAndroid Build Coastguard Worker br label %bb26 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerbb26: ; preds = %bb24.bb26_crit_edge, %bb22 188*9880d681SAndroid Build Coastguard Worker %49 = mul i32 %x, %w 189*9880d681SAndroid Build Coastguard Worker %.sum4 = add i32 %.sum3, %49 190*9880d681SAndroid Build Coastguard Worker %50 = getelementptr i8, i8* %j, i32 %.sum4 191*9880d681SAndroid Build Coastguard Worker %51 = mul i32 %x, %w 192*9880d681SAndroid Build Coastguard Worker %52 = sdiv i32 %51, 2 193*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memset.p0i8.i32(i8* %50, i8 -128, i32 %52, i32 1, i1 false) 194*9880d681SAndroid Build Coastguard Worker ret void 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerbb29: ; preds = %bb20, %entry 197*9880d681SAndroid Build Coastguard Worker %53 = add i32 %w, 15 198*9880d681SAndroid Build Coastguard Worker %54 = and i32 %53, -16 199*9880d681SAndroid Build Coastguard Worker %55 = icmp sgt i32 %x, 0 200*9880d681SAndroid Build Coastguard Worker br i1 %55, label %bb.nph11, label %bb33 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerbb.nph11: ; preds = %bb29 203*9880d681SAndroid Build Coastguard Worker br label %bb30 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerbb30: ; preds = %bb31, %bb.nph11 206*9880d681SAndroid Build Coastguard Worker %y.310 = phi i32 [ 0, %bb.nph11 ], [ %indvar.next13, %bb31 ] 207*9880d681SAndroid Build Coastguard Worker %56 = mul i32 %y.310, %54 208*9880d681SAndroid Build Coastguard Worker %57 = getelementptr i8, i8* %r, i32 %56 209*9880d681SAndroid Build Coastguard Worker %58 = mul i32 %y.310, %w 210*9880d681SAndroid Build Coastguard Worker %59 = getelementptr i8, i8* %j, i32 %58 211*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %59, i8* %57, i32 %w, i32 1, i1 false) 212*9880d681SAndroid Build Coastguard Worker br label %bb31 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Workerbb31: ; preds = %bb30 215*9880d681SAndroid Build Coastguard Worker %indvar.next13 = add i32 %y.310, 1 216*9880d681SAndroid Build Coastguard Worker %exitcond14 = icmp ne i32 %indvar.next13, %x 217*9880d681SAndroid Build Coastguard Worker br i1 %exitcond14, label %bb30, label %bb31.bb33_crit_edge 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerbb31.bb33_crit_edge: ; preds = %bb31 220*9880d681SAndroid Build Coastguard Worker br label %bb33 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerbb33: ; preds = %bb31.bb33_crit_edge, %bb29 223*9880d681SAndroid Build Coastguard Worker %60 = mul i32 %x, %w 224*9880d681SAndroid Build Coastguard Worker %61 = getelementptr i8, i8* %j, i32 %60 225*9880d681SAndroid Build Coastguard Worker %62 = mul i32 %x, %w 226*9880d681SAndroid Build Coastguard Worker %63 = sdiv i32 %62, 2 227*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memset.p0i8.i32(i8* %61, i8 -128, i32 %63, i32 1, i1 false) 228*9880d681SAndroid Build Coastguard Worker ret void 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %bb20 231*9880d681SAndroid Build Coastguard Worker ret void 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine void @bar(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind { 235*9880d681SAndroid Build Coastguard Workerentry: 236*9880d681SAndroid Build Coastguard Worker %0 = mul i32 %x, %w 237*9880d681SAndroid Build Coastguard Worker %1 = mul i32 %x, %w 238*9880d681SAndroid Build Coastguard Worker %2 = udiv i32 %1, 4 239*9880d681SAndroid Build Coastguard Worker %.sum2 = add i32 %2, %0 240*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %d, 1 241*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %bb29, label %bb10.preheader 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Workerbb10.preheader: ; preds = %entry 244*9880d681SAndroid Build Coastguard Worker %3 = icmp ne i32 %x, 0 245*9880d681SAndroid Build Coastguard Worker br i1 %3, label %bb.nph9, label %bb18.loopexit 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workerbb.nph7: ; preds = %bb7.preheader 248*9880d681SAndroid Build Coastguard Worker %4 = mul i32 %y.08, %w 249*9880d681SAndroid Build Coastguard Worker %5 = mul i32 %y.08, %s 250*9880d681SAndroid Build Coastguard Worker %6 = add i32 %5, 1 251*9880d681SAndroid Build Coastguard Worker %tmp8 = icmp ugt i32 1, %w 252*9880d681SAndroid Build Coastguard Worker %smax9 = select i1 %tmp8, i32 1, i32 %w 253*9880d681SAndroid Build Coastguard Worker br label %bb6 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerbb6: ; preds = %bb7, %bb.nph7 256*9880d681SAndroid Build Coastguard Worker %x.06 = phi i32 [ 0, %bb.nph7 ], [ %indvar.next7, %bb7 ] 257*9880d681SAndroid Build Coastguard Worker %7 = add i32 %x.06, %4 258*9880d681SAndroid Build Coastguard Worker %8 = shl i32 %x.06, 1 259*9880d681SAndroid Build Coastguard Worker %9 = add i32 %6, %8 260*9880d681SAndroid Build Coastguard Worker %10 = getelementptr i8, i8* %r, i32 %9 261*9880d681SAndroid Build Coastguard Worker %11 = load i8, i8* %10, align 1 262*9880d681SAndroid Build Coastguard Worker %12 = getelementptr i8, i8* %j, i32 %7 263*9880d681SAndroid Build Coastguard Worker store i8 %11, i8* %12, align 1 264*9880d681SAndroid Build Coastguard Worker br label %bb7 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerbb7: ; preds = %bb6 267*9880d681SAndroid Build Coastguard Worker %indvar.next7 = add i32 %x.06, 1 268*9880d681SAndroid Build Coastguard Worker %exitcond10 = icmp ne i32 %indvar.next7, %smax9 269*9880d681SAndroid Build Coastguard Worker br i1 %exitcond10, label %bb6, label %bb7.bb9_crit_edge 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerbb7.bb9_crit_edge: ; preds = %bb7 272*9880d681SAndroid Build Coastguard Worker br label %bb9 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Workerbb9: ; preds = %bb7.preheader, %bb7.bb9_crit_edge 275*9880d681SAndroid Build Coastguard Worker br label %bb10 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerbb10: ; preds = %bb9 278*9880d681SAndroid Build Coastguard Worker %indvar.next11 = add i32 %y.08, 1 279*9880d681SAndroid Build Coastguard Worker %exitcond12 = icmp ne i32 %indvar.next11, %x 280*9880d681SAndroid Build Coastguard Worker br i1 %exitcond12, label %bb7.preheader, label %bb10.bb18.loopexit_crit_edge 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Workerbb10.bb18.loopexit_crit_edge: ; preds = %bb10 283*9880d681SAndroid Build Coastguard Worker br label %bb10.bb18.loopexit_crit_edge.split 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Workerbb10.bb18.loopexit_crit_edge.split: ; preds = %bb.nph9, %bb10.bb18.loopexit_crit_edge 286*9880d681SAndroid Build Coastguard Worker br label %bb18.loopexit 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerbb.nph9: ; preds = %bb10.preheader 289*9880d681SAndroid Build Coastguard Worker %13 = icmp ugt i32 %w, 0 290*9880d681SAndroid Build Coastguard Worker br i1 %13, label %bb.nph9.split, label %bb10.bb18.loopexit_crit_edge.split 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerbb.nph9.split: ; preds = %bb.nph9 293*9880d681SAndroid Build Coastguard Worker br label %bb7.preheader 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerbb7.preheader: ; preds = %bb.nph9.split, %bb10 296*9880d681SAndroid Build Coastguard Worker %y.08 = phi i32 [ 0, %bb.nph9.split ], [ %indvar.next11, %bb10 ] 297*9880d681SAndroid Build Coastguard Worker br i1 true, label %bb.nph7, label %bb9 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerbb.nph5: ; preds = %bb18.loopexit 300*9880d681SAndroid Build Coastguard Worker %14 = udiv i32 %w, 2 301*9880d681SAndroid Build Coastguard Worker %15 = icmp ult i32 %w, 2 302*9880d681SAndroid Build Coastguard Worker %16 = udiv i32 %x, 2 303*9880d681SAndroid Build Coastguard Worker br i1 %15, label %bb18.bb20_crit_edge.split, label %bb.nph5.split 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerbb.nph5.split: ; preds = %bb.nph5 306*9880d681SAndroid Build Coastguard Worker %tmp2 = icmp ugt i32 1, %16 307*9880d681SAndroid Build Coastguard Worker %smax3 = select i1 %tmp2, i32 1, i32 %16 308*9880d681SAndroid Build Coastguard Worker br label %bb13 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Workerbb13: ; preds = %bb18, %bb.nph5.split 311*9880d681SAndroid Build Coastguard Worker %y.14 = phi i32 [ 0, %bb.nph5.split ], [ %indvar.next1, %bb18 ] 312*9880d681SAndroid Build Coastguard Worker %17 = mul i32 %14, %y.14 313*9880d681SAndroid Build Coastguard Worker %18 = shl i32 %y.14, 1 314*9880d681SAndroid Build Coastguard Worker %19 = urem i32 %y.14, 2 315*9880d681SAndroid Build Coastguard Worker %20 = add i32 %19, %18 316*9880d681SAndroid Build Coastguard Worker %21 = mul i32 %20, %s 317*9880d681SAndroid Build Coastguard Worker br i1 true, label %bb.nph3, label %bb17 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerbb.nph3: ; preds = %bb13 320*9880d681SAndroid Build Coastguard Worker %22 = add i32 %17, %0 321*9880d681SAndroid Build Coastguard Worker %23 = add i32 %17, %.sum2 322*9880d681SAndroid Build Coastguard Worker %24 = udiv i32 %w, 2 323*9880d681SAndroid Build Coastguard Worker %tmp = icmp ugt i32 1, %24 324*9880d681SAndroid Build Coastguard Worker %smax = select i1 %tmp, i32 1, i32 %24 325*9880d681SAndroid Build Coastguard Worker br label %bb14 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerbb14: ; preds = %bb15, %bb.nph3 328*9880d681SAndroid Build Coastguard Worker %x.12 = phi i32 [ 0, %bb.nph3 ], [ %indvar.next, %bb15 ] 329*9880d681SAndroid Build Coastguard Worker %25 = shl i32 %x.12, 2 330*9880d681SAndroid Build Coastguard Worker %26 = add i32 %25, %21 331*9880d681SAndroid Build Coastguard Worker %27 = getelementptr i8, i8* %r, i32 %26 332*9880d681SAndroid Build Coastguard Worker %28 = load i8, i8* %27, align 1 333*9880d681SAndroid Build Coastguard Worker %.sum = add i32 %22, %x.12 334*9880d681SAndroid Build Coastguard Worker %29 = getelementptr i8, i8* %j, i32 %.sum 335*9880d681SAndroid Build Coastguard Worker store i8 %28, i8* %29, align 1 336*9880d681SAndroid Build Coastguard Worker %30 = shl i32 %x.12, 2 337*9880d681SAndroid Build Coastguard Worker %31 = or i32 %30, 2 338*9880d681SAndroid Build Coastguard Worker %32 = add i32 %31, %21 339*9880d681SAndroid Build Coastguard Worker %33 = getelementptr i8, i8* %r, i32 %32 340*9880d681SAndroid Build Coastguard Worker %34 = load i8, i8* %33, align 1 341*9880d681SAndroid Build Coastguard Worker %.sum6 = add i32 %23, %x.12 342*9880d681SAndroid Build Coastguard Worker %35 = getelementptr i8, i8* %j, i32 %.sum6 343*9880d681SAndroid Build Coastguard Worker store i8 %34, i8* %35, align 1 344*9880d681SAndroid Build Coastguard Worker br label %bb15 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workerbb15: ; preds = %bb14 347*9880d681SAndroid Build Coastguard Worker %indvar.next = add i32 %x.12, 1 348*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i32 %indvar.next, %smax 349*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %bb14, label %bb15.bb17_crit_edge 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Workerbb15.bb17_crit_edge: ; preds = %bb15 352*9880d681SAndroid Build Coastguard Worker br label %bb17 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerbb17: ; preds = %bb15.bb17_crit_edge, %bb13 355*9880d681SAndroid Build Coastguard Worker br label %bb18 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Workerbb18.loopexit: ; preds = %bb10.bb18.loopexit_crit_edge.split, %bb10.preheader 358*9880d681SAndroid Build Coastguard Worker %36 = icmp ult i32 %x, 2 359*9880d681SAndroid Build Coastguard Worker br i1 %36, label %bb20, label %bb.nph5 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerbb18: ; preds = %bb17 362*9880d681SAndroid Build Coastguard Worker %indvar.next1 = add i32 %y.14, 1 363*9880d681SAndroid Build Coastguard Worker %exitcond4 = icmp ne i32 %indvar.next1, %smax3 364*9880d681SAndroid Build Coastguard Worker br i1 %exitcond4, label %bb13, label %bb18.bb20_crit_edge 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Workerbb18.bb20_crit_edge: ; preds = %bb18 367*9880d681SAndroid Build Coastguard Worker br label %bb18.bb20_crit_edge.split 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerbb18.bb20_crit_edge.split: ; preds = %bb18.bb20_crit_edge, %bb.nph5 370*9880d681SAndroid Build Coastguard Worker br label %bb20 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Workerbb20: ; preds = %bb18.bb20_crit_edge.split, %bb18.loopexit 373*9880d681SAndroid Build Coastguard Worker switch i32 %d, label %return [ 374*9880d681SAndroid Build Coastguard Worker i32 3, label %bb22 375*9880d681SAndroid Build Coastguard Worker i32 1, label %bb29 376*9880d681SAndroid Build Coastguard Worker ] 377*9880d681SAndroid Build Coastguard Worker 378*9880d681SAndroid Build Coastguard Workerbb22: ; preds = %bb20 379*9880d681SAndroid Build Coastguard Worker %37 = mul i32 %x, %w 380*9880d681SAndroid Build Coastguard Worker %38 = udiv i32 %37, 4 381*9880d681SAndroid Build Coastguard Worker %.sum3 = add i32 %38, %.sum2 382*9880d681SAndroid Build Coastguard Worker %39 = add i32 %x, 15 383*9880d681SAndroid Build Coastguard Worker %40 = and i32 %39, -16 384*9880d681SAndroid Build Coastguard Worker %41 = add i32 %w, 15 385*9880d681SAndroid Build Coastguard Worker %42 = and i32 %41, -16 386*9880d681SAndroid Build Coastguard Worker %43 = mul i32 %40, %s 387*9880d681SAndroid Build Coastguard Worker %44 = icmp ugt i32 %x, 0 388*9880d681SAndroid Build Coastguard Worker br i1 %44, label %bb.nph, label %bb26 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Workerbb.nph: ; preds = %bb22 391*9880d681SAndroid Build Coastguard Worker br label %bb23 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Workerbb23: ; preds = %bb24, %bb.nph 394*9880d681SAndroid Build Coastguard Worker %y.21 = phi i32 [ 0, %bb.nph ], [ %indvar.next5, %bb24 ] 395*9880d681SAndroid Build Coastguard Worker %45 = mul i32 %y.21, %42 396*9880d681SAndroid Build Coastguard Worker %.sum1 = add i32 %45, %43 397*9880d681SAndroid Build Coastguard Worker %46 = getelementptr i8, i8* %r, i32 %.sum1 398*9880d681SAndroid Build Coastguard Worker %47 = mul i32 %y.21, %w 399*9880d681SAndroid Build Coastguard Worker %.sum5 = add i32 %47, %.sum3 400*9880d681SAndroid Build Coastguard Worker %48 = getelementptr i8, i8* %j, i32 %.sum5 401*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %48, i8* %46, i32 %w, i32 1, i1 false) 402*9880d681SAndroid Build Coastguard Worker br label %bb24 403*9880d681SAndroid Build Coastguard Worker 404*9880d681SAndroid Build Coastguard Workerbb24: ; preds = %bb23 405*9880d681SAndroid Build Coastguard Worker %indvar.next5 = add i32 %y.21, 1 406*9880d681SAndroid Build Coastguard Worker %exitcond6 = icmp ne i32 %indvar.next5, %x 407*9880d681SAndroid Build Coastguard Worker br i1 %exitcond6, label %bb23, label %bb24.bb26_crit_edge 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Workerbb24.bb26_crit_edge: ; preds = %bb24 410*9880d681SAndroid Build Coastguard Worker br label %bb26 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Workerbb26: ; preds = %bb24.bb26_crit_edge, %bb22 413*9880d681SAndroid Build Coastguard Worker %49 = mul i32 %x, %w 414*9880d681SAndroid Build Coastguard Worker %.sum4 = add i32 %.sum3, %49 415*9880d681SAndroid Build Coastguard Worker %50 = getelementptr i8, i8* %j, i32 %.sum4 416*9880d681SAndroid Build Coastguard Worker %51 = mul i32 %x, %w 417*9880d681SAndroid Build Coastguard Worker %52 = udiv i32 %51, 2 418*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memset.p0i8.i32(i8* %50, i8 -128, i32 %52, i32 1, i1 false) 419*9880d681SAndroid Build Coastguard Worker ret void 420*9880d681SAndroid Build Coastguard Worker 421*9880d681SAndroid Build Coastguard Workerbb29: ; preds = %bb20, %entry 422*9880d681SAndroid Build Coastguard Worker %53 = add i32 %w, 15 423*9880d681SAndroid Build Coastguard Worker %54 = and i32 %53, -16 424*9880d681SAndroid Build Coastguard Worker %55 = icmp ugt i32 %x, 0 425*9880d681SAndroid Build Coastguard Worker br i1 %55, label %bb.nph11, label %bb33 426*9880d681SAndroid Build Coastguard Worker 427*9880d681SAndroid Build Coastguard Workerbb.nph11: ; preds = %bb29 428*9880d681SAndroid Build Coastguard Worker br label %bb30 429*9880d681SAndroid Build Coastguard Worker 430*9880d681SAndroid Build Coastguard Workerbb30: ; preds = %bb31, %bb.nph11 431*9880d681SAndroid Build Coastguard Worker %y.310 = phi i32 [ 0, %bb.nph11 ], [ %indvar.next13, %bb31 ] 432*9880d681SAndroid Build Coastguard Worker %56 = mul i32 %y.310, %54 433*9880d681SAndroid Build Coastguard Worker %57 = getelementptr i8, i8* %r, i32 %56 434*9880d681SAndroid Build Coastguard Worker %58 = mul i32 %y.310, %w 435*9880d681SAndroid Build Coastguard Worker %59 = getelementptr i8, i8* %j, i32 %58 436*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %59, i8* %57, i32 %w, i32 1, i1 false) 437*9880d681SAndroid Build Coastguard Worker br label %bb31 438*9880d681SAndroid Build Coastguard Worker 439*9880d681SAndroid Build Coastguard Workerbb31: ; preds = %bb30 440*9880d681SAndroid Build Coastguard Worker %indvar.next13 = add i32 %y.310, 1 441*9880d681SAndroid Build Coastguard Worker %exitcond14 = icmp ne i32 %indvar.next13, %x 442*9880d681SAndroid Build Coastguard Worker br i1 %exitcond14, label %bb30, label %bb31.bb33_crit_edge 443*9880d681SAndroid Build Coastguard Worker 444*9880d681SAndroid Build Coastguard Workerbb31.bb33_crit_edge: ; preds = %bb31 445*9880d681SAndroid Build Coastguard Worker br label %bb33 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Workerbb33: ; preds = %bb31.bb33_crit_edge, %bb29 448*9880d681SAndroid Build Coastguard Worker %60 = mul i32 %x, %w 449*9880d681SAndroid Build Coastguard Worker %61 = getelementptr i8, i8* %j, i32 %60 450*9880d681SAndroid Build Coastguard Worker %62 = mul i32 %x, %w 451*9880d681SAndroid Build Coastguard Worker %63 = udiv i32 %62, 2 452*9880d681SAndroid Build Coastguard Worker tail call void @llvm.memset.p0i8.i32(i8* %61, i8 -128, i32 %63, i32 1, i1 false) 453*9880d681SAndroid Build Coastguard Worker ret void 454*9880d681SAndroid Build Coastguard Worker 455*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %bb20 456*9880d681SAndroid Build Coastguard Worker ret void 457*9880d681SAndroid Build Coastguard Worker} 458*9880d681SAndroid Build Coastguard Worker 459*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind 460*9880d681SAndroid Build Coastguard Worker 461*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind 462