1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -disable-cgp-branch-opts -arm-atomic-cfg-tidy=0 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker%struct.pix_pos = type { i32, i32, i32, i32, i32, i32 } 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker@getNeighbour = external global void (i32, i32, i32, i32, %struct.pix_pos*)*, align 4 ; <void (i32, i32, i32, i32, %struct.pix_pos*)**> [#uses=2] 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @t() nounwind { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t: 9*9880d681SAndroid Build Coastguard Worker; CHECK: it eq 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cmpeq 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker %pix_a.i294 = alloca [4 x %struct.pix_pos], align 4 ; <[4 x %struct.pix_pos]*> [#uses=2] 13*9880d681SAndroid Build Coastguard Worker br i1 undef, label %land.rhs, label %lor.end 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerland.rhs: ; preds = %entry 16*9880d681SAndroid Build Coastguard Worker br label %lor.end 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerlor.end: ; preds = %land.rhs, %entry 19*9880d681SAndroid Build Coastguard Worker switch i32 0, label %if.end371 [ 20*9880d681SAndroid Build Coastguard Worker i32 10, label %if.then366 21*9880d681SAndroid Build Coastguard Worker i32 14, label %if.then366 22*9880d681SAndroid Build Coastguard Worker ] 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerif.then366: ; preds = %lor.end, %lor.end 25*9880d681SAndroid Build Coastguard Worker unreachable 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerif.end371: ; preds = %lor.end 28*9880d681SAndroid Build Coastguard Worker %arrayidx56.2.i = getelementptr [4 x %struct.pix_pos], [4 x %struct.pix_pos]* %pix_a.i294, i32 0, i32 2 ; <%struct.pix_pos*> [#uses=1] 29*9880d681SAndroid Build Coastguard Worker %arrayidx56.3.i = getelementptr [4 x %struct.pix_pos], [4 x %struct.pix_pos]* %pix_a.i294, i32 0, i32 3 ; <%struct.pix_pos*> [#uses=1] 30*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.body1857, label %for.end4557 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerfor.body1857: ; preds = %if.end371 33*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then1867, label %for.cond1933 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerif.then1867: ; preds = %for.body1857 36*9880d681SAndroid Build Coastguard Worker unreachable 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerfor.cond1933: ; preds = %for.body1857 39*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.body1940, label %if.then4493 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerfor.body1940: ; preds = %for.cond1933 42*9880d681SAndroid Build Coastguard Worker %shl = shl i32 undef, 2 ; <i32> [#uses=1] 43*9880d681SAndroid Build Coastguard Worker %shl1959 = shl i32 undef, 2 ; <i32> [#uses=4] 44*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then1992, label %if.else2003 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerif.then1992: ; preds = %for.body1940 47*9880d681SAndroid Build Coastguard Worker %tmp14.i302 = load i32, i32* undef ; <i32> [#uses=4] 48*9880d681SAndroid Build Coastguard Worker %add.i307452 = or i32 %shl1959, 1 ; <i32> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker %sub.i308 = add i32 %shl, -1 ; <i32> [#uses=4] 50*9880d681SAndroid Build Coastguard Worker call void undef(i32 %tmp14.i302, i32 %sub.i308, i32 %shl1959, i32 0, %struct.pix_pos* undef) nounwind 51*9880d681SAndroid Build Coastguard Worker %tmp49.i309 = load void (i32, i32, i32, i32, %struct.pix_pos*)*, void (i32, i32, i32, i32, %struct.pix_pos*)** @getNeighbour ; <void (i32, i32, i32, i32, %struct.pix_pos*)*> [#uses=1] 52*9880d681SAndroid Build Coastguard Worker call void %tmp49.i309(i32 %tmp14.i302, i32 %sub.i308, i32 %add.i307452, i32 0, %struct.pix_pos* null) nounwind 53*9880d681SAndroid Build Coastguard Worker %tmp49.1.i = load void (i32, i32, i32, i32, %struct.pix_pos*)*, void (i32, i32, i32, i32, %struct.pix_pos*)** @getNeighbour ; <void (i32, i32, i32, i32, %struct.pix_pos*)*> [#uses=1] 54*9880d681SAndroid Build Coastguard Worker call void %tmp49.1.i(i32 %tmp14.i302, i32 %sub.i308, i32 undef, i32 0, %struct.pix_pos* %arrayidx56.2.i) nounwind 55*9880d681SAndroid Build Coastguard Worker call void undef(i32 %tmp14.i302, i32 %sub.i308, i32 undef, i32 0, %struct.pix_pos* %arrayidx56.3.i) nounwind 56*9880d681SAndroid Build Coastguard Worker unreachable 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerif.else2003: ; preds = %for.body1940 59*9880d681SAndroid Build Coastguard Worker switch i32 undef, label %if.then2015 [ 60*9880d681SAndroid Build Coastguard Worker i32 10, label %if.then4382 61*9880d681SAndroid Build Coastguard Worker i32 14, label %if.then4382 62*9880d681SAndroid Build Coastguard Worker ] 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerif.then2015: ; preds = %if.else2003 65*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.else2298, label %if.then2019 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerif.then2019: ; preds = %if.then2015 68*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then2065, label %if.else2081 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerif.then2065: ; preds = %if.then2019 71*9880d681SAndroid Build Coastguard Worker br label %if.end2128 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerif.else2081: ; preds = %if.then2019 74*9880d681SAndroid Build Coastguard Worker br label %if.end2128 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerif.end2128: ; preds = %if.else2081, %if.then2065 77*9880d681SAndroid Build Coastguard Worker unreachable 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerif.else2298: ; preds = %if.then2015 80*9880d681SAndroid Build Coastguard Worker br i1 undef, label %land.lhs.true2813, label %cond.end2841 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerland.lhs.true2813: ; preds = %if.else2298 83*9880d681SAndroid Build Coastguard Worker br i1 undef, label %cond.end2841, label %cond.true2824 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workercond.true2824: ; preds = %land.lhs.true2813 86*9880d681SAndroid Build Coastguard Worker br label %cond.end2841 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workercond.end2841: ; preds = %cond.true2824, %land.lhs.true2813, %if.else2298 89*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond2882.preheader, label %for.cond2940.preheader 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerfor.cond2882.preheader: ; preds = %cond.end2841 92*9880d681SAndroid Build Coastguard Worker %mul3693 = shl i32 undef, 1 ; <i32> [#uses=2] 93*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then3689, label %if.else3728 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerfor.cond2940.preheader: ; preds = %cond.end2841 96*9880d681SAndroid Build Coastguard Worker br label %for.inc3040 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerfor.inc3040: ; preds = %for.inc3040, %for.cond2940.preheader 99*9880d681SAndroid Build Coastguard Worker br label %for.inc3040 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerif.then3689: ; preds = %for.cond2882.preheader 102*9880d681SAndroid Build Coastguard Worker %add3695 = add nsw i32 %mul3693, %shl1959 ; <i32> [#uses=1] 103*9880d681SAndroid Build Coastguard Worker %mul3697 = shl i32 %add3695, 2 ; <i32> [#uses=2] 104*9880d681SAndroid Build Coastguard Worker %arrayidx3705 = getelementptr inbounds i16, i16* undef, i32 1 ; <i16*> [#uses=1] 105*9880d681SAndroid Build Coastguard Worker %tmp3706 = load i16, i16* %arrayidx3705 ; <i16> [#uses=1] 106*9880d681SAndroid Build Coastguard Worker %conv3707 = sext i16 %tmp3706 to i32 ; <i32> [#uses=1] 107*9880d681SAndroid Build Coastguard Worker %add3708 = add nsw i32 %conv3707, %mul3697 ; <i32> [#uses=1] 108*9880d681SAndroid Build Coastguard Worker %arrayidx3724 = getelementptr inbounds i16, i16* null, i32 1 ; <i16*> [#uses=1] 109*9880d681SAndroid Build Coastguard Worker %tmp3725 = load i16, i16* %arrayidx3724 ; <i16> [#uses=1] 110*9880d681SAndroid Build Coastguard Worker %conv3726 = sext i16 %tmp3725 to i32 ; <i32> [#uses=1] 111*9880d681SAndroid Build Coastguard Worker %add3727 = add nsw i32 %conv3726, %mul3697 ; <i32> [#uses=1] 112*9880d681SAndroid Build Coastguard Worker br label %if.end3770 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerif.else3728: ; preds = %for.cond2882.preheader 115*9880d681SAndroid Build Coastguard Worker %mul3733 = add i32 %shl1959, 1073741816 ; <i32> [#uses=1] 116*9880d681SAndroid Build Coastguard Worker %add3735 = add nsw i32 %mul3733, %mul3693 ; <i32> [#uses=1] 117*9880d681SAndroid Build Coastguard Worker %mul3737 = shl i32 %add3735, 2 ; <i32> [#uses=2] 118*9880d681SAndroid Build Coastguard Worker %tmp3746 = load i16, i16* undef ; <i16> [#uses=1] 119*9880d681SAndroid Build Coastguard Worker %conv3747 = sext i16 %tmp3746 to i32 ; <i32> [#uses=1] 120*9880d681SAndroid Build Coastguard Worker %add3748 = add nsw i32 %conv3747, %mul3737 ; <i32> [#uses=1] 121*9880d681SAndroid Build Coastguard Worker %arrayidx3765 = getelementptr inbounds i16, i16* null, i32 1 ; <i16*> [#uses=1] 122*9880d681SAndroid Build Coastguard Worker %tmp3766 = load i16, i16* %arrayidx3765 ; <i16> [#uses=1] 123*9880d681SAndroid Build Coastguard Worker %conv3767 = sext i16 %tmp3766 to i32 ; <i32> [#uses=1] 124*9880d681SAndroid Build Coastguard Worker %add3768 = add nsw i32 %conv3767, %mul3737 ; <i32> [#uses=1] 125*9880d681SAndroid Build Coastguard Worker br label %if.end3770 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerif.end3770: ; preds = %if.else3728, %if.then3689 128*9880d681SAndroid Build Coastguard Worker %vec2_y.1 = phi i32 [ %add3727, %if.then3689 ], [ %add3768, %if.else3728 ] ; <i32> [#uses=0] 129*9880d681SAndroid Build Coastguard Worker %vec1_y.2 = phi i32 [ %add3708, %if.then3689 ], [ %add3748, %if.else3728 ] ; <i32> [#uses=0] 130*9880d681SAndroid Build Coastguard Worker unreachable 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerif.then4382: ; preds = %if.else2003, %if.else2003 133*9880d681SAndroid Build Coastguard Worker switch i32 undef, label %if.then4394 [ 134*9880d681SAndroid Build Coastguard Worker i32 10, label %if.else4400 135*9880d681SAndroid Build Coastguard Worker i32 14, label %if.else4400 136*9880d681SAndroid Build Coastguard Worker ] 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerif.then4394: ; preds = %if.then4382 139*9880d681SAndroid Build Coastguard Worker unreachable 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerif.else4400: ; preds = %if.then4382, %if.then4382 142*9880d681SAndroid Build Coastguard Worker br label %for.cond4451.preheader 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerfor.cond4451.preheader: ; preds = %for.cond4451.preheader, %if.else4400 145*9880d681SAndroid Build Coastguard Worker br label %for.cond4451.preheader 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerif.then4493: ; preds = %for.cond1933 148*9880d681SAndroid Build Coastguard Worker unreachable 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerfor.end4557: ; preds = %if.end371 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker} 153