<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi James,<div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 18, 2015, at 7:16 AM, James Molloy <<a href="mailto:james@jamesmolloy.co.uk" class="">james@jamesmolloy.co.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Quentin,<div class=""><br class=""></div><div class="">Nice! I've been looking at making remat more aggressive as you suggested in PR24171, and this looks like a very nice base. In my current hacked up solution, I just added a "finalize()" method to the Spiller interface and had the Spiller track the spills and reloads it inserted, unpicking them later if their operands are available.<br class=""><br class="">Several questions - do you plan on working on this aspect too?</div></div></div></blockquote><div><br class=""></div>Yes, it is my todo list :).</div><div>But if you have a patch to share, that may help!<br class=""><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">I'm pottering away at it but I've never worked on this area of the compiler before and it shows! I'm happy to carry on and even use this as a base if it makes sense, but I'm sure you'd do a better job in half the time.<br class=""><br class="">Secondly:<br class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class="">+    // TODO: This is experimental and in particular, we do not model</span><br style="font-size:13.1999998092651px;line-height:19.7999992370605px" class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class="">+    // the live range splitting done by spilling correctly.</span><br style="font-size:13.1999998092651px;line-height:19.7999992370605px" class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class="">+    // We would need a deep integration with the spiller to do the</span><br style="font-size:13.1999998092651px;line-height:19.7999992370605px" class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class="">+    // right thing here. Anyway, that is still good for early testing.</span></div><div class=""><br class=""></div><div class="">It doesn't look to me like any live-range splitting is being done in the spiller (and I'm not sure why it would be anyway?) - what am I missing here?</div></div></div></blockquote><div><br class=""></div><div>The spiller does “split" live-ranges when it inserts the spill code.</div><div>E.g., consider</div><div><br class=""></div><div>a = something</div><div>…</div><div>= a</div><div><br class=""></div><div>This becomes after spill:</div><div><div>a1 = something</div><div>st a1, @a</div><div>…</div><div>a2 = ld @a</div><div>= a2</div><div><br class=""></div><div>Thus, we split a into three variables: a1, a2, @a. Right now, this is usually not a problem because our splitting mechanism would have inserted the right split points before trying to spill. However, there are cases where this is not accurate:</div><div>1. When rematerialization happens.</div><div>2. When we fold the memory operand directly in the instruction.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">-Quentin</div></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Cheers,</div><div class=""><br class=""></div><div class="">James<br class=""><br class=""></div><div class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class=""><br class=""></span></div><div class=""><span style="font-size:13.1999998092651px;line-height:19.7999992370605px" class=""><br class=""></span></div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Sat, 18 Jul 2015 at 00:08 Quentin Colombet <<a href="mailto:qcolombet@apple.com" class="">qcolombet@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: qcolombet<br class="">
Date: Fri Jul 17 18:04:06 2015<br class="">
New Revision: 242585<br class="">
<br class="">
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D242585-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=AGmK9eZC096Rj3a_H5P4h8l02fgrJGhoZnXj_pXFmuU&e=" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=242585&view=rev</a><br class="">
Log:<br class="">
[RAGreedy] Add an experimental deferred spilling feature.<br class="">
<br class="">
The idea of deferred spilling is to delay the insertion of spill code until the<br class="">
very end of the allocation. A "candidate" to spill variable might not required<br class="">
to be spilled because of other evictions that happened after this decision was<br class="">
taken. The spirit is similar to the optimistic coloring strategy implemented in<br class="">
Preston and Briggs graph coloring algorithm.<br class="">
<br class="">
For now, this feature is highly experimental. Although correct, it would require<br class="">
much more modification to properly model the effect of spilling.<br class="">
<br class="">
Anyway, this early patch helps prototyping this feature.<br class="">
<br class="">
Note: The test case cannot unfortunately be reduced and is probably fragile.<br class="">
<br class="">
Added:<br class="">
    llvm/trunk/test/CodeGen/AArch64/aarch64-deferred-spilling.ll<br class="">
Modified:<br class="">
    llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp<br class="">
<br class="">
Modified: llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp<br class="">
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_RegAllocGreedy.cpp-3Frev-3D242585-26r1-3D242584-26r2-3D242585-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=r9WIlquXsLMpiUTjA6Fbg_v31q1sNV4CvjwafRkVycg&e=" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp?rev=242585&r1=242584&r2=242585&view=diff</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp (original)<br class="">
+++ llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp Fri Jul 17 18:04:06 2015<br class="">
@@ -86,6 +86,14 @@ static cl::opt<bool> EnableLocalReassign<br class="">
              "may be compile time intensive"),<br class="">
     cl::init(false));<br class="">
<br class="">
+static cl::opt<bool> EnableDeferredSpilling(<br class="">
+    "enable-deferred-spilling", cl::Hidden,<br class="">
+    cl::desc("Instead of spilling a variable right away, defer the actual "<br class="">
+             "code insertion to the end of the allocation. That way the "<br class="">
+             "allocator might still find a suitable coloring for this "<br class="">
+             "variable because of other evicted variables."),<br class="">
+    cl::init(false));<br class="">
+<br class="">
 // FIXME: Find a good default for this flag and remove the flag.<br class="">
 static cl::opt<unsigned><br class="">
 CSRFirstTimeCost("regalloc-csr-first-time-cost",<br class="">
@@ -157,6 +165,11 @@ class RAGreedy : public MachineFunctionP<br class="">
     /// Live range will be spilled.  No more splitting will be attempted.<br class="">
     RS_Spill,<br class="">
<br class="">
+<br class="">
+    /// Live range is in memory. Because of other evictions, it might get moved<br class="">
+    /// in a register in the end.<br class="">
+    RS_Memory,<br class="">
+<br class="">
     /// There is nothing more we can do to this live range.  Abort compilation<br class="">
     /// if it can't be assigned.<br class="">
     RS_Done<br class="">
@@ -414,6 +427,7 @@ const char *const RAGreedy::StageName[]<br class="">
     "RS_Split",<br class="">
     "RS_Split2",<br class="">
     "RS_Spill",<br class="">
+    "RS_Memory",<br class="">
     "RS_Done"<br class="">
 };<br class="">
 #endif<br class="">
@@ -536,6 +550,13 @@ void RAGreedy::enqueue(PQueue &CurQueue,<br class="">
     // Unsplit ranges that couldn't be allocated immediately are deferred until<br class="">
     // everything else has been allocated.<br class="">
     Prio = Size;<br class="">
+  } else if (ExtraRegInfo[Reg].Stage == RS_Memory) {<br class="">
+    // Memory operand should be considered last.<br class="">
+    // Change the priority such that Memory operand are assigned in<br class="">
+    // the reverse order that they came in.<br class="">
+    // TODO: Make this a member variable and probably do something about hints.<br class="">
+    static unsigned MemOp = 0;<br class="">
+    Prio = MemOp++;<br class="">
   } else {<br class="">
     // Giant live ranges fall back to the global assignment heuristic, which<br class="">
     // prevents excessive spilling in pathological cases.<br class="">
@@ -2512,13 +2533,23 @@ unsigned RAGreedy::selectOrSplitImpl(Liv<br class="">
     return PhysReg;<br class="">
<br class="">
   // Finally spill VirtReg itself.<br class="">
-  NamedRegionTimer T("Spiller", TimerGroupName, TimePassesIsEnabled);<br class="">
-  LiveRangeEdit LRE(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);<br class="">
-  spiller().spill(LRE);<br class="">
-  setStage(NewVRegs.begin(), NewVRegs.end(), RS_Done);<br class="">
+  if (EnableDeferredSpilling && getStage(VirtReg) < RS_Memory) {<br class="">
+    // TODO: This is experimental and in particular, we do not model<br class="">
+    // the live range splitting done by spilling correctly.<br class="">
+    // We would need a deep integration with the spiller to do the<br class="">
+    // right thing here. Anyway, that is still good for early testing.<br class="">
+    setStage(VirtReg, RS_Memory);<br class="">
+    DEBUG(dbgs() << "Do as if this register is in memory\n");<br class="">
+    NewVRegs.push_back(VirtReg.reg);<br class="">
+  } else {<br class="">
+    NamedRegionTimer T("Spiller", TimerGroupName, TimePassesIsEnabled);<br class="">
+    LiveRangeEdit LRE(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);<br class="">
+    spiller().spill(LRE);<br class="">
+    setStage(NewVRegs.begin(), NewVRegs.end(), RS_Done);<br class="">
<br class="">
-  if (VerifyEnabled)<br class="">
-    MF->verify(this, "After spilling");<br class="">
+    if (VerifyEnabled)<br class="">
+      MF->verify(this, "After spilling");<br class="">
+  }<br class="">
<br class="">
   // The live virtual register requesting allocation was spilled, so tell<br class="">
   // the caller not to allocate anything during this round.<br class="">
<br class="">
Added: llvm/trunk/test/CodeGen/AArch64/aarch64-deferred-spilling.ll<br class="">
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_CodeGen_AArch64_aarch64-2Ddeferred-2Dspilling.ll-3Frev-3D242585-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=3_qiKTwnxWnR9r4GNNN8jMbKby7BGofnH83RUEPPt1o&e=" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/aarch64-deferred-spilling.ll?rev=242585&view=auto</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/test/CodeGen/AArch64/aarch64-deferred-spilling.ll (added)<br class="">
+++ llvm/trunk/test/CodeGen/AArch64/aarch64-deferred-spilling.ll Fri Jul 17 18:04:06 2015<br class="">
@@ -0,0 +1,512 @@<br class="">
+;RUN: llc < %s -mtriple=aarch64--linux-android -regalloc=greedy -enable-deferred-spilling=true -mcpu=cortex-a57 | FileCheck %s --check-prefix=CHECK --check-prefix=DEFERRED<br class="">
+;RUN: llc < %s -mtriple=aarch64--linux-android -regalloc=greedy -enable-deferred-spilling=false -mcpu=cortex-a57 | FileCheck %s --check-prefix=CHECK --check-prefix=REGULAR<br class="">
+<br class="">
+; Check that we do not end up with useless spill code.<br class="">
+;<br class="">
+; Move to the basic block we are interested in.<br class="">
+;<br class="">
+; CHECK: // %if.then.120<br class="">
+;<br class="">
+; REGULAR: str w22, [sp, #[[OFFSET:[0-9]+]]] // 4-byte Folded Spill<br class="">
+; Check that w22 wouldn't need to be spilled since it is never reused.<br class="">
+; REGULAR-NOT: {{[wx]}}22{{,?}}<br class="">
+;<br class="">
+; Check that w22 is used to carry a value through the call.<br class="">
+; DEFERRED-NOT: str {{[wx]}}22,<br class="">
+; DEFERRED: mov {{[wx]}}22,<br class="">
+; DEFERRED-NOT: str {{[wx]}}22,<br class="">
+;<br class="">
+; CHECK:        bl      fprintf<br class="">
+;<br class="">
+; DEFERRED-NOT: ldr {{[wx]}}22,<br class="">
+; DEFERRED: mov {{[wx][0-9]+}}, {{[wx]}}22<br class="">
+; DEFERRED-NOT: ldr {{[wx]}}22,<br class="">
+;<br class="">
+; REGULAR-NOT: {{[wx]}}22{{,?}}<br class="">
+; REGUAL: ldr w22, [sp, #[[OFFSET]]] // 4-byte Folded Reload<br class="">
+;<br class="">
+; End of the basic block we are interested in.<br class="">
+; CHECK:        b<br class="">
+; CHECK: {{[^:]+}}: // %sw.bb.123<br class="">
+<br class="">
+%struct.__sFILE = type { i8*, i32, i32, i32, i32, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, i8*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }<br class="">
+%struct.__sbuf = type { i8*, i64 }<br class="">
+%struct.DState = type { %struct.bz_stream*, i32, i8, i32, i8, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, [256 x i32], i32, [257 x i32], [257 x i32], i32*, i16*, i8*, i32, i32, i32, i32, i32, [256 x i8], [16 x i8], [256 x i8], [4096 x i8], [16 x i32], [18002 x i8], [18002 x i8], [6 x [258 x i8]], [6 x [258 x i32]], [6 x [258 x i32]], [6 x [258 x i32]], [6 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32*, i32*, i32* }<br class="">
+%struct.bz_stream = type { i8*, i32, i32, i32, i8*, i32, i32, i32, i8*, i8* (i8*, i32, i32)*, void (i8*, i8*)*, i8* }<br class="">
+<br class="">
+@__sF = external global [0 x %struct.__sFILE], align 8<br class="">
+@.str = private unnamed_addr constant [20 x i8] c"\0A    [%d: stuff+mf \00", align 1<br class="">
+<br class="">
+declare i32 @fprintf(%struct.__sFILE* nocapture, i8* nocapture readonly, ...)<br class="">
+<br class="">
+declare void @bar(i32)<br class="">
+<br class="">
+declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1)<br class="">
+<br class="">
+define i32 @foo(%struct.DState* %s) {<br class="">
+entry:<br class="">
+  %state = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 1<br class="">
+  %tmp = load i32, i32* %state, align 4<br class="">
+  %cmp = icmp eq i32 %tmp, 10<br class="">
+  %save_i = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 40<br class="">
+  br i1 %cmp, label %if.end.thread, label %if.end<br class="">
+<br class="">
+if.end.thread:                                    ; preds = %entry<br class="">
+  %save_j = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 41<br class="">
+  %save_t = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 42<br class="">
+  %save_alphaSize = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 43<br class="">
+  %save_nGroups = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 44<br class="">
+  %save_nSelectors = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 45<br class="">
+  %save_EOB = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 46<br class="">
+  %save_groupNo = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 47<br class="">
+  %save_groupPos = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 48<br class="">
+  %save_nextSym = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 49<br class="">
+  %save_nblockMAX = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 50<br class="">
+  %save_nblock = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 51<br class="">
+  %save_es = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 52<br class="">
+  %save_N = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 53<br class="">
+  %save_curr = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 54<br class="">
+  %save_zt = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 55<br class="">
+  %save_zn = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 56<br class="">
+  %save_zvec = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 57<br class="">
+  %save_zj = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 58<br class="">
+  %tmp1 = bitcast i32* %save_i to i8*<br class="">
+  call void @llvm.memset.p0i8.i64(i8* %tmp1, i8 0, i64 108, i32 4, i1 false)<br class="">
+  br label %sw.default<br class="">
+<br class="">
+if.end:                                           ; preds = %entry<br class="">
+  %.pre = load i32, i32* %save_i, align 4<br class="">
+  %save_j3.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 41<br class="">
+  %.pre406 = load i32, i32* %save_j3.phi.trans.insert, align 4<br class="">
+  %save_t4.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 42<br class="">
+  %.pre407 = load i32, i32* %save_t4.phi.trans.insert, align 4<br class="">
+  %save_alphaSize5.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 43<br class="">
+  %.pre408 = load i32, i32* %save_alphaSize5.phi.trans.insert, align 4<br class="">
+  %save_nGroups6.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 44<br class="">
+  %.pre409 = load i32, i32* %save_nGroups6.phi.trans.insert, align 4<br class="">
+  %save_nSelectors7.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 45<br class="">
+  %.pre410 = load i32, i32* %save_nSelectors7.phi.trans.insert, align 4<br class="">
+  %save_EOB8.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 46<br class="">
+  %.pre411 = load i32, i32* %save_EOB8.phi.trans.insert, align 4<br class="">
+  %save_groupNo9.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 47<br class="">
+  %.pre412 = load i32, i32* %save_groupNo9.phi.trans.insert, align 4<br class="">
+  %save_groupPos10.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 48<br class="">
+  %.pre413 = load i32, i32* %save_groupPos10.phi.trans.insert, align 4<br class="">
+  %save_nextSym11.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 49<br class="">
+  %.pre414 = load i32, i32* %save_nextSym11.phi.trans.insert, align 4<br class="">
+  %save_nblockMAX12.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 50<br class="">
+  %.pre415 = load i32, i32* %save_nblockMAX12.phi.trans.insert, align 4<br class="">
+  %save_nblock13.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 51<br class="">
+  %.pre416 = load i32, i32* %save_nblock13.phi.trans.insert, align 4<br class="">
+  %save_es14.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 52<br class="">
+  %.pre417 = load i32, i32* %save_es14.phi.trans.insert, align 4<br class="">
+  %save_N15.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 53<br class="">
+  %.pre418 = load i32, i32* %save_N15.phi.trans.insert, align 4<br class="">
+  %save_curr16.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 54<br class="">
+  %.pre419 = load i32, i32* %save_curr16.phi.trans.insert, align 4<br class="">
+  %save_zt17.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 55<br class="">
+  %.pre420 = load i32, i32* %save_zt17.phi.trans.insert, align 4<br class="">
+  %save_zn18.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 56<br class="">
+  %.pre421 = load i32, i32* %save_zn18.phi.trans.insert, align 4<br class="">
+  %save_zvec19.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 57<br class="">
+  %.pre422 = load i32, i32* %save_zvec19.phi.trans.insert, align 4<br class="">
+  %save_zj20.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 58<br class="">
+  %.pre423 = load i32, i32* %save_zj20.phi.trans.insert, align 4<br class="">
+  switch i32 %tmp, label %sw.default [<br class="">
+    i32 13, label %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sw.bb_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=GA0dzIshugxTQ_6REMtroKFSoDdm3Sp0cJ1vxokAVrA&e=" rel="noreferrer" target="_blank" class="">sw.bb</a><br class="">
+    i32 14, label %if.end.sw.bb.65_crit_edge<br class="">
+    i32 25, label %if.end.sw.bb.123_crit_edge<br class="">
+  ]<br class="">
+<br class="">
+if.end.sw.bb.123_crit_edge:                       ; preds = %if.end<br class="">
+  %.pre433 = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 8<br class="">
+  br label %sw.bb.123<br class="">
+<br class="">
+if.end.sw.bb.65_crit_edge:                        ; preds = %if.end<br class="">
+  %bsLive69.phi.trans.insert = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 8<br class="">
+  %.pre426 = load i32, i32* %bsLive69.phi.trans.insert, align 4<br class="">
+  br label %sw.bb.65<br class="">
+<br class="">
+<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sw.bb_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=GA0dzIshugxTQ_6REMtroKFSoDdm3Sp0cJ1vxokAVrA&e=" rel="noreferrer" target="_blank" class="">sw.bb</a>:                                            ; preds = %if.end<br class="">
+  %sunkaddr = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr485 = add i64 %sunkaddr, 8<br class="">
+  %sunkaddr486 = inttoptr i64 %sunkaddr485 to i32*<br class="">
+  store i32 13, i32* %sunkaddr486, align 4<br class="">
+  %bsLive = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 8<br class="">
+  %tmp2 = load i32, i32* %bsLive, align 4<br class="">
+  %cmp28.400 = icmp sgt i32 %tmp2, 7<br class="">
+  br i1 %cmp28.400, label %sw.bb.if.then.29_crit_edge, label %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.33.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=uAEItmqlyQ76t5rGMjq38FDJOVMzaFYGZUYbZh8yQo0&e=" rel="noreferrer" target="_blank" class="">if.end.33.lr.ph</a><br class="">
+<br class="">
+sw.bb.if.then.29_crit_edge:                       ; preds = %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sw.bb_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=GA0dzIshugxTQ_6REMtroKFSoDdm3Sp0cJ1vxokAVrA&e=" rel="noreferrer" target="_blank" class="">sw.bb</a><br class="">
+  %sunkaddr487 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr488 = add i64 %sunkaddr487, 32<br class="">
+  %sunkaddr489 = inttoptr i64 %sunkaddr488 to i32*<br class="">
+  %.pre425 = load i32, i32* %sunkaddr489, align 4<br class="">
+  br label %if.then.29<br class="">
+<br class="">
+<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.33.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=uAEItmqlyQ76t5rGMjq38FDJOVMzaFYGZUYbZh8yQo0&e=" rel="noreferrer" target="_blank" class="">if.end.33.lr.ph</a>:                                  ; preds = %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sw.bb_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=GA0dzIshugxTQ_6REMtroKFSoDdm3Sp0cJ1vxokAVrA&e=" rel="noreferrer" target="_blank" class="">sw.bb</a><br class="">
+  %tmp3 = bitcast %struct.DState* %s to %struct.bz_stream**<br class="">
+  %.pre424 = load %struct.bz_stream*, %struct.bz_stream** %tmp3, align 8<br class="">
+  %avail_in.phi.trans.insert = getelementptr inbounds %struct.bz_stream, %struct.bz_stream* %.pre424, i64 0, i32 1<br class="">
+  %.pre430 = load i32, i32* %avail_in.phi.trans.insert, align 4<br class="">
+  %tmp4 = add i32 %.pre430, -1<br class="">
+  br label %if.end.33<br class="">
+<br class="">
+if.then.29:                                       ; preds = %while.body.backedge, %sw.bb.if.then.29_crit_edge<br class="">
+  %tmp5 = phi i32 [ %.pre425, %sw.bb.if.then.29_crit_edge ], [ %or, %while.body.backedge ]<br class="">
+  %.lcssa393 = phi i32 [ %tmp2, %sw.bb.if.then.29_crit_edge ], [ %add, %while.body.backedge ]<br class="">
+  %sub = add nsw i32 %.lcssa393, -8<br class="">
+  %shr = lshr i32 %tmp5, %sub<br class="">
+  %and = and i32 %shr, 255<br class="">
+  %sunkaddr491 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr492 = add i64 %sunkaddr491, 36<br class="">
+  %sunkaddr493 = inttoptr i64 %sunkaddr492 to i32*<br class="">
+  store i32 %sub, i32* %sunkaddr493, align 4<br class="">
+  %blockSize100k = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 9<br class="">
+  store i32 %and, i32* %blockSize100k, align 4<br class="">
+  %and.off = add nsw i32 %and, -49<br class="">
+  %tmp6 = icmp ugt i32 %and.off, 8<br class="">
+  br i1 %tmp6, label %save_state_and_return, label %if.end.62<br class="">
+<br class="">
+if.end.33:                                        ; preds = %while.body.backedge, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.33.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=uAEItmqlyQ76t5rGMjq38FDJOVMzaFYGZUYbZh8yQo0&e=" rel="noreferrer" target="_blank" class="">if.end.33.lr.ph</a><br class="">
+  %lsr.iv482 = phi i32 [ %tmp4, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.33.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=uAEItmqlyQ76t5rGMjq38FDJOVMzaFYGZUYbZh8yQo0&e=" rel="noreferrer" target="_blank" class="">if.end.33.lr.ph</a> ], [ %lsr.iv.next483, %while.body.backedge ]<br class="">
+  %tmp7 = phi i32 [ %tmp2, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.33.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=uAEItmqlyQ76t5rGMjq38FDJOVMzaFYGZUYbZh8yQo0&e=" rel="noreferrer" target="_blank" class="">if.end.33.lr.ph</a> ], [ %add, %while.body.backedge ]<br class="">
+  %cmp35 = icmp eq i32 %lsr.iv482, -1<br class="">
+  br i1 %cmp35, label %save_state_and_return, label %if.end.37<br class="">
+<br class="">
+if.end.37:                                        ; preds = %if.end.33<br class="">
+  %tmp8 = bitcast %struct.bz_stream* %.pre424 to i8**<br class="">
+  %sunkaddr494 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr495 = add i64 %sunkaddr494, 32<br class="">
+  %sunkaddr496 = inttoptr i64 %sunkaddr495 to i32*<br class="">
+  %tmp9 = load i32, i32* %sunkaddr496, align 4<br class="">
+  %shl = shl i32 %tmp9, 8<br class="">
+  %tmp10 = load i8*, i8** %tmp8, align 8<br class="">
+  %tmp11 = load i8, i8* %tmp10, align 1<br class="">
+  %conv = zext i8 %tmp11 to i32<br class="">
+  %or = or i32 %conv, %shl<br class="">
+  store i32 %or, i32* %sunkaddr496, align 4<br class="">
+  %add = add nsw i32 %tmp7, 8<br class="">
+  %sunkaddr497 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr498 = add i64 %sunkaddr497, 36<br class="">
+  %sunkaddr499 = inttoptr i64 %sunkaddr498 to i32*<br class="">
+  store i32 %add, i32* %sunkaddr499, align 4<br class="">
+  %incdec.ptr = getelementptr inbounds i8, i8* %tmp10, i64 1<br class="">
+  store i8* %incdec.ptr, i8** %tmp8, align 8<br class="">
+  %sunkaddr500 = ptrtoint %struct.bz_stream* %.pre424 to i64<br class="">
+  %sunkaddr501 = add i64 %sunkaddr500, 8<br class="">
+  %sunkaddr502 = inttoptr i64 %sunkaddr501 to i32*<br class="">
+  store i32 %lsr.iv482, i32* %sunkaddr502, align 4<br class="">
+  %sunkaddr503 = ptrtoint %struct.bz_stream* %.pre424 to i64<br class="">
+  %sunkaddr504 = add i64 %sunkaddr503, 12<br class="">
+  %sunkaddr505 = inttoptr i64 %sunkaddr504 to i32*<br class="">
+  %tmp12 = load i32, i32* %sunkaddr505, align 4<br class="">
+  %inc = add i32 %tmp12, 1<br class="">
+  store i32 %inc, i32* %sunkaddr505, align 4<br class="">
+  %cmp49 = icmp eq i32 %inc, 0<br class="">
+  br i1 %cmp49, label %if.then.51, label %while.body.backedge<br class="">
+<br class="">
+if.then.51:                                       ; preds = %if.end.37<br class="">
+  %sunkaddr506 = ptrtoint %struct.bz_stream* %.pre424 to i64<br class="">
+  %sunkaddr507 = add i64 %sunkaddr506, 16<br class="">
+  %sunkaddr508 = inttoptr i64 %sunkaddr507 to i32*<br class="">
+  %tmp13 = load i32, i32* %sunkaddr508, align 4<br class="">
+  %inc53 = add i32 %tmp13, 1<br class="">
+  store i32 %inc53, i32* %sunkaddr508, align 4<br class="">
+  br label %while.body.backedge<br class="">
+<br class="">
+while.body.backedge:                              ; preds = %if.then.51, %if.end.37<br class="">
+  %lsr.iv.next483 = add i32 %lsr.iv482, -1<br class="">
+  %cmp28 = icmp sgt i32 %add, 7<br class="">
+  br i1 %cmp28, label %if.then.29, label %if.end.33<br class="">
+<br class="">
+if.end.62:                                        ; preds = %if.then.29<br class="">
+  %sub64 = add nsw i32 %and, -48<br class="">
+  %sunkaddr509 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr510 = add i64 %sunkaddr509, 40<br class="">
+  %sunkaddr511 = inttoptr i64 %sunkaddr510 to i32*<br class="">
+  store i32 %sub64, i32* %sunkaddr511, align 4<br class="">
+  br label %sw.bb.65<br class="">
+<br class="">
+sw.bb.65:                                         ; preds = %if.end.62, %if.end.sw.bb.65_crit_edge<br class="">
+  %bsLive69.pre-phi = phi i32* [ %bsLive69.phi.trans.insert, %if.end.sw.bb.65_crit_edge ], [ %bsLive, %if.end.62 ]<br class="">
+  %tmp14 = phi i32 [ %.pre426, %if.end.sw.bb.65_crit_edge ], [ %sub, %if.end.62 ]<br class="">
+  %sunkaddr512 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr513 = add i64 %sunkaddr512, 8<br class="">
+  %sunkaddr514 = inttoptr i64 %sunkaddr513 to i32*<br class="">
+  store i32 14, i32* %sunkaddr514, align 4<br class="">
+  %cmp70.397 = icmp sgt i32 %tmp14, 7<br class="">
+  br i1 %cmp70.397, label %if.then.72, label %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.82.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=36t-CVu45Yk75nvWtJEIBzwycL5XvgominlcCMACgjI&e=" rel="noreferrer" target="_blank" class="">if.end.82.lr.ph</a><br class="">
+<br class="">
+<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.82.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=36t-CVu45Yk75nvWtJEIBzwycL5XvgominlcCMACgjI&e=" rel="noreferrer" target="_blank" class="">if.end.82.lr.ph</a>:                                  ; preds = %sw.bb.65<br class="">
+  %tmp15 = bitcast %struct.DState* %s to %struct.bz_stream**<br class="">
+  %.pre427 = load %struct.bz_stream*, %struct.bz_stream** %tmp15, align 8<br class="">
+  %avail_in84.phi.trans.insert = getelementptr inbounds %struct.bz_stream, %struct.bz_stream* %.pre427, i64 0, i32 1<br class="">
+  %.pre431 = load i32, i32* %avail_in84.phi.trans.insert, align 4<br class="">
+  %tmp16 = add i32 %.pre431, -1<br class="">
+  br label %if.end.82<br class="">
+<br class="">
+if.then.72:                                       ; preds = %while.body.68.backedge, %sw.bb.65<br class="">
+  %.lcssa390 = phi i32 [ %tmp14, %sw.bb.65 ], [ %add97, %while.body.68.backedge ]<br class="">
+  %sub76 = add nsw i32 %.lcssa390, -8<br class="">
+  %sunkaddr516 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr517 = add i64 %sunkaddr516, 36<br class="">
+  %sunkaddr518 = inttoptr i64 %sunkaddr517 to i32*<br class="">
+  store i32 %sub76, i32* %sunkaddr518, align 4<br class="">
+  %currBlockNo = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 11<br class="">
+  %tmp17 = load i32, i32* %currBlockNo, align 4<br class="">
+  %inc117 = add nsw i32 %tmp17, 1<br class="">
+  store i32 %inc117, i32* %currBlockNo, align 4<br class="">
+  %verbosity = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 12<br class="">
+  %tmp18 = load i32, i32* %verbosity, align 4<br class="">
+  %cmp118 = icmp sgt i32 %tmp18, 1<br class="">
+  br i1 %cmp118, label %if.then.120, label %sw.bb.123<br class="">
+<br class="">
+if.end.82:                                        ; preds = %while.body.68.backedge, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.82.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=36t-CVu45Yk75nvWtJEIBzwycL5XvgominlcCMACgjI&e=" rel="noreferrer" target="_blank" class="">if.end.82.lr.ph</a><br class="">
+  %lsr.iv480 = phi i32 [ %tmp16, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.82.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=36t-CVu45Yk75nvWtJEIBzwycL5XvgominlcCMACgjI&e=" rel="noreferrer" target="_blank" class="">if.end.82.lr.ph</a> ], [ %lsr.iv.next481, %while.body.68.backedge ]<br class="">
+  %tmp19 = phi i32 [ %tmp14, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.82.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=36t-CVu45Yk75nvWtJEIBzwycL5XvgominlcCMACgjI&e=" rel="noreferrer" target="_blank" class="">if.end.82.lr.ph</a> ], [ %add97, %while.body.68.backedge ]<br class="">
+  %cmp85 = icmp eq i32 %lsr.iv480, -1<br class="">
+  br i1 %cmp85, label %save_state_and_return, label %if.end.88<br class="">
+<br class="">
+if.end.88:                                        ; preds = %if.end.82<br class="">
+  %tmp20 = bitcast %struct.bz_stream* %.pre427 to i8**<br class="">
+  %sunkaddr519 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr520 = add i64 %sunkaddr519, 32<br class="">
+  %sunkaddr521 = inttoptr i64 %sunkaddr520 to i32*<br class="">
+  %tmp21 = load i32, i32* %sunkaddr521, align 4<br class="">
+  %shl90 = shl i32 %tmp21, 8<br class="">
+  %tmp22 = load i8*, i8** %tmp20, align 8<br class="">
+  %tmp23 = load i8, i8* %tmp22, align 1<br class="">
+  %conv93 = zext i8 %tmp23 to i32<br class="">
+  %or94 = or i32 %conv93, %shl90<br class="">
+  store i32 %or94, i32* %sunkaddr521, align 4<br class="">
+  %add97 = add nsw i32 %tmp19, 8<br class="">
+  %sunkaddr522 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr523 = add i64 %sunkaddr522, 36<br class="">
+  %sunkaddr524 = inttoptr i64 %sunkaddr523 to i32*<br class="">
+  store i32 %add97, i32* %sunkaddr524, align 4<br class="">
+  %incdec.ptr100 = getelementptr inbounds i8, i8* %tmp22, i64 1<br class="">
+  store i8* %incdec.ptr100, i8** %tmp20, align 8<br class="">
+  %sunkaddr525 = ptrtoint %struct.bz_stream* %.pre427 to i64<br class="">
+  %sunkaddr526 = add i64 %sunkaddr525, 8<br class="">
+  %sunkaddr527 = inttoptr i64 %sunkaddr526 to i32*<br class="">
+  store i32 %lsr.iv480, i32* %sunkaddr527, align 4<br class="">
+  %sunkaddr528 = ptrtoint %struct.bz_stream* %.pre427 to i64<br class="">
+  %sunkaddr529 = add i64 %sunkaddr528, 12<br class="">
+  %sunkaddr530 = inttoptr i64 %sunkaddr529 to i32*<br class="">
+  %tmp24 = load i32, i32* %sunkaddr530, align 4<br class="">
+  %inc106 = add i32 %tmp24, 1<br class="">
+  store i32 %inc106, i32* %sunkaddr530, align 4<br class="">
+  %cmp109 = icmp eq i32 %inc106, 0<br class="">
+  br i1 %cmp109, label %if.then.111, label %while.body.68.backedge<br class="">
+<br class="">
+if.then.111:                                      ; preds = %if.end.88<br class="">
+  %sunkaddr531 = ptrtoint %struct.bz_stream* %.pre427 to i64<br class="">
+  %sunkaddr532 = add i64 %sunkaddr531, 16<br class="">
+  %sunkaddr533 = inttoptr i64 %sunkaddr532 to i32*<br class="">
+  %tmp25 = load i32, i32* %sunkaddr533, align 4<br class="">
+  %inc114 = add i32 %tmp25, 1<br class="">
+  store i32 %inc114, i32* %sunkaddr533, align 4<br class="">
+  br label %while.body.68.backedge<br class="">
+<br class="">
+while.body.68.backedge:                           ; preds = %if.then.111, %if.end.88<br class="">
+  %lsr.iv.next481 = add i32 %lsr.iv480, -1<br class="">
+  %cmp70 = icmp sgt i32 %add97, 7<br class="">
+  br i1 %cmp70, label %if.then.72, label %if.end.82<br class="">
+<br class="">
+if.then.120:                                      ; preds = %if.then.72<br class="">
+  %call = tail call i32 (%struct.__sFILE*, i8*, ...) @fprintf(%struct.__sFILE* getelementptr inbounds ([0 x %struct.__sFILE], [0 x %struct.__sFILE]* @__sF, i64 0, i64 2), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 %inc117)<br class="">
+  br label %sw.bb.123<br class="">
+<br class="">
+sw.bb.123:                                        ; preds = %if.then.120, %if.then.72, %if.end.sw.bb.123_crit_edge<br class="">
+  %bsLive127.pre-phi = phi i32* [ %.pre433, %if.end.sw.bb.123_crit_edge ], [ %bsLive69.pre-phi, %if.then.72 ], [ %bsLive69.pre-phi, %if.then.120 ]<br class="">
+  %sunkaddr534 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr535 = add i64 %sunkaddr534, 8<br class="">
+  %sunkaddr536 = inttoptr i64 %sunkaddr535 to i32*<br class="">
+  store i32 25, i32* %sunkaddr536, align 4<br class="">
+  %tmp26 = load i32, i32* %bsLive127.pre-phi, align 4<br class="">
+  %cmp128.395 = icmp sgt i32 %tmp26, 7<br class="">
+  br i1 %cmp128.395, label %sw.bb.123.if.then.130_crit_edge, label %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.140.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=ZAr143vNdsTfPypSxR1unQ5gyhMk5a_kWqyGfD9hYw0&e=" rel="noreferrer" target="_blank" class="">if.end.140.lr.ph</a><br class="">
+<br class="">
+sw.bb.123.if.then.130_crit_edge:                  ; preds = %sw.bb.123<br class="">
+  %sunkaddr537 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr538 = add i64 %sunkaddr537, 32<br class="">
+  %sunkaddr539 = inttoptr i64 %sunkaddr538 to i32*<br class="">
+  %.pre429 = load i32, i32* %sunkaddr539, align 4<br class="">
+  br label %if.then.130<br class="">
+<br class="">
+<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.140.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=ZAr143vNdsTfPypSxR1unQ5gyhMk5a_kWqyGfD9hYw0&e=" rel="noreferrer" target="_blank" class="">if.end.140.lr.ph</a>:                                 ; preds = %sw.bb.123<br class="">
+  %tmp27 = bitcast %struct.DState* %s to %struct.bz_stream**<br class="">
+  %.pre428 = load %struct.bz_stream*, %struct.bz_stream** %tmp27, align 8<br class="">
+  %avail_in142.phi.trans.insert = getelementptr inbounds %struct.bz_stream, %struct.bz_stream* %.pre428, i64 0, i32 1<br class="">
+  %.pre432 = load i32, i32* %avail_in142.phi.trans.insert, align 4<br class="">
+  %tmp28 = add i32 %.pre432, -1<br class="">
+  br label %if.end.140<br class="">
+<br class="">
+if.then.130:                                      ; preds = %while.body.126.backedge, %sw.bb.123.if.then.130_crit_edge<br class="">
+  %tmp29 = phi i32 [ %.pre429, %sw.bb.123.if.then.130_crit_edge ], [ %or152, %while.body.126.backedge ]<br class="">
+  %.lcssa = phi i32 [ %tmp26, %sw.bb.123.if.then.130_crit_edge ], [ %add155, %while.body.126.backedge ]<br class="">
+  %sub134 = add nsw i32 %.lcssa, -8<br class="">
+  %shr135 = lshr i32 %tmp29, %sub134<br class="">
+  store i32 %sub134, i32* %bsLive127.pre-phi, align 4<br class="">
+  %origPtr = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 13<br class="">
+  %tmp30 = load i32, i32* %origPtr, align 4<br class="">
+  %shl175 = shl i32 %tmp30, 8<br class="">
+  %conv176 = and i32 %shr135, 255<br class="">
+  %or177 = or i32 %shl175, %conv176<br class="">
+  store i32 %or177, i32* %origPtr, align 4<br class="">
+  %nInUse = getelementptr inbounds %struct.DState, %struct.DState* %s, i64 0, i32 27<br class="">
+  %tmp31 = load i32, i32* %nInUse, align 4<br class="">
+  %add179 = add nsw i32 %tmp31, 2<br class="">
+  br label %save_state_and_return<br class="">
+<br class="">
+if.end.140:                                       ; preds = %while.body.126.backedge, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.140.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=ZAr143vNdsTfPypSxR1unQ5gyhMk5a_kWqyGfD9hYw0&e=" rel="noreferrer" target="_blank" class="">if.end.140.lr.ph</a><br class="">
+  %lsr.iv = phi i32 [ %tmp28, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.140.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=ZAr143vNdsTfPypSxR1unQ5gyhMk5a_kWqyGfD9hYw0&e=" rel="noreferrer" target="_blank" class="">if.end.140.lr.ph</a> ], [ %lsr.iv.next, %while.body.126.backedge ]<br class="">
+  %tmp32 = phi i32 [ %tmp26, %<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__if.end.140.lr.ph_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=pP0XsTAIGOfLqfkec4puBZpRVzngsn1gNVf6qrVKeqY&s=ZAr143vNdsTfPypSxR1unQ5gyhMk5a_kWqyGfD9hYw0&e=" rel="noreferrer" target="_blank" class="">if.end.140.lr.ph</a> ], [ %add155, %while.body.126.backedge ]<br class="">
+  %cmp143 = icmp eq i32 %lsr.iv, -1<br class="">
+  br i1 %cmp143, label %save_state_and_return, label %if.end.146<br class="">
+<br class="">
+if.end.146:                                       ; preds = %if.end.140<br class="">
+  %tmp33 = bitcast %struct.bz_stream* %.pre428 to i8**<br class="">
+  %sunkaddr541 = ptrtoint %struct.DState* %s to i64<br class="">
+  %sunkaddr542 = add i64 %sunkaddr541, 32<br class="">
+  %sunkaddr543 = inttoptr i64 %sunkaddr542 to i32*<br class="">
+  %tmp34 = load i32, i32* %sunkaddr543, align 4<br class="">
+  %shl148 = shl i32 %tmp34, 8<br class="">
+  %tmp35 = load i8*, i8** %tmp33, align 8<br class="">
+  %tmp36 = load i8, i8* %tmp35, align 1<br class="">
+  %conv151 = zext i8 %tmp36 to i32<br class="">
+  %or152 = or i32 %conv151, %shl148<br class="">
+  store i32 %or152, i32* %sunkaddr543, align 4<br class="">
+  %add155 = add nsw i32 %tmp32, 8<br class="">
+  store i32 %add155, i32* %bsLive127.pre-phi, align 4<br class="">
+  %incdec.ptr158 = getelementptr inbounds i8, i8* %tmp35, i64 1<br class="">
+  store i8* %incdec.ptr158, i8** %tmp33, align 8<br class="">
+  %sunkaddr544 = ptrtoint %struct.bz_stream* %.pre428 to i64<br class="">
+  %sunkaddr545 = add i64 %sunkaddr544, 8<br class="">
+  %sunkaddr546 = inttoptr i64 %sunkaddr545 to i32*<br class="">
+  store i32 %lsr.iv, i32* %sunkaddr546, align 4<br class="">
+  %sunkaddr547 = ptrtoint %struct.bz_stream* %.pre428 to i64<br class="">
+  %sunkaddr548 = add i64 %sunkaddr547, 12<br class="">
+  %sunkaddr549 = inttoptr i64 %sunkaddr548 to i32*<br class="">
+  %tmp37 = load i32, i32* %sunkaddr549, align 4<br class="">
+  %inc164 = add i32 %tmp37, 1<br class="">
+  store i32 %inc164, i32* %sunkaddr549, align 4<br class="">
+  %cmp167 = icmp eq i32 %inc164, 0<br class="">
+  br i1 %cmp167, label %if.then.169, label %while.body.126.backedge<br class="">
+<br class="">
+if.then.169:                                      ; preds = %if.end.146<br class="">
+  %sunkaddr550 = ptrtoint %struct.bz_stream* %.pre428 to i64<br class="">
+  %sunkaddr551 = add i64 %sunkaddr550, 16<br class="">
+  %sunkaddr552 = inttoptr i64 %sunkaddr551 to i32*<br class="">
+  %tmp38 = load i32, i32* %sunkaddr552, align 4<br class="">
+  %inc172 = add i32 %tmp38, 1<br class="">
+  store i32 %inc172, i32* %sunkaddr552, align 4<br class="">
+  br label %while.body.126.backedge<br class="">
+<br class="">
+while.body.126.backedge:                          ; preds = %if.then.169, %if.end.146<br class="">
+  %lsr.iv.next = add i32 %lsr.iv, -1<br class="">
+  %cmp128 = icmp sgt i32 %add155, 7<br class="">
+  br i1 %cmp128, label %if.then.130, label %if.end.140<br class="">
+<br class="">
+sw.default:                                       ; preds = %if.end, %if.end.thread<br class="">
+  %tmp39 = phi i32 [ 0, %if.end.thread ], [ %.pre, %if.end ]<br class="">
+  %tmp40 = phi i32 [ 0, %if.end.thread ], [ %.pre406, %if.end ]<br class="">
+  %tmp41 = phi i32 [ 0, %if.end.thread ], [ %.pre407, %if.end ]<br class="">
+  %tmp42 = phi i32 [ 0, %if.end.thread ], [ %.pre408, %if.end ]<br class="">
+  %tmp43 = phi i32 [ 0, %if.end.thread ], [ %.pre409, %if.end ]<br class="">
+  %tmp44 = phi i32 [ 0, %if.end.thread ], [ %.pre410, %if.end ]<br class="">
+  %tmp45 = phi i32 [ 0, %if.end.thread ], [ %.pre411, %if.end ]<br class="">
+  %tmp46 = phi i32 [ 0, %if.end.thread ], [ %.pre412, %if.end ]<br class="">
+  %tmp47 = phi i32 [ 0, %if.end.thread ], [ %.pre413, %if.end ]<br class="">
+  %tmp48 = phi i32 [ 0, %if.end.thread ], [ %.pre414, %if.end ]<br class="">
+  %tmp49 = phi i32 [ 0, %if.end.thread ], [ %.pre415, %if.end ]<br class="">
+  %tmp50 = phi i32 [ 0, %if.end.thread ], [ %.pre416, %if.end ]<br class="">
+  %tmp51 = phi i32 [ 0, %if.end.thread ], [ %.pre417, %if.end ]<br class="">
+  %tmp52 = phi i32 [ 0, %if.end.thread ], [ %.pre418, %if.end ]<br class="">
+  %tmp53 = phi i32 [ 0, %if.end.thread ], [ %.pre419, %if.end ]<br class="">
+  %tmp54 = phi i32 [ 0, %if.end.thread ], [ %.pre420, %if.end ]<br class="">
+  %tmp55 = phi i32 [ 0, %if.end.thread ], [ %.pre421, %if.end ]<br class="">
+  %tmp56 = phi i32 [ 0, %if.end.thread ], [ %.pre422, %if.end ]<br class="">
+  %tmp57 = phi i32 [ 0, %if.end.thread ], [ %.pre423, %if.end ]<br class="">
+  %save_j3.pre-phi469 = phi i32* [ %save_j, %if.end.thread ], [ %save_j3.phi.trans.insert, %if.end ]<br class="">
+  %save_t4.pre-phi467 = phi i32* [ %save_t, %if.end.thread ], [ %save_t4.phi.trans.insert, %if.end ]<br class="">
+  %save_alphaSize5.pre-phi465 = phi i32* [ %save_alphaSize, %if.end.thread ], [ %save_alphaSize5.phi.trans.insert, %if.end ]<br class="">
+  %save_nGroups6.pre-phi463 = phi i32* [ %save_nGroups, %if.end.thread ], [ %save_nGroups6.phi.trans.insert, %if.end ]<br class="">
+  %save_nSelectors7.pre-phi461 = phi i32* [ %save_nSelectors, %if.end.thread ], [ %save_nSelectors7.phi.trans.insert, %if.end ]<br class="">
+  %save_EOB8.pre-phi459 = phi i32* [ %save_EOB, %if.end.thread ], [ %save_EOB8.phi.trans.insert, %if.end ]<br class="">
+  %save_groupNo9.pre-phi457 = phi i32* [ %save_groupNo, %if.end.thread ], [ %save_groupNo9.phi.trans.insert, %if.end ]<br class="">
+  %save_groupPos10.pre-phi455 = phi i32* [ %save_groupPos, %if.end.thread ], [ %save_groupPos10.phi.trans.insert, %if.end ]<br class="">
+  %save_nextSym11.pre-phi453 = phi i32* [ %save_nextSym, %if.end.thread ], [ %save_nextSym11.phi.trans.insert, %if.end ]<br class="">
+  %save_nblockMAX12.pre-phi451 = phi i32* [ %save_nblockMAX, %if.end.thread ], [ %save_nblockMAX12.phi.trans.insert, %if.end ]<br class="">
+  %save_nblock13.pre-phi449 = phi i32* [ %save_nblock, %if.end.thread ], [ %save_nblock13.phi.trans.insert, %if.end ]<br class="">
+  %save_es14.pre-phi447 = phi i32* [ %save_es, %if.end.thread ], [ %save_es14.phi.trans.insert, %if.end ]<br class="">
+  %save_N15.pre-phi445 = phi i32* [ %save_N, %if.end.thread ], [ %save_N15.phi.trans.insert, %if.end ]<br class="">
+  %save_curr16.pre-phi443 = phi i32* [ %save_curr, %if.end.thread ], [ %save_curr16.phi.trans.insert, %if.end ]<br class="">
+  %save_zt17.pre-phi441 = phi i32* [ %save_zt, %if.end.thread ], [ %save_zt17.phi.trans.insert, %if.end ]<br class="">
+  %save_zn18.pre-phi439 = phi i32* [ %save_zn, %if.end.thread ], [ %save_zn18.phi.trans.insert, %if.end ]<br class="">
+  %save_zvec19.pre-phi437 = phi i32* [ %save_zvec, %if.end.thread ], [ %save_zvec19.phi.trans.insert, %if.end ]<br class="">
+  %save_zj20.pre-phi435 = phi i32* [ %save_zj, %if.end.thread ], [ %save_zj20.phi.trans.insert, %if.end ]<br class="">
+  tail call void @bar(i32 4001)<br class="">
+  br label %save_state_and_return<br class="">
+<br class="">
+save_state_and_return:                            ; preds = %sw.default, %if.end.140, %if.then.130, %if.end.82, %if.end.33, %if.then.29<br class="">
+  %tmp58 = phi i32 [ %tmp39, %sw.default ], [ %.pre, %if.then.29 ], [ %.pre, %if.then.130 ], [ %.pre, %if.end.140 ], [ %.pre, %if.end.82 ], [ %.pre, %if.end.33 ]<br class="">
+  %tmp59 = phi i32 [ %tmp40, %sw.default ], [ %.pre406, %if.then.29 ], [ %.pre406, %if.then.130 ], [ %.pre406, %if.end.140 ], [ %.pre406, %if.end.82 ], [ %.pre406, %if.end.33 ]<br class="">
+  %tmp60 = phi i32 [ %tmp41, %sw.default ], [ %.pre407, %if.then.29 ], [ %.pre407, %if.then.130 ], [ %.pre407, %if.end.140 ], [ %.pre407, %if.end.82 ], [ %.pre407, %if.end.33 ]<br class="">
+  %tmp61 = phi i32 [ %tmp43, %sw.default ], [ %.pre409, %if.then.29 ], [ %.pre409, %if.then.130 ], [ %.pre409, %if.end.140 ], [ %.pre409, %if.end.82 ], [ %.pre409, %if.end.33 ]<br class="">
+  %tmp62 = phi i32 [ %tmp44, %sw.default ], [ %.pre410, %if.then.29 ], [ %.pre410, %if.then.130 ], [ %.pre410, %if.end.140 ], [ %.pre410, %if.end.82 ], [ %.pre410, %if.end.33 ]<br class="">
+  %tmp63 = phi i32 [ %tmp45, %sw.default ], [ %.pre411, %if.then.29 ], [ %.pre411, %if.then.130 ], [ %.pre411, %if.end.140 ], [ %.pre411, %if.end.82 ], [ %.pre411, %if.end.33 ]<br class="">
+  %tmp64 = phi i32 [ %tmp46, %sw.default ], [ %.pre412, %if.then.29 ], [ %.pre412, %if.then.130 ], [ %.pre412, %if.end.140 ], [ %.pre412, %if.end.82 ], [ %.pre412, %if.end.33 ]<br class="">
+  %tmp65 = phi i32 [ %tmp47, %sw.default ], [ %.pre413, %if.then.29 ], [ %.pre413, %if.then.130 ], [ %.pre413, %if.end.140 ], [ %.pre413, %if.end.82 ], [ %.pre413, %if.end.33 ]<br class="">
+  %tmp66 = phi i32 [ %tmp48, %sw.default ], [ %.pre414, %if.then.29 ], [ %.pre414, %if.then.130 ], [ %.pre414, %if.end.140 ], [ %.pre414, %if.end.82 ], [ %.pre414, %if.end.33 ]<br class="">
+  %tmp67 = phi i32 [ %tmp49, %sw.default ], [ %.pre415, %if.then.29 ], [ %.pre415, %if.then.130 ], [ %.pre415, %if.end.140 ], [ %.pre415, %if.end.82 ], [ %.pre415, %if.end.33 ]<br class="">
+  %tmp68 = phi i32 [ %tmp51, %sw.default ], [ %.pre417, %if.then.29 ], [ %.pre417, %if.then.130 ], [ %.pre417, %if.end.140 ], [ %.pre417, %if.end.82 ], [ %.pre417, %if.end.33 ]<br class="">
+  %tmp69 = phi i32 [ %tmp52, %sw.default ], [ %.pre418, %if.then.29 ], [ %.pre418, %if.then.130 ], [ %.pre418, %if.end.140 ], [ %.pre418, %if.end.82 ], [ %.pre418, %if.end.33 ]<br class="">
+  %tmp70 = phi i32 [ %tmp53, %sw.default ], [ %.pre419, %if.then.29 ], [ %.pre419, %if.then.130 ], [ %.pre419, %if.end.140 ], [ %.pre419, %if.end.82 ], [ %.pre419, %if.end.33 ]<br class="">
+  %tmp71 = phi i32 [ %tmp54, %sw.default ], [ %.pre420, %if.then.29 ], [ %.pre420, %if.then.130 ], [ %.pre420, %if.end.140 ], [ %.pre420, %if.end.82 ], [ %.pre420, %if.end.33 ]<br class="">
+  %tmp72 = phi i32 [ %tmp55, %sw.default ], [ %.pre421, %if.then.29 ], [ %.pre421, %if.then.130 ], [ %.pre421, %if.end.140 ], [ %.pre421, %if.end.82 ], [ %.pre421, %if.end.33 ]<br class="">
+  %tmp73 = phi i32 [ %tmp56, %sw.default ], [ %.pre422, %if.then.29 ], [ %.pre422, %if.then.130 ], [ %.pre422, %if.end.140 ], [ %.pre422, %if.end.82 ], [ %.pre422, %if.end.33 ]<br class="">
+  %tmp74 = phi i32 [ %tmp57, %sw.default ], [ %.pre423, %if.then.29 ], [ %.pre423, %if.then.130 ], [ %.pre423, %if.end.140 ], [ %.pre423, %if.end.82 ], [ %.pre423, %if.end.33 ]<br class="">
+  %save_j3.pre-phi468 = phi i32* [ %save_j3.pre-phi469, %sw.default ], [ %save_j3.phi.trans.insert, %if.then.29 ], [ %save_j3.phi.trans.insert, %if.then.130 ], [ %save_j3.phi.trans.insert, %if.end.140 ], [ %save_j3.phi.trans.insert, %if.end.82 ], [ %save_j3.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_t4.pre-phi466 = phi i32* [ %save_t4.pre-phi467, %sw.default ], [ %save_t4.phi.trans.insert, %if.then.29 ], [ %save_t4.phi.trans.insert, %if.then.130 ], [ %save_t4.phi.trans.insert, %if.end.140 ], [ %save_t4.phi.trans.insert, %if.end.82 ], [ %save_t4.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_alphaSize5.pre-phi464 = phi i32* [ %save_alphaSize5.pre-phi465, %sw.default ], [ %save_alphaSize5.phi.trans.insert, %if.then.29 ], [ %save_alphaSize5.phi.trans.insert, %if.then.130 ], [ %save_alphaSize5.phi.trans.insert, %if.end.140 ], [ %save_alphaSize5.phi.trans.insert, %if.end.82 ], [ %save_alphaSize5.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_nGroups6.pre-phi462 = phi i32* [ %save_nGroups6.pre-phi463, %sw.default ], [ %save_nGroups6.phi.trans.insert, %if.then.29 ], [ %save_nGroups6.phi.trans.insert, %if.then.130 ], [ %save_nGroups6.phi.trans.insert, %if.end.140 ], [ %save_nGroups6.phi.trans.insert, %if.end.82 ], [ %save_nGroups6.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_nSelectors7.pre-phi460 = phi i32* [ %save_nSelectors7.pre-phi461, %sw.default ], [ %save_nSelectors7.phi.trans.insert, %if.then.29 ], [ %save_nSelectors7.phi.trans.insert, %if.then.130 ], [ %save_nSelectors7.phi.trans.insert, %if.end.140 ], [ %save_nSelectors7.phi.trans.insert, %if.end.82 ], [ %save_nSelectors7.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_EOB8.pre-phi458 = phi i32* [ %save_EOB8.pre-phi459, %sw.default ], [ %save_EOB8.phi.trans.insert, %if.then.29 ], [ %save_EOB8.phi.trans.insert, %if.then.130 ], [ %save_EOB8.phi.trans.insert, %if.end.140 ], [ %save_EOB8.phi.trans.insert, %if.end.82 ], [ %save_EOB8.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_groupNo9.pre-phi456 = phi i32* [ %save_groupNo9.pre-phi457, %sw.default ], [ %save_groupNo9.phi.trans.insert, %if.then.29 ], [ %save_groupNo9.phi.trans.insert, %if.then.130 ], [ %save_groupNo9.phi.trans.insert, %if.end.140 ], [ %save_groupNo9.phi.trans.insert, %if.end.82 ], [ %save_groupNo9.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_groupPos10.pre-phi454 = phi i32* [ %save_groupPos10.pre-phi455, %sw.default ], [ %save_groupPos10.phi.trans.insert, %if.then.29 ], [ %save_groupPos10.phi.trans.insert, %if.then.130 ], [ %save_groupPos10.phi.trans.insert, %if.end.140 ], [ %save_groupPos10.phi.trans.insert, %if.end.82 ], [ %save_groupPos10.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_nextSym11.pre-phi452 = phi i32* [ %save_nextSym11.pre-phi453, %sw.default ], [ %save_nextSym11.phi.trans.insert, %if.then.29 ], [ %save_nextSym11.phi.trans.insert, %if.then.130 ], [ %save_nextSym11.phi.trans.insert, %if.end.140 ], [ %save_nextSym11.phi.trans.insert, %if.end.82 ], [ %save_nextSym11.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_nblockMAX12.pre-phi450 = phi i32* [ %save_nblockMAX12.pre-phi451, %sw.default ], [ %save_nblockMAX12.phi.trans.insert, %if.then.29 ], [ %save_nblockMAX12.phi.trans.insert, %if.then.130 ], [ %save_nblockMAX12.phi.trans.insert, %if.end.140 ], [ %save_nblockMAX12.phi.trans.insert, %if.end.82 ], [ %save_nblockMAX12.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_nblock13.pre-phi448 = phi i32* [ %save_nblock13.pre-phi449, %sw.default ], [ %save_nblock13.phi.trans.insert, %if.then.29 ], [ %save_nblock13.phi.trans.insert, %if.then.130 ], [ %save_nblock13.phi.trans.insert, %if.end.140 ], [ %save_nblock13.phi.trans.insert, %if.end.82 ], [ %save_nblock13.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_es14.pre-phi446 = phi i32* [ %save_es14.pre-phi447, %sw.default ], [ %save_es14.phi.trans.insert, %if.then.29 ], [ %save_es14.phi.trans.insert, %if.then.130 ], [ %save_es14.phi.trans.insert, %if.end.140 ], [ %save_es14.phi.trans.insert, %if.end.82 ], [ %save_es14.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_N15.pre-phi444 = phi i32* [ %save_N15.pre-phi445, %sw.default ], [ %save_N15.phi.trans.insert, %if.then.29 ], [ %save_N15.phi.trans.insert, %if.then.130 ], [ %save_N15.phi.trans.insert, %if.end.140 ], [ %save_N15.phi.trans.insert, %if.end.82 ], [ %save_N15.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_curr16.pre-phi442 = phi i32* [ %save_curr16.pre-phi443, %sw.default ], [ %save_curr16.phi.trans.insert, %if.then.29 ], [ %save_curr16.phi.trans.insert, %if.then.130 ], [ %save_curr16.phi.trans.insert, %if.end.140 ], [ %save_curr16.phi.trans.insert, %if.end.82 ], [ %save_curr16.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_zt17.pre-phi440 = phi i32* [ %save_zt17.pre-phi441, %sw.default ], [ %save_zt17.phi.trans.insert, %if.then.29 ], [ %save_zt17.phi.trans.insert, %if.then.130 ], [ %save_zt17.phi.trans.insert, %if.end.140 ], [ %save_zt17.phi.trans.insert, %if.end.82 ], [ %save_zt17.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_zn18.pre-phi438 = phi i32* [ %save_zn18.pre-phi439, %sw.default ], [ %save_zn18.phi.trans.insert, %if.then.29 ], [ %save_zn18.phi.trans.insert, %if.then.130 ], [ %save_zn18.phi.trans.insert, %if.end.140 ], [ %save_zn18.phi.trans.insert, %if.end.82 ], [ %save_zn18.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_zvec19.pre-phi436 = phi i32* [ %save_zvec19.pre-phi437, %sw.default ], [ %save_zvec19.phi.trans.insert, %if.then.29 ], [ %save_zvec19.phi.trans.insert, %if.then.130 ], [ %save_zvec19.phi.trans.insert, %if.end.140 ], [ %save_zvec19.phi.trans.insert, %if.end.82 ], [ %save_zvec19.phi.trans.insert, %if.end.33 ]<br class="">
+  %save_zj20.pre-phi434 = phi i32* [ %save_zj20.pre-phi435, %sw.default ], [ %save_zj20.phi.trans.insert, %if.then.29 ], [ %save_zj20.phi.trans.insert, %if.then.130 ], [ %save_zj20.phi.trans.insert, %if.end.140 ], [ %save_zj20.phi.trans.insert, %if.end.82 ], [ %save_zj20.phi.trans.insert, %if.end.33 ]<br class="">
+  %nblock.1 = phi i32 [ %tmp50, %sw.default ], [ %.pre416, %if.then.29 ], [ 0, %if.then.130 ], [ %.pre416, %if.end.140 ], [ %.pre416, %if.end.82 ], [ %.pre416, %if.end.33 ]<br class="">
+  %alphaSize.1 = phi i32 [ %tmp42, %sw.default ], [ %.pre408, %if.then.29 ], [ %add179, %if.then.130 ], [ %.pre408, %if.end.140 ], [ %.pre408, %if.end.82 ], [ %.pre408, %if.end.33 ]<br class="">
+  %retVal.0 = phi i32 [ 0, %sw.default ], [ -5, %if.then.29 ], [ -4, %if.then.130 ], [ 0, %if.end.140 ], [ 0, %if.end.82 ], [ 0, %if.end.33 ]<br class="">
+  store i32 %tmp58, i32* %save_i, align 4<br class="">
+  store i32 %tmp59, i32* %save_j3.pre-phi468, align 4<br class="">
+  store i32 %tmp60, i32* %save_t4.pre-phi466, align 4<br class="">
+  store i32 %alphaSize.1, i32* %save_alphaSize5.pre-phi464, align 4<br class="">
+  store i32 %tmp61, i32* %save_nGroups6.pre-phi462, align 4<br class="">
+  store i32 %tmp62, i32* %save_nSelectors7.pre-phi460, align 4<br class="">
+  store i32 %tmp63, i32* %save_EOB8.pre-phi458, align 4<br class="">
+  store i32 %tmp64, i32* %save_groupNo9.pre-phi456, align 4<br class="">
+  store i32 %tmp65, i32* %save_groupPos10.pre-phi454, align 4<br class="">
+  store i32 %tmp66, i32* %save_nextSym11.pre-phi452, align 4<br class="">
+  store i32 %tmp67, i32* %save_nblockMAX12.pre-phi450, align 4<br class="">
+  store i32 %nblock.1, i32* %save_nblock13.pre-phi448, align 4<br class="">
+  store i32 %tmp68, i32* %save_es14.pre-phi446, align 4<br class="">
+  store i32 %tmp69, i32* %save_N15.pre-phi444, align 4<br class="">
+  store i32 %tmp70, i32* %save_curr16.pre-phi442, align 4<br class="">
+  store i32 %tmp71, i32* %save_zt17.pre-phi440, align 4<br class="">
+  store i32 %tmp72, i32* %save_zn18.pre-phi438, align 4<br class="">
+  store i32 %tmp73, i32* %save_zvec19.pre-phi436, align 4<br class="">
+  store i32 %tmp74, i32* %save_zj20.pre-phi434, align 4<br class="">
+  ret i32 %retVal.0<br class="">
+}<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank" class="">llvm-commits@cs.uiuc.edu</a><br class="">
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></body></html>