1*65b40f27SMatt Arsenault; This is a copy of test/CodeGen/X86/ragreedy-hoist-spill.ll. It generates 2*65b40f27SMatt Arsenault; sufficiently interesting differences between the default eviction heuristic 3*65b40f27SMatt Arsenault; and the test ML policy: different eviction choices, and different reward. 4*65b40f27SMatt Arsenault; 5*65b40f27SMatt Arsenault; 6*65b40f27SMatt Arsenault%struct.TMP.1 = type { %struct.TMP.2*, %struct.TMP.2*, [1024 x i8] } 7*65b40f27SMatt Arsenault%struct.TMP.2 = type { i8*, i32, i32, i16, i16, %struct.TMP.3, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.TMP.3, %struct.TMP.4*, i32, [3 x i8], [1 x i8], %struct.TMP.3, i32, i64 } 8*65b40f27SMatt Arsenault%struct.TMP.4 = type opaque 9*65b40f27SMatt Arsenault%struct.TMP.3 = type { i8*, i32 } 10*65b40f27SMatt Arsenault 11*65b40f27SMatt Arsenault@syBuf = external global [16 x %struct.TMP.1], align 16 12*65b40f27SMatt Arsenault@syHistory = external global [8192 x i8], align 16 13*65b40f27SMatt Arsenault@SyFgets.yank = external global [512 x i8], align 16 14*65b40f27SMatt Arsenault@syCTRO = external global i32, align 4 15*65b40f27SMatt Arsenault 16*65b40f27SMatt Arsenaultdefine i8* @SyFgets(i8* %line, i64 %length, i64 %fid) { 17*65b40f27SMatt Arsenaultentry: 18*65b40f27SMatt Arsenault %sub.ptr.rhs.cast646 = ptrtoint i8* %line to i64 19*65b40f27SMatt Arsenault %old = alloca [512 x i8], align 16 20*65b40f27SMatt Arsenault %0 = getelementptr inbounds [512 x i8], [512 x i8]* %old, i64 0, i64 0 21*65b40f27SMatt Arsenault switch i64 %fid, label %if.then [ 22*65b40f27SMatt Arsenault i64 2, label %if.end 23*65b40f27SMatt Arsenault i64 0, label %if.end 24*65b40f27SMatt Arsenault ] 25*65b40f27SMatt Arsenault 26*65b40f27SMatt Arsenaultif.then: 27*65b40f27SMatt Arsenault br label %cleanup 28*65b40f27SMatt Arsenault 29*65b40f27SMatt Arsenaultif.end: 30*65b40f27SMatt Arsenault switch i64 undef, label %if.end25 [ 31*65b40f27SMatt Arsenault i64 0, label %if.then4 32*65b40f27SMatt Arsenault i64 1, label %if.end25 33*65b40f27SMatt Arsenault ] 34*65b40f27SMatt Arsenault 35*65b40f27SMatt Arsenaultif.then4: 36*65b40f27SMatt Arsenault br i1 undef, label %SyTime.exit, label %if.then.i 37*65b40f27SMatt Arsenault 38*65b40f27SMatt Arsenaultif.then.i: 39*65b40f27SMatt Arsenault unreachable 40*65b40f27SMatt Arsenault 41*65b40f27SMatt ArsenaultSyTime.exit: 42*65b40f27SMatt Arsenault br i1 undef, label %SyTime.exit2681, label %if.then.i2673 43*65b40f27SMatt Arsenault 44*65b40f27SMatt Arsenaultif.then.i2673: 45*65b40f27SMatt Arsenault unreachable 46*65b40f27SMatt Arsenault 47*65b40f27SMatt ArsenaultSyTime.exit2681: 48*65b40f27SMatt Arsenault br label %cleanup 49*65b40f27SMatt Arsenault 50*65b40f27SMatt Arsenaultland.lhs.true14: 51*65b40f27SMatt Arsenault unreachable 52*65b40f27SMatt Arsenault 53*65b40f27SMatt Arsenaultif.end25: 54*65b40f27SMatt Arsenault br i1 undef, label %SyTime.exit2720, label %if.then.i2712 55*65b40f27SMatt Arsenault 56*65b40f27SMatt Arsenaultif.then.i2712: 57*65b40f27SMatt Arsenault unreachable 58*65b40f27SMatt Arsenault 59*65b40f27SMatt ArsenaultSyTime.exit2720: 60*65b40f27SMatt Arsenault %add.ptr = getelementptr [512 x i8], [512 x i8]* %old, i64 0, i64 512 61*65b40f27SMatt Arsenault %cmp293427 = icmp ult i8* %0, %add.ptr 62*65b40f27SMatt Arsenault br i1 %cmp293427, label %for.body.lr.ph, label %while.body.preheader 63*65b40f27SMatt Arsenault 64*65b40f27SMatt Arsenaultfor.body.lr.ph: 65*65b40f27SMatt Arsenault call void @llvm.memset.p0i8.i64(i8* align 16 undef, i8 32, i64 512, i1 false) 66*65b40f27SMatt Arsenault br label %while.body.preheader 67*65b40f27SMatt Arsenault 68*65b40f27SMatt Arsenaultwhile.body.preheader: 69*65b40f27SMatt Arsenault %add.ptr1603 = getelementptr [512 x i8], [512 x i8]* null, i64 0, i64 512 70*65b40f27SMatt Arsenault %echo.i3101 = getelementptr [16 x %struct.TMP.1], [16 x %struct.TMP.1]* @syBuf, i64 0, i64 %fid, i32 1 71*65b40f27SMatt Arsenault %1 = xor i64 %sub.ptr.rhs.cast646, -1 72*65b40f27SMatt Arsenault br label %do.body 73*65b40f27SMatt Arsenault 74*65b40f27SMatt Arsenaultdo.body: 75*65b40f27SMatt Arsenault %ch2.0 = phi i32 [ 0, %while.body.preheader ], [ %ch.12.ch2.12, %do.body ] 76*65b40f27SMatt Arsenault %rep.0 = phi i32 [ 1, %while.body.preheader ], [ %rep.6, %do.body ] 77*65b40f27SMatt Arsenault store i32 0, i32* @syCTRO, align 4, !tbaa !1 78*65b40f27SMatt Arsenault %ch.0.ch2.0 = select i1 undef, i32 14, i32 %ch2.0 79*65b40f27SMatt Arsenault %ch2.2 = select i1 undef, i32 0, i32 %ch.0.ch2.0 80*65b40f27SMatt Arsenault %ch.2.ch2.2 = select i1 undef, i32 0, i32 %ch2.2 81*65b40f27SMatt Arsenault %ch2.4 = select i1 undef, i32 278, i32 %ch.2.ch2.2 82*65b40f27SMatt Arsenault %ch2.5 = select i1 undef, i32 0, i32 %ch2.4 83*65b40f27SMatt Arsenault %rep.2 = select i1 undef, i32 undef, i32 %rep.0 84*65b40f27SMatt Arsenault %ch.5.ch2.5 = select i1 undef, i32 undef, i32 %ch2.5 85*65b40f27SMatt Arsenault %ch2.7 = select i1 undef, i32 0, i32 %ch.5.ch2.5 86*65b40f27SMatt Arsenault %rep.3 = select i1 undef, i32 undef, i32 %rep.2 87*65b40f27SMatt Arsenault %ch.7.ch2.7 = select i1 false, i32 0, i32 %ch2.7 88*65b40f27SMatt Arsenault %mul98.rep.3 = select i1 false, i32 0, i32 %rep.3 89*65b40f27SMatt Arsenault %ch2.9 = select i1 undef, i32 undef, i32 %ch.7.ch2.7 90*65b40f27SMatt Arsenault %rep.5 = select i1 undef, i32 undef, i32 %mul98.rep.3 91*65b40f27SMatt Arsenault %ch2.10 = select i1 false, i32 undef, i32 %ch2.9 92*65b40f27SMatt Arsenault %rep.6 = select i1 false, i32 undef, i32 %rep.5 93*65b40f27SMatt Arsenault %isdigittmp = add i32 %ch2.10, -48 94*65b40f27SMatt Arsenault %isdigit = icmp ult i32 %isdigittmp, 10 95*65b40f27SMatt Arsenault %cmp119 = icmp eq i32 undef, 22 96*65b40f27SMatt Arsenault %or.cond1875 = and i1 %isdigit, %cmp119 97*65b40f27SMatt Arsenault %ch.10.ch2.10 = select i1 %or.cond1875, i32 undef, i32 %ch2.10 98*65b40f27SMatt Arsenault %.ch.10 = select i1 %or.cond1875, i32 0, i32 undef 99*65b40f27SMatt Arsenault %ch2.12 = select i1 undef, i32 %.ch.10, i32 %ch.10.ch2.10 100*65b40f27SMatt Arsenault %ch.12 = select i1 undef, i32 0, i32 %.ch.10 101*65b40f27SMatt Arsenault %ch.12.ch2.12 = select i1 false, i32 %ch.12, i32 %ch2.12 102*65b40f27SMatt Arsenault %.ch.12 = select i1 false, i32 0, i32 %ch.12 103*65b40f27SMatt Arsenault %cmp147 = icmp eq i32 %.ch.12, 0 104*65b40f27SMatt Arsenault br i1 %cmp147, label %do.body, label %do.end 105*65b40f27SMatt Arsenault 106*65b40f27SMatt Arsenaultdo.end: 107*65b40f27SMatt Arsenault %cmp164 = icmp eq i32 %ch.12.ch2.12, 21 108*65b40f27SMatt Arsenault %mul167 = shl i32 %rep.6, 2 109*65b40f27SMatt Arsenault %rep.8 = select i1 %cmp164, i32 %mul167, i32 %rep.6 110*65b40f27SMatt Arsenault %..ch.19 = select i1 false, i32 2, i32 0 111*65b40f27SMatt Arsenault br i1 undef, label %while.body200, label %while.end1465 112*65b40f27SMatt Arsenault 113*65b40f27SMatt Arsenaultwhile.body200: 114*65b40f27SMatt Arsenault %dec3386.in = phi i32 [ %dec3386, %while.cond197.backedge ], [ %rep.8, %do.end ] 115*65b40f27SMatt Arsenault %oldc.13384 = phi i32 [ %oldc.1.be, %while.cond197.backedge ], [ 0, %do.end ] 116*65b40f27SMatt Arsenault %ch.213379 = phi i32 [ %last.1.be, %while.cond197.backedge ], [ %..ch.19, %do.end ] 117*65b40f27SMatt Arsenault %last.13371 = phi i32 [ %last.1.be, %while.cond197.backedge ], [ 0, %do.end ] 118*65b40f27SMatt Arsenault %dec3386 = add i32 %dec3386.in, -1 119*65b40f27SMatt Arsenault switch i32 %ch.213379, label %sw.default [ 120*65b40f27SMatt Arsenault i32 1, label %while.cond201.preheader 121*65b40f27SMatt Arsenault i32 322, label %sw.bb206 122*65b40f27SMatt Arsenault i32 354, label %sw.bb206 123*65b40f27SMatt Arsenault i32 2, label %sw.bb243 124*65b40f27SMatt Arsenault i32 364, label %sw.bb1077 125*65b40f27SMatt Arsenault i32 326, label %sw.bb256 126*65b40f27SMatt Arsenault i32 358, label %sw.bb256 127*65b40f27SMatt Arsenault i32 341, label %sw.bb979 128*65b40f27SMatt Arsenault i32 323, label %while.cond1037.preheader 129*65b40f27SMatt Arsenault i32 373, label %sw.bb979 130*65b40f27SMatt Arsenault i32 4, label %if.then1477 131*65b40f27SMatt Arsenault i32 332, label %sw.bb1077 132*65b40f27SMatt Arsenault i32 11, label %for.cond357 133*65b40f27SMatt Arsenault i32 355, label %while.cond1037.preheader 134*65b40f27SMatt Arsenault i32 324, label %sw.bb474 135*65b40f27SMatt Arsenault i32 356, label %sw.bb474 136*65b40f27SMatt Arsenault i32 20, label %sw.bb566 137*65b40f27SMatt Arsenault i32 -1, label %while.cond197.backedge 138*65b40f27SMatt Arsenault i32 268, label %sw.bb1134 139*65b40f27SMatt Arsenault i32 16, label %while.cond635.preheader 140*65b40f27SMatt Arsenault i32 18, label %sw.bb956 141*65b40f27SMatt Arsenault i32 316, label %while.cond864 142*65b40f27SMatt Arsenault ] 143*65b40f27SMatt Arsenault 144*65b40f27SMatt Arsenaultwhile.cond1037.preheader: 145*65b40f27SMatt Arsenault %cmp10393273 = icmp eq i8 undef, 0 146*65b40f27SMatt Arsenault br i1 %cmp10393273, label %if.end1070, label %land.rhs1041 147*65b40f27SMatt Arsenault 148*65b40f27SMatt Arsenaultwhile.cond635.preheader: 149*65b40f27SMatt Arsenault br i1 undef, label %for.body643.us, label %while.cond661 150*65b40f27SMatt Arsenault 151*65b40f27SMatt Arsenaultfor.body643.us: 152*65b40f27SMatt Arsenault br label %for.body643.us 153*65b40f27SMatt Arsenault 154*65b40f27SMatt Arsenaultwhile.cond201.preheader: 155*65b40f27SMatt Arsenault %umax = select i1 false, i64 undef, i64 %1 156*65b40f27SMatt Arsenault %2 = xor i64 %umax, -1 157*65b40f27SMatt Arsenault %3 = inttoptr i64 %2 to i8* 158*65b40f27SMatt Arsenault br label %while.cond197.backedge 159*65b40f27SMatt Arsenault 160*65b40f27SMatt Arsenaultsw.bb206: 161*65b40f27SMatt Arsenault br label %while.cond197.backedge 162*65b40f27SMatt Arsenault 163*65b40f27SMatt Arsenaultsw.bb243: 164*65b40f27SMatt Arsenault br label %while.cond197.backedge 165*65b40f27SMatt Arsenault 166*65b40f27SMatt Arsenaultsw.bb256: 167*65b40f27SMatt Arsenault br label %while.cond197.backedge 168*65b40f27SMatt Arsenault 169*65b40f27SMatt Arsenaultwhile.cond197.backedge: 170*65b40f27SMatt Arsenault %last.1.be = phi i32 [ %ch.213379, %sw.default ], [ -1, %while.body200 ], [ %ch.213379, %sw.bb1077 ], [ %ch.213379, %sw.bb979 ], [ 18, %sw.bb956 ], [ 20, %sw.bb566 ], [ %ch.213379, %for.end552 ], [ %ch.213379, %sw.bb256 ], [ 2, %sw.bb243 ], [ 1, %while.cond201.preheader ], [ 268, %for.cond1145.preheader ], [ %ch.213379, %sw.bb206 ] 171*65b40f27SMatt Arsenault %oldc.1.be = phi i32 [ %oldc.13384, %sw.default ], [ %oldc.13384, %while.body200 ], [ %oldc.13384, %sw.bb1077 ], [ %oldc.13384, %sw.bb979 ], [ %oldc.13384, %sw.bb956 ], [ %oldc.13384, %sw.bb566 ], [ %oldc.13384, %for.end552 ], [ %oldc.13384, %sw.bb256 ], [ %oldc.13384, %sw.bb243 ], [ %oldc.13384, %while.cond201.preheader ], [ 0, %for.cond1145.preheader ], [ %oldc.13384, %sw.bb206 ] 172*65b40f27SMatt Arsenault %cmp198 = icmp sgt i32 %dec3386, 0 173*65b40f27SMatt Arsenault br i1 %cmp198, label %while.body200, label %while.end1465 174*65b40f27SMatt Arsenault 175*65b40f27SMatt Arsenaultfor.cond357: 176*65b40f27SMatt Arsenault br label %for.cond357 177*65b40f27SMatt Arsenault 178*65b40f27SMatt Arsenaultsw.bb474: 179*65b40f27SMatt Arsenault ; spill is hoisted here. Although loop depth1 is even hotter than loop depth2, sw.bb474 is still cold. 180*65b40f27SMatt Arsenault %cmp476 = icmp eq i8 undef, 0 181*65b40f27SMatt Arsenault br i1 %cmp476, label %if.end517, label %do.body479.preheader 182*65b40f27SMatt Arsenault 183*65b40f27SMatt Arsenaultdo.body479.preheader: 184*65b40f27SMatt Arsenault %cmp4833314 = icmp eq i8 undef, 0 185*65b40f27SMatt Arsenault br i1 %cmp4833314, label %if.end517, label %land.rhs485 186*65b40f27SMatt Arsenault 187*65b40f27SMatt Arsenaultland.rhs485: 188*65b40f27SMatt Arsenault %incdec.ptr4803316 = phi i8* [ %incdec.ptr480, %do.body479.backedge.land.rhs485_crit_edge ], [ undef, %do.body479.preheader ] 189*65b40f27SMatt Arsenault %isascii.i.i27763151 = icmp sgt i8 undef, -1 190*65b40f27SMatt Arsenault br i1 %isascii.i.i27763151, label %cond.true.i.i2780, label %cond.false.i.i2782 191*65b40f27SMatt Arsenault 192*65b40f27SMatt Arsenaultcond.true.i.i2780: 193*65b40f27SMatt Arsenault br i1 undef, label %land.lhs.true490, label %lor.rhs500 194*65b40f27SMatt Arsenault 195*65b40f27SMatt Arsenaultcond.false.i.i2782: 196*65b40f27SMatt Arsenault unreachable 197*65b40f27SMatt Arsenault 198*65b40f27SMatt Arsenaultland.lhs.true490: 199*65b40f27SMatt Arsenault br i1 false, label %lor.rhs500, label %do.body479.backedge 200*65b40f27SMatt Arsenault 201*65b40f27SMatt Arsenaultlor.rhs500: 202*65b40f27SMatt Arsenault ; Make sure spill is hoisted to a cold preheader in outside loop. 203*65b40f27SMatt Arsenault %call3.i.i2792 = call i32 @__maskrune(i32 undef, i64 256) 204*65b40f27SMatt Arsenault br i1 undef, label %land.lhs.true504, label %do.body479.backedge 205*65b40f27SMatt Arsenault 206*65b40f27SMatt Arsenaultland.lhs.true504: 207*65b40f27SMatt Arsenault br i1 undef, label %do.body479.backedge, label %if.end517 208*65b40f27SMatt Arsenault 209*65b40f27SMatt Arsenaultdo.body479.backedge: 210*65b40f27SMatt Arsenault %incdec.ptr480 = getelementptr i8, i8* %incdec.ptr4803316, i64 1 211*65b40f27SMatt Arsenault %cmp483 = icmp eq i8 undef, 0 212*65b40f27SMatt Arsenault br i1 %cmp483, label %if.end517, label %do.body479.backedge.land.rhs485_crit_edge 213*65b40f27SMatt Arsenault 214*65b40f27SMatt Arsenaultdo.body479.backedge.land.rhs485_crit_edge: 215*65b40f27SMatt Arsenault br label %land.rhs485 216*65b40f27SMatt Arsenault 217*65b40f27SMatt Arsenaultif.end517: 218*65b40f27SMatt Arsenault %q.4 = phi i8* [ undef, %sw.bb474 ], [ undef, %do.body479.preheader ], [ %incdec.ptr480, %do.body479.backedge ], [ %incdec.ptr4803316, %land.lhs.true504 ] 219*65b40f27SMatt Arsenault switch i32 %last.13371, label %if.then532 [ 220*65b40f27SMatt Arsenault i32 383, label %for.cond534 221*65b40f27SMatt Arsenault i32 356, label %for.cond534 222*65b40f27SMatt Arsenault i32 324, label %for.cond534 223*65b40f27SMatt Arsenault i32 24, label %for.cond534 224*65b40f27SMatt Arsenault i32 11, label %for.cond534 225*65b40f27SMatt Arsenault ] 226*65b40f27SMatt Arsenault 227*65b40f27SMatt Arsenaultif.then532: 228*65b40f27SMatt Arsenault store i8 0, i8* getelementptr inbounds ([512 x i8], [512 x i8]* @SyFgets.yank, i64 0, i64 0), align 16, !tbaa !5 229*65b40f27SMatt Arsenault br label %for.cond534 230*65b40f27SMatt Arsenault 231*65b40f27SMatt Arsenaultfor.cond534: 232*65b40f27SMatt Arsenault %cmp536 = icmp eq i8 undef, 0 233*65b40f27SMatt Arsenault br i1 %cmp536, label %for.cond542.preheader, label %for.cond534 234*65b40f27SMatt Arsenault 235*65b40f27SMatt Arsenaultfor.cond542.preheader: 236*65b40f27SMatt Arsenault br i1 undef, label %for.body545, label %for.end552 237*65b40f27SMatt Arsenault 238*65b40f27SMatt Arsenaultfor.body545: 239*65b40f27SMatt Arsenault br i1 undef, label %for.end552, label %for.body545 240*65b40f27SMatt Arsenault 241*65b40f27SMatt Arsenaultfor.end552: 242*65b40f27SMatt Arsenault %s.2.lcssa = phi i8* [ undef, %for.cond542.preheader ], [ %q.4, %for.body545 ] 243*65b40f27SMatt Arsenault %sub.ptr.lhs.cast553 = ptrtoint i8* %s.2.lcssa to i64 244*65b40f27SMatt Arsenault %sub.ptr.sub555 = sub i64 %sub.ptr.lhs.cast553, 0 245*65b40f27SMatt Arsenault %arrayidx556 = getelementptr i8, i8* null, i64 %sub.ptr.sub555 246*65b40f27SMatt Arsenault store i8 0, i8* %arrayidx556, align 1, !tbaa !5 247*65b40f27SMatt Arsenault br label %while.cond197.backedge 248*65b40f27SMatt Arsenault 249*65b40f27SMatt Arsenaultsw.bb566: 250*65b40f27SMatt Arsenault br label %while.cond197.backedge 251*65b40f27SMatt Arsenault 252*65b40f27SMatt Arsenaultwhile.cond661: 253*65b40f27SMatt Arsenault br label %while.cond661 254*65b40f27SMatt Arsenault 255*65b40f27SMatt Arsenaultwhile.cond864: 256*65b40f27SMatt Arsenault br label %while.cond864 257*65b40f27SMatt Arsenault 258*65b40f27SMatt Arsenaultsw.bb956: 259*65b40f27SMatt Arsenault br i1 undef, label %if.then959, label %while.cond197.backedge 260*65b40f27SMatt Arsenault 261*65b40f27SMatt Arsenaultif.then959: 262*65b40f27SMatt Arsenault br label %while.cond962 263*65b40f27SMatt Arsenault 264*65b40f27SMatt Arsenaultwhile.cond962: 265*65b40f27SMatt Arsenault br label %while.cond962 266*65b40f27SMatt Arsenault 267*65b40f27SMatt Arsenaultsw.bb979: 268*65b40f27SMatt Arsenault br label %while.cond197.backedge 269*65b40f27SMatt Arsenault 270*65b40f27SMatt Arsenaultland.rhs1041: 271*65b40f27SMatt Arsenault unreachable 272*65b40f27SMatt Arsenault 273*65b40f27SMatt Arsenaultif.end1070: 274*65b40f27SMatt Arsenault br label %sw.bb1077 275*65b40f27SMatt Arsenault 276*65b40f27SMatt Arsenaultsw.bb1077: 277*65b40f27SMatt Arsenault br label %while.cond197.backedge 278*65b40f27SMatt Arsenault 279*65b40f27SMatt Arsenaultsw.bb1134: 280*65b40f27SMatt Arsenault br i1 false, label %for.body1139, label %for.cond1145.preheader 281*65b40f27SMatt Arsenault 282*65b40f27SMatt Arsenaultfor.cond1145.preheader: 283*65b40f27SMatt Arsenault br i1 %cmp293427, label %for.body1150.lr.ph, label %while.cond197.backedge 284*65b40f27SMatt Arsenault 285*65b40f27SMatt Arsenaultfor.body1150.lr.ph: 286*65b40f27SMatt Arsenault unreachable 287*65b40f27SMatt Arsenault 288*65b40f27SMatt Arsenaultfor.body1139: 289*65b40f27SMatt Arsenault unreachable 290*65b40f27SMatt Arsenault 291*65b40f27SMatt Arsenaultsw.default: 292*65b40f27SMatt Arsenault br label %while.cond197.backedge 293*65b40f27SMatt Arsenault 294*65b40f27SMatt Arsenaultwhile.end1465: 295*65b40f27SMatt Arsenault %oldc.1.lcssa = phi i32 [ 0, %do.end ], [ %oldc.1.be, %while.cond197.backedge ] 296*65b40f27SMatt Arsenault %ch.21.lcssa = phi i32 [ %..ch.19, %do.end ], [ %last.1.be, %while.cond197.backedge ] 297*65b40f27SMatt Arsenault switch i32 %ch.21.lcssa, label %for.cond1480.preheader [ 298*65b40f27SMatt Arsenault i32 -1, label %if.then1477 299*65b40f27SMatt Arsenault i32 15, label %if.then1477 300*65b40f27SMatt Arsenault i32 13, label %if.then1477 301*65b40f27SMatt Arsenault i32 10, label %if.then1477 302*65b40f27SMatt Arsenault ] 303*65b40f27SMatt Arsenault 304*65b40f27SMatt Arsenaultfor.cond1480.preheader: 305*65b40f27SMatt Arsenault br i1 undef, label %for.body1606.lr.ph, label %for.end1609 306*65b40f27SMatt Arsenault 307*65b40f27SMatt Arsenaultif.then1477: 308*65b40f27SMatt Arsenault %p.1.lcssa3539 = phi i8* [ null, %while.end1465 ], [ null, %while.end1465 ], [ null, %while.end1465 ], [ null, %while.end1465 ], [ %line, %while.body200 ] 309*65b40f27SMatt Arsenault %call1.i3057 = call i64 @"\01_write"(i32 undef, i8* undef, i64 1) 310*65b40f27SMatt Arsenault %sub.ptr.lhs.cast1717 = ptrtoint i8* %p.1.lcssa3539 to i64 311*65b40f27SMatt Arsenault %sub.ptr.sub1719 = sub i64 %sub.ptr.lhs.cast1717, %sub.ptr.rhs.cast646 312*65b40f27SMatt Arsenault %idx.neg1727 = sub i64 0, %sub.ptr.sub1719 313*65b40f27SMatt Arsenault br label %for.body1723 314*65b40f27SMatt Arsenault 315*65b40f27SMatt Arsenaultfor.body1606.lr.ph: 316*65b40f27SMatt Arsenault br label %for.end1609 317*65b40f27SMatt Arsenault 318*65b40f27SMatt Arsenaultfor.end1609: 319*65b40f27SMatt Arsenault br i1 undef, label %for.cond1659.preheader, label %land.lhs.true1614 320*65b40f27SMatt Arsenault 321*65b40f27SMatt Arsenaultland.lhs.true1614: 322*65b40f27SMatt Arsenault br label %for.cond1659.preheader 323*65b40f27SMatt Arsenault 324*65b40f27SMatt Arsenaultfor.cond1659.preheader: 325*65b40f27SMatt Arsenault %cmp16623414 = icmp ult i8* undef, %add.ptr1603 326*65b40f27SMatt Arsenault br i1 %cmp16623414, label %for.body1664.lr.ph, label %while.body1703.lr.ph 327*65b40f27SMatt Arsenault 328*65b40f27SMatt Arsenaultfor.body1664.lr.ph: 329*65b40f27SMatt Arsenault %cmp16773405 = icmp slt i64 undef, undef 330*65b40f27SMatt Arsenault br i1 %cmp16773405, label %while.body1679, label %while.cond1683.preheader 331*65b40f27SMatt Arsenault 332*65b40f27SMatt Arsenaultwhile.body1703.lr.ph: 333*65b40f27SMatt Arsenault unreachable 334*65b40f27SMatt Arsenault 335*65b40f27SMatt Arsenaultwhile.cond1683.preheader: 336*65b40f27SMatt Arsenault br i1 undef, label %while.body1691, label %while.end1693 337*65b40f27SMatt Arsenault 338*65b40f27SMatt Arsenaultwhile.body1679: 339*65b40f27SMatt Arsenault %oldc.43406 = phi i32 [ %inc, %syEchoch.exit3070 ], [ %oldc.1.lcssa, %for.body1664.lr.ph ] 340*65b40f27SMatt Arsenault %4 = load %struct.TMP.2*, %struct.TMP.2** %echo.i3101, align 8, !tbaa !6 341*65b40f27SMatt Arsenault %call.i3062 = call i32 @fileno(%struct.TMP.2* %4) 342*65b40f27SMatt Arsenault br i1 undef, label %if.then.i3069, label %syEchoch.exit3070 343*65b40f27SMatt Arsenault 344*65b40f27SMatt Arsenaultif.then.i3069: 345*65b40f27SMatt Arsenault br label %syEchoch.exit3070 346*65b40f27SMatt Arsenault 347*65b40f27SMatt ArsenaultsyEchoch.exit3070: 348*65b40f27SMatt Arsenault %inc = add i32 %oldc.43406, 1 349*65b40f27SMatt Arsenault %conv1672 = sext i32 %inc to i64 350*65b40f27SMatt Arsenault %cmp1677 = icmp slt i64 %conv1672, undef 351*65b40f27SMatt Arsenault br i1 %cmp1677, label %while.body1679, label %while.cond1683.preheader 352*65b40f27SMatt Arsenault 353*65b40f27SMatt Arsenaultwhile.body1691: 354*65b40f27SMatt Arsenault unreachable 355*65b40f27SMatt Arsenault 356*65b40f27SMatt Arsenaultwhile.end1693: 357*65b40f27SMatt Arsenault unreachable 358*65b40f27SMatt Arsenault 359*65b40f27SMatt Arsenaultfor.body1723: 360*65b40f27SMatt Arsenault %q.303203 = phi i8* [ getelementptr inbounds ([8192 x i8], [8192 x i8]* @syHistory, i64 0, i64 8189), %if.then1477 ], [ %incdec.ptr1730, %for.body1723 ] 361*65b40f27SMatt Arsenault %add.ptr1728 = getelementptr i8, i8* %q.303203, i64 %idx.neg1727 362*65b40f27SMatt Arsenault %5 = load i8, i8* %add.ptr1728, align 1, !tbaa !5 363*65b40f27SMatt Arsenault %incdec.ptr1730 = getelementptr i8, i8* %q.303203, i64 -1 364*65b40f27SMatt Arsenault br label %for.body1723 365*65b40f27SMatt Arsenault 366*65b40f27SMatt Arsenaultcleanup: 367*65b40f27SMatt Arsenault ret i8* undef 368*65b40f27SMatt Arsenault} 369*65b40f27SMatt Arsenault 370*65b40f27SMatt Arsenaultdeclare i32 @fileno(%struct.TMP.2* nocapture) 371*65b40f27SMatt Arsenaultdeclare i64 @"\01_write"(i32, i8*, i64) 372*65b40f27SMatt Arsenaultdeclare i32 @__maskrune(i32, i64) 373*65b40f27SMatt Arsenaultdeclare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) 374*65b40f27SMatt Arsenault 375*65b40f27SMatt Arsenault!llvm.ident = !{!0} 376*65b40f27SMatt Arsenault 377*65b40f27SMatt Arsenault!0 = !{!"clang version 3.5.0 (trunk 204257)"} 378*65b40f27SMatt Arsenault!1 = !{!2, !2, i64 0} 379*65b40f27SMatt Arsenault!2 = !{!"int", !3, i64 0} 380*65b40f27SMatt Arsenault!3 = !{!"omnipotent char", !4, i64 0} 381*65b40f27SMatt Arsenault!4 = !{!"Simple C/C++ TBAA"} 382*65b40f27SMatt Arsenault!5 = !{!3, !3, i64 0} 383*65b40f27SMatt Arsenault!6 = !{!7, !8, i64 8} 384*65b40f27SMatt Arsenault!7 = !{!"", !8, i64 0, !8, i64 8, !3, i64 16} 385*65b40f27SMatt Arsenault!8 = !{!"any pointer", !3, i64 0} 386