1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-coalescing 2*9880d681SAndroid Build Coastguard Worker; PR12911 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.7.0" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@d = common global i32 0, align 4 7*9880d681SAndroid Build Coastguard Worker@c = common global i32 0, align 4 8*9880d681SAndroid Build Coastguard Worker@b = common global i32 0, align 4 9*9880d681SAndroid Build Coastguard Worker@h = common global i32 0, align 4 10*9880d681SAndroid Build Coastguard Worker@f = common global i32 0, align 4 11*9880d681SAndroid Build Coastguard Worker@g = common global i32 0, align 4 12*9880d681SAndroid Build Coastguard Worker@a = common global i16 0, align 2 13*9880d681SAndroid Build Coastguard Worker@e = common global i32 0, align 4 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine void @fn1() nounwind uwtable ssp { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @d, align 4 18*9880d681SAndroid Build Coastguard Worker %tobool72 = icmp eq i32 %0, 0 19*9880d681SAndroid Build Coastguard Worker br i1 %tobool72, label %for.end32, label %for.cond1.preheader.lr.ph 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.lr.ph: ; preds = %entry 22*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @c, align 4 23*9880d681SAndroid Build Coastguard Worker %tobool2 = icmp eq i32 %1, 0 24*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* @b, align 4 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %2, 0 26*9880d681SAndroid Build Coastguard Worker %conv = zext i1 %cmp to i32 27*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* @g, align 4 28*9880d681SAndroid Build Coastguard Worker %tobool4 = icmp eq i32 %3, 0 29*9880d681SAndroid Build Coastguard Worker %4 = load i16, i16* @a, align 2 30*9880d681SAndroid Build Coastguard Worker %tobool9 = icmp eq i16 %4, 0 31*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %for.cond25.loopexit.us-lcssa.us-lcssa, %if.end.us50, %if.end.us, %if.end.us.us, %for.cond1.preheader.lr.ph 34*9880d681SAndroid Build Coastguard Worker %j.073 = phi i32 [ undef, %for.cond1.preheader.lr.ph ], [ %j.1.us.us, %if.end.us.us ], [ %j.1.us, %if.end.us ], [ %j.073, %for.cond25.loopexit.us-lcssa.us-lcssa ], [ %j.1.us36, %if.end.us50 ] 35*9880d681SAndroid Build Coastguard Worker br i1 %tobool2, label %for.cond1.preheader.split.us, label %for.cond1.preheader.for.cond1.preheader.split_crit_edge 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.for.cond1.preheader.split_crit_edge: ; preds = %for.cond1.preheader 38*9880d681SAndroid Build Coastguard Worker br i1 %tobool9, label %if.end.us50, label %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.split.us: ; preds = %for.cond1.preheader 41*9880d681SAndroid Build Coastguard Worker br i1 %tobool9, label %cond.end.us.us, label %cond.end.us 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workercond.false18.us.us: ; preds = %if.end.us.us 44*9880d681SAndroid Build Coastguard Worker %5 = load i32, i32* @f, align 4 45*9880d681SAndroid Build Coastguard Worker %sext76 = shl i32 %5, 16 46*9880d681SAndroid Build Coastguard Worker %phitmp75 = ashr exact i32 %sext76, 16 47*9880d681SAndroid Build Coastguard Worker br label %cond.end.us.us 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerif.end.us.us: ; preds = %cond.end.us.us, %if.then.us.us 50*9880d681SAndroid Build Coastguard Worker br i1 %tobool4, label %cond.false18.us.us, label %for.cond1.preheader 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerif.then.us.us: ; preds = %cond.end.us.us 53*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @f, align 4 54*9880d681SAndroid Build Coastguard Worker br label %if.end.us.us 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workercond.end.us.us: ; preds = %cond.false18.us.us, %for.cond1.preheader.split.us 57*9880d681SAndroid Build Coastguard Worker %j.1.us.us = phi i32 [ %j.073, %for.cond1.preheader.split.us ], [ %phitmp75, %cond.false18.us.us ] 58*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* @h, align 4 59*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then.us.us, label %if.end.us.us 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workercond.end21.us: ; preds = %land.lhs.true12.us, %cond.false18.us 62*9880d681SAndroid Build Coastguard Worker %cond22.us = phi i16 [ %add.us, %cond.false18.us ], [ %4, %land.lhs.true12.us ] 63*9880d681SAndroid Build Coastguard Worker %conv24.us = sext i16 %cond22.us to i32 64*9880d681SAndroid Build Coastguard Worker br label %cond.end.us 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workercond.false18.us: ; preds = %if.end6.us, %land.lhs.true12.us 67*9880d681SAndroid Build Coastguard Worker %add.us = add i16 %4, %conv7.us 68*9880d681SAndroid Build Coastguard Worker br label %cond.end21.us 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerland.lhs.true12.us: ; preds = %if.end6.us 71*9880d681SAndroid Build Coastguard Worker %conv10.us = sext i16 %conv7.us to i32 72*9880d681SAndroid Build Coastguard Worker %sub.us = sub nsw i32 0, %conv10.us 73*9880d681SAndroid Build Coastguard Worker %cmp14.us = icmp slt i32 %sub.us, 1 74*9880d681SAndroid Build Coastguard Worker br i1 %cmp14.us, label %cond.end21.us, label %cond.false18.us 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerif.end6.us: ; preds = %if.end.us 77*9880d681SAndroid Build Coastguard Worker %6 = load i32, i32* @f, align 4 78*9880d681SAndroid Build Coastguard Worker %conv7.us = trunc i32 %6 to i16 79*9880d681SAndroid Build Coastguard Worker %tobool11.us = icmp eq i16 %conv7.us, 0 80*9880d681SAndroid Build Coastguard Worker br i1 %tobool11.us, label %cond.false18.us, label %land.lhs.true12.us 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerif.end.us: ; preds = %cond.end.us, %if.then.us 83*9880d681SAndroid Build Coastguard Worker br i1 %tobool4, label %if.end6.us, label %for.cond1.preheader 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerif.then.us: ; preds = %cond.end.us 86*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @f, align 4 87*9880d681SAndroid Build Coastguard Worker br label %if.end.us 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workercond.end.us: ; preds = %cond.end21.us, %for.cond1.preheader.split.us 90*9880d681SAndroid Build Coastguard Worker %j.1.us = phi i32 [ %conv24.us, %cond.end21.us ], [ %j.073, %for.cond1.preheader.split.us ] 91*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* @h, align 4 92*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then.us, label %if.end.us 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge: ; preds = %for.cond1.preheader.for.cond1.preheader.split_crit_edge 95*9880d681SAndroid Build Coastguard Worker br i1 %tobool4, label %if.end6.us65, label %for.cond25.loopexit.us-lcssa.us-lcssa 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workercond.false18.us40: ; preds = %if.end.us50 98*9880d681SAndroid Build Coastguard Worker %7 = load i32, i32* @f, align 4 99*9880d681SAndroid Build Coastguard Worker %sext = shl i32 %7, 16 100*9880d681SAndroid Build Coastguard Worker %phitmp = ashr exact i32 %sext, 16 101*9880d681SAndroid Build Coastguard Worker br label %if.end.us50 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerif.end.us50: ; preds = %cond.false18.us40, %for.cond1.preheader.for.cond1.preheader.split_crit_edge 104*9880d681SAndroid Build Coastguard Worker %j.1.us36 = phi i32 [ %j.073, %for.cond1.preheader.for.cond1.preheader.split_crit_edge ], [ %phitmp, %cond.false18.us40 ] 105*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @h, align 4 106*9880d681SAndroid Build Coastguard Worker br i1 %tobool4, label %cond.false18.us40, label %for.cond1.preheader 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerif.end6.us65: ; preds = %if.end6.us65, %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge 109*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @h, align 4 110*9880d681SAndroid Build Coastguard Worker br label %if.end6.us65 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerfor.cond25.loopexit.us-lcssa.us-lcssa: ; preds = %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge 113*9880d681SAndroid Build Coastguard Worker store i32 0, i32* @h, align 4 114*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerfor.end32: ; preds = %entry 117*9880d681SAndroid Build Coastguard Worker ret void 118*9880d681SAndroid Build Coastguard Worker} 119