1*9880d681SAndroid Build Coastguard Worker; RUN: llc %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; This file checks some weird corner case in LiveRangeEdit. 3*9880d681SAndroid Build Coastguard Worker; We used to do crash when we eliminate the definition 4*9880d681SAndroid Build Coastguard Worker; of the product of splitting when the original live-range 5*9880d681SAndroid Build Coastguard Worker; has already been removed. 6*9880d681SAndroid Build Coastguard Worker; Basically, we have the following input. 7*9880d681SAndroid Build Coastguard Worker; v1 = loadimm cst 8*9880d681SAndroid Build Coastguard Worker; ... 9*9880d681SAndroid Build Coastguard Worker; = use v1 10*9880d681SAndroid Build Coastguard Worker; 11*9880d681SAndroid Build Coastguard Worker; We split the live-range like this: 12*9880d681SAndroid Build Coastguard Worker; v1 = loadimm cst 13*9880d681SAndroid Build Coastguard Worker; ... 14*9880d681SAndroid Build Coastguard Worker; v2 = copy v1 15*9880d681SAndroid Build Coastguard Worker; ... 16*9880d681SAndroid Build Coastguard Worker; = use v2 17*9880d681SAndroid Build Coastguard Worker; 18*9880d681SAndroid Build Coastguard Worker; We actually issue loadimm instead of the copy: 19*9880d681SAndroid Build Coastguard Worker; v1 = loadimm cst 20*9880d681SAndroid Build Coastguard Worker; ... 21*9880d681SAndroid Build Coastguard Worker; v2 = loadimm cst 22*9880d681SAndroid Build Coastguard Worker; ... 23*9880d681SAndroid Build Coastguard Worker; = use v2 24*9880d681SAndroid Build Coastguard Worker; 25*9880d681SAndroid Build Coastguard Worker; v1 is now dead so we remove its live-range. 26*9880d681SAndroid Build Coastguard Worker; Actually, we shrink it to empty to keep the 27*9880d681SAndroid Build Coastguard Worker; instruction around for futher remat opportunities 28*9880d681SAndroid Build Coastguard Worker; (accessbile via the origin pointer.) 29*9880d681SAndroid Build Coastguard Worker; 30*9880d681SAndroid Build Coastguard Worker; Later v2 gets remove as well (e.g., because we 31*9880d681SAndroid Build Coastguard Worker; remat it closer to its use) and the live-range 32*9880d681SAndroid Build Coastguard Worker; gets eliminated. We used to crash at this point 33*9880d681SAndroid Build Coastguard Worker; because we were looking for a VNI of origin (v1) 34*9880d681SAndroid Build Coastguard Worker; at the slot index of the definition of v2. However, 35*9880d681SAndroid Build Coastguard Worker; we do not have a VNI for v1 at this point, since the 36*9880d681SAndroid Build Coastguard Worker; live-range is now empty... crash! 37*9880d681SAndroid Build Coastguard Worker; PR27983 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workersource_filename = "bugpoint-output-1e29d28.bc" 40*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" 41*9880d681SAndroid Build Coastguard Workertarget triple = "i386-unknown-linux-gnu" 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker@r = external global i32, align 4 44*9880d681SAndroid Build Coastguard Worker@k = external global i32, align 4 45*9880d681SAndroid Build Coastguard Worker@g = external global i32, align 4 46*9880d681SAndroid Build Coastguard Worker@a = external global i16, align 2 47*9880d681SAndroid Build Coastguard Worker@p = external global i32, align 4 48*9880d681SAndroid Build Coastguard Worker@n = external global i16, align 2 49*9880d681SAndroid Build Coastguard Worker@.str = external unnamed_addr constant [12 x i8], align 1 50*9880d681SAndroid Build Coastguard Worker@.str.1 = external unnamed_addr constant [13 x i8], align 1 51*9880d681SAndroid Build Coastguard Worker@s = external global i32, align 4 52*9880d681SAndroid Build Coastguard Worker@z = external global i16, align 2 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fn1: 55*9880d681SAndroid Build Coastguard Workerdefine void @fn1() #0 { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker br label %for.cond 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerfor.cond: ; preds = %cleanup100, %for.end29, %entry 60*9880d681SAndroid Build Coastguard Worker %t7.0 = phi i16 [ undef, %entry ], [ %t7.1, %for.end29 ], [ %t7.19, %cleanup100 ] 61*9880d681SAndroid Build Coastguard Worker %t9.0 = phi i32 [ undef, %entry ], [ %t9.1, %for.end29 ], [ 0, %cleanup100 ] 62*9880d681SAndroid Build Coastguard Worker %t2.0 = phi i32 [ undef, %entry ], [ undef, %for.end29 ], [ %t2.18, %cleanup100 ] 63*9880d681SAndroid Build Coastguard Worker %tmp = load i32, i32* @r, align 4 64*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then, label %if.end7 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %for.cond 67*9880d681SAndroid Build Coastguard Worker %tobool = icmp ne i32 %tmp, 0 68*9880d681SAndroid Build Coastguard Worker %tobool1 = icmp ne i32 %t2.0, 0 69*9880d681SAndroid Build Coastguard Worker %tmp1 = and i1 %tobool1, %tobool 70*9880d681SAndroid Build Coastguard Worker %land.ext = zext i1 %tmp1 to i32 71*9880d681SAndroid Build Coastguard Worker %tmp2 = load i32, i32* @k, align 4 72*9880d681SAndroid Build Coastguard Worker %shr = lshr i32 %land.ext, %tmp2 73*9880d681SAndroid Build Coastguard Worker %tobool4 = icmp ne i32 %shr, 0 74*9880d681SAndroid Build Coastguard Worker %or.cond = and i1 false, %tobool4 75*9880d681SAndroid Build Coastguard Worker br i1 %or.cond, label %L6, label %if.end7 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerif.end7: ; preds = %if.then, %for.cond 78*9880d681SAndroid Build Coastguard Worker %t2.1 = phi i32 [ %shr, %if.then ], [ %t2.0, %for.cond ] 79*9880d681SAndroid Build Coastguard Worker %tobool8 = icmp eq i32 undef, 0 80*9880d681SAndroid Build Coastguard Worker br i1 %tobool8, label %if.end11, label %for.cond10 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerfor.cond10: ; preds = %for.cond10, %if.end7 83*9880d681SAndroid Build Coastguard Worker br label %for.cond10 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerif.end11: ; preds = %if.end7 86*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32, i32* @g, align 4 87*9880d681SAndroid Build Coastguard Worker %tmp4 = load i16, i16* @a, align 2 88*9880d681SAndroid Build Coastguard Worker %conv = sext i16 %tmp4 to i32 89*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %tmp3, %conv 90*9880d681SAndroid Build Coastguard Worker %tobool12 = icmp eq i32 %div, 0 91*9880d681SAndroid Build Coastguard Worker br i1 %tobool12, label %for.cond15, label %L5 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerfor.cond15: ; preds = %for.cond17, %if.end11 94*9880d681SAndroid Build Coastguard Worker %t7.1 = phi i16 [ %t7.2, %for.cond17 ], [ %t7.0, %if.end11 ] 95*9880d681SAndroid Build Coastguard Worker %t9.1 = phi i32 [ %t9.2, %for.cond17 ], [ %t9.0, %if.end11 ] 96*9880d681SAndroid Build Coastguard Worker %tobool16 = icmp eq i32 undef, 0 97*9880d681SAndroid Build Coastguard Worker br i1 %tobool16, label %for.end29, label %for.cond17 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerfor.cond17: ; preds = %for.cond20, %for.cond15 100*9880d681SAndroid Build Coastguard Worker %t7.2 = phi i16 [ %t7.3, %for.cond20 ], [ %t7.1, %for.cond15 ] 101*9880d681SAndroid Build Coastguard Worker %t9.2 = phi i32 [ undef, %for.cond20 ], [ %t9.1, %for.cond15 ] 102*9880d681SAndroid Build Coastguard Worker %tobool18 = icmp eq i8 undef, 0 103*9880d681SAndroid Build Coastguard Worker br i1 %tobool18, label %for.cond15, label %for.cond20 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerfor.cond20: ; preds = %for.cond23, %for.cond17 106*9880d681SAndroid Build Coastguard Worker %t7.3 = phi i16 [ %t7.4, %for.cond23 ], [ %t7.2, %for.cond17 ] 107*9880d681SAndroid Build Coastguard Worker %tobool21 = icmp eq i32 undef, 0 108*9880d681SAndroid Build Coastguard Worker br i1 %tobool21, label %for.cond17, label %for.cond23 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerfor.cond23: ; preds = %L1, %for.cond20 111*9880d681SAndroid Build Coastguard Worker %t7.4 = phi i16 [ %t7.5, %L1 ], [ %t7.3, %for.cond20 ] 112*9880d681SAndroid Build Coastguard Worker %tobool24 = icmp eq i8 undef, 0 113*9880d681SAndroid Build Coastguard Worker br i1 %tobool24, label %for.cond20, label %L1 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard WorkerL1: ; preds = %cleanup100, %for.cond23 116*9880d681SAndroid Build Coastguard Worker %t7.5 = phi i16 [ %t7.19, %cleanup100 ], [ %t7.4, %for.cond23 ] 117*9880d681SAndroid Build Coastguard Worker %conv26 = sext i16 undef to i64 118*9880d681SAndroid Build Coastguard Worker br label %for.cond23 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerfor.end29: ; preds = %for.cond15 121*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond, label %for.cond32thread-pre-split 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerfor.cond32thread-pre-split: ; preds = %for.end29 124*9880d681SAndroid Build Coastguard Worker %.pr = load i32, i32* @p, align 4 125*9880d681SAndroid Build Coastguard Worker br label %for.cond32 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerfor.cond32: ; preds = %for.inc94, %for.cond32thread-pre-split 128*9880d681SAndroid Build Coastguard Worker %t7.6 = phi i16 [ %t7.1, %for.cond32thread-pre-split ], [ %t7.17, %for.inc94 ] 129*9880d681SAndroid Build Coastguard Worker %t3.4 = phi i64 [ 0, %for.cond32thread-pre-split ], [ 0, %for.inc94 ] 130*9880d681SAndroid Build Coastguard Worker %t9.6 = phi i32 [ %t9.1, %for.cond32thread-pre-split ], [ 0, %for.inc94 ] 131*9880d681SAndroid Build Coastguard Worker %t2.7 = phi i32 [ undef, %for.cond32thread-pre-split ], [ %t2.16, %for.inc94 ] 132*9880d681SAndroid Build Coastguard Worker %tobool33 = icmp eq i32 0, 0 133*9880d681SAndroid Build Coastguard Worker br i1 %tobool33, label %for.end95, label %for.body34 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerfor.body34: ; preds = %for.cond32 136*9880d681SAndroid Build Coastguard Worker %tobool35 = icmp eq i16 undef, 0 137*9880d681SAndroid Build Coastguard Worker br i1 %tobool35, label %for.inc94, label %if.then36 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerif.then36: ; preds = %for.body34 140*9880d681SAndroid Build Coastguard Worker %tmp5 = load i16, i16* @n, align 2 141*9880d681SAndroid Build Coastguard Worker %tobool37 = icmp eq i32 undef, 0 142*9880d681SAndroid Build Coastguard Worker br i1 %tobool37, label %if.end78, label %if.then38 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerif.then38: ; preds = %if.then36 145*9880d681SAndroid Build Coastguard Worker tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i32 0, i32 0), i64 undef) 146*9880d681SAndroid Build Coastguard Worker %tobool40 = icmp eq i32 undef, 0 147*9880d681SAndroid Build Coastguard Worker br i1 %tobool40, label %L3, label %cleanup100 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard WorkerL3: ; preds = %while.end.split, %if.then38 150*9880d681SAndroid Build Coastguard Worker %t7.7 = phi i16 [ %tmp5, %if.then38 ], [ %t7.15, %while.end.split ] 151*9880d681SAndroid Build Coastguard Worker %t3.5 = phi i64 [ %t3.4, %if.then38 ], [ %t3.11, %while.end.split ] 152*9880d681SAndroid Build Coastguard Worker %t2.8 = phi i32 [ %t2.7, %if.then38 ], [ %t2.14, %while.end.split ] 153*9880d681SAndroid Build Coastguard Worker %tobool43 = icmp eq i32 undef, 0 154*9880d681SAndroid Build Coastguard Worker br i1 %tobool43, label %if.end48, label %cleanup75 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerif.end48: ; preds = %L3 157*9880d681SAndroid Build Coastguard Worker tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i32 0, i32 0), i64 %t3.5) 158*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.end61, label %for.cond52.preheader 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerfor.cond52.preheader: ; preds = %if.end48 161*9880d681SAndroid Build Coastguard Worker %tobool57 = icmp eq i16 undef, 0 162*9880d681SAndroid Build Coastguard Worker %.130 = select i1 %tobool57, i16 -8, i16 0 163*9880d681SAndroid Build Coastguard Worker br label %if.end61 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerif.end61: ; preds = %for.cond52.preheader, %if.end48 166*9880d681SAndroid Build Coastguard Worker %t7.9 = phi i16 [ %t7.7, %if.end48 ], [ %.130, %for.cond52.preheader ] 167*9880d681SAndroid Build Coastguard Worker %tobool62 = icmp eq i32 undef, 0 168*9880d681SAndroid Build Coastguard Worker br i1 %tobool62, label %if.end71, label %if.then63 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerif.then63: ; preds = %if.end61 171*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.end67, label %L5 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard WorkerL5: ; preds = %cleanup100.L5_crit_edge, %if.then63, %if.end11 174*9880d681SAndroid Build Coastguard Worker %.pre = phi i32 [ %.pre.pre, %cleanup100.L5_crit_edge ], [ undef, %if.then63 ], [ %tmp, %if.end11 ] 175*9880d681SAndroid Build Coastguard Worker %t7.10 = phi i16 [ %t7.19, %cleanup100.L5_crit_edge ], [ %t7.9, %if.then63 ], [ %t7.0, %if.end11 ] 176*9880d681SAndroid Build Coastguard Worker %t3.6 = phi i64 [ 0, %cleanup100.L5_crit_edge ], [ %t3.5, %if.then63 ], [ 2, %if.end11 ] 177*9880d681SAndroid Build Coastguard Worker %t9.8 = phi i32 [ 0, %cleanup100.L5_crit_edge ], [ undef, %if.then63 ], [ %t9.0, %if.end11 ] 178*9880d681SAndroid Build Coastguard Worker %t2.9 = phi i32 [ %t2.18, %cleanup100.L5_crit_edge ], [ %t2.8, %if.then63 ], [ %t2.1, %if.end11 ] 179*9880d681SAndroid Build Coastguard Worker store i32 %t9.8, i32* @s, align 4 180*9880d681SAndroid Build Coastguard Worker br label %if.end67 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerif.end67: ; preds = %L5, %if.then63 183*9880d681SAndroid Build Coastguard Worker %tmp6 = phi i32 [ %.pre, %L5 ], [ undef, %if.then63 ] 184*9880d681SAndroid Build Coastguard Worker %t7.11 = phi i16 [ %t7.10, %L5 ], [ %t7.9, %if.then63 ] 185*9880d681SAndroid Build Coastguard Worker %t3.7 = phi i64 [ %t3.6, %L5 ], [ %t3.5, %if.then63 ] 186*9880d681SAndroid Build Coastguard Worker %t9.9 = phi i32 [ %t9.8, %L5 ], [ undef, %if.then63 ] 187*9880d681SAndroid Build Coastguard Worker %t2.10 = phi i32 [ %t2.9, %L5 ], [ %t2.8, %if.then63 ] 188*9880d681SAndroid Build Coastguard Worker %tobool68 = icmp eq i32 %tmp6, 0 189*9880d681SAndroid Build Coastguard Worker br i1 %tobool68, label %if.end71, label %for.end95 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerif.end71: ; preds = %if.end67, %if.end61 192*9880d681SAndroid Build Coastguard Worker %t7.12 = phi i16 [ %t7.11, %if.end67 ], [ %t7.9, %if.end61 ] 193*9880d681SAndroid Build Coastguard Worker %t3.8 = phi i64 [ %t3.7, %if.end67 ], [ %t3.5, %if.end61 ] 194*9880d681SAndroid Build Coastguard Worker %tobool72 = icmp eq i32 undef, 0 195*9880d681SAndroid Build Coastguard Worker br i1 %tobool72, label %cleanup75.thread128, label %if.then73 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Workerif.then73: ; preds = %if.end71 198*9880d681SAndroid Build Coastguard Worker br label %cleanup100 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Workercleanup75.thread128: ; preds = %if.end71 201*9880d681SAndroid Build Coastguard Worker br label %if.end78 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workercleanup75: ; preds = %L3 204*9880d681SAndroid Build Coastguard Worker br i1 false, label %for.cond98, label %for.end95 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerif.end78: ; preds = %cleanup75.thread128, %if.then36 207*9880d681SAndroid Build Coastguard Worker %t7.14 = phi i16 [ %tmp5, %if.then36 ], [ 0, %cleanup75.thread128 ] 208*9880d681SAndroid Build Coastguard Worker %t3.10 = phi i64 [ %t3.4, %if.then36 ], [ %t3.8, %cleanup75.thread128 ] 209*9880d681SAndroid Build Coastguard Worker %t9.12 = phi i32 [ %t9.6, %if.then36 ], [ undef, %cleanup75.thread128 ] 210*9880d681SAndroid Build Coastguard Worker %t2.13 = phi i32 [ %t2.7, %if.then36 ], [ undef, %cleanup75.thread128 ] 211*9880d681SAndroid Build Coastguard Worker store i16 %t7.14, i16* @z, align 2 212*9880d681SAndroid Build Coastguard Worker br label %L6 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard WorkerL6: ; preds = %if.end78, %if.then 215*9880d681SAndroid Build Coastguard Worker %t7.15 = phi i16 [ %t7.0, %if.then ], [ %t7.14, %if.end78 ] 216*9880d681SAndroid Build Coastguard Worker %t3.11 = phi i64 [ 2, %if.then ], [ %t3.10, %if.end78 ] 217*9880d681SAndroid Build Coastguard Worker %t9.13 = phi i32 [ %t9.0, %if.then ], [ %t9.12, %if.end78 ] 218*9880d681SAndroid Build Coastguard Worker %t2.14 = phi i32 [ %shr, %if.then ], [ %t2.13, %if.end78 ] 219*9880d681SAndroid Build Coastguard Worker br i1 undef, label %while.condthread-pre-split, label %for.inc94 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerwhile.condthread-pre-split: ; preds = %L6 222*9880d681SAndroid Build Coastguard Worker %tobool83 = icmp eq i32 undef, 0 223*9880d681SAndroid Build Coastguard Worker br i1 %tobool83, label %while.end.split, label %while.cond 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerwhile.cond: ; preds = %while.cond, %while.condthread-pre-split 226*9880d681SAndroid Build Coastguard Worker br label %while.cond 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerwhile.end.split: ; preds = %while.condthread-pre-split 229*9880d681SAndroid Build Coastguard Worker %tobool84 = icmp eq i16 undef, 0 230*9880d681SAndroid Build Coastguard Worker br i1 %tobool84, label %for.inc94, label %L3 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerfor.inc94: ; preds = %while.end.split, %L6, %for.body34 233*9880d681SAndroid Build Coastguard Worker %t7.17 = phi i16 [ %t7.6, %for.body34 ], [ %t7.15, %L6 ], [ %t7.15, %while.end.split ] 234*9880d681SAndroid Build Coastguard Worker %t2.16 = phi i32 [ %t2.7, %for.body34 ], [ %t2.14, %L6 ], [ %t2.14, %while.end.split ] 235*9880d681SAndroid Build Coastguard Worker store i32 undef, i32* @p, align 4 236*9880d681SAndroid Build Coastguard Worker br label %for.cond32 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerfor.end95: ; preds = %cleanup75, %if.end67, %for.cond32 239*9880d681SAndroid Build Coastguard Worker %t7.18 = phi i16 [ %t7.6, %for.cond32 ], [ %t7.7, %cleanup75 ], [ %t7.11, %if.end67 ] 240*9880d681SAndroid Build Coastguard Worker %t2.17 = phi i32 [ %t2.7, %for.cond32 ], [ %t2.8, %cleanup75 ], [ %t2.10, %if.end67 ] 241*9880d681SAndroid Build Coastguard Worker %tobool96 = icmp eq i32 undef, 0 242*9880d681SAndroid Build Coastguard Worker br i1 %tobool96, label %cleanup100, label %for.cond98 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerfor.cond98: ; preds = %for.cond98, %for.end95, %cleanup75 245*9880d681SAndroid Build Coastguard Worker br label %for.cond98 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workercleanup100: ; preds = %for.end95, %if.then73, %if.then38 248*9880d681SAndroid Build Coastguard Worker %t7.19 = phi i16 [ %t7.18, %for.end95 ], [ %tmp5, %if.then38 ], [ %t7.12, %if.then73 ] 249*9880d681SAndroid Build Coastguard Worker %t2.18 = phi i32 [ %t2.17, %for.end95 ], [ %t2.7, %if.then38 ], [ undef, %if.then73 ] 250*9880d681SAndroid Build Coastguard Worker switch i32 undef, label %unreachable [ 251*9880d681SAndroid Build Coastguard Worker i32 0, label %for.cond 252*9880d681SAndroid Build Coastguard Worker i32 17, label %L1 253*9880d681SAndroid Build Coastguard Worker i32 7, label %cleanup100.L5_crit_edge 254*9880d681SAndroid Build Coastguard Worker ] 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Workercleanup100.L5_crit_edge: ; preds = %cleanup100 257*9880d681SAndroid Build Coastguard Worker %.pre.pre = load i32, i32* @r, align 4 258*9880d681SAndroid Build Coastguard Worker br label %L5 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerunreachable: ; preds = %cleanup100 261*9880d681SAndroid Build Coastguard Worker unreachable 262*9880d681SAndroid Build Coastguard Worker} 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 265*9880d681SAndroid Build Coastguard Workerdeclare void @printf(i8* nocapture readonly, ...) #1 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerattributes #0 = { noreturn nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 268*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 269