<div dir="ltr">To be more precise, the verifier require all the user of preallocated.arg to be a preallocated.setup, and requires the def of the preallocated.setup's argument to be a preallocated.arg.<div><br></div><div>This allows to delete all users of preallocated.setup (aka. all preallocated.arg), but not to RAUW (with neither undef nor none).</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 17, 2020 at 1:40 PM Alexandre Isoard <<a href="mailto:alexandre.isoard@gmail.com">alexandre.isoard@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Seems you are right, looks like:<div><br></div><div>@llvm.call.preallocated.arg(token, i32)<br></div><div><br></div><div>requires its token to be from a</div><div><br></div><div>@llvm.call.preallocated.setup(i32)<br></div><div><br></div><div>Those are the only token related check in the verifier that are not EHPad.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 17, 2020 at 1:07 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div>
<p class="MsoNormal">Huh, I really thought undef tokens weren’t legal; I’ve never seen one.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I’m still concerned about verifier checks for specific intrinsics; in some cases, we expect that the operand is some specific instruction/intrinsic, not none/undef.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> Alexandre Isoard <<a href="mailto:alexandre.isoard@gmail.com" target="_blank">alexandre.isoard@gmail.com</a>> <br>
<b>Sent:</b> Wednesday, June 17, 2020 1:01 PM<br>
<b>To:</b> Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>><br>
<b>Cc:</b> David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>>; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [EXT] Re: [llvm-dev] InstCombine doesn't delete instructions with token<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I did not observe any assertion. In addition, the documentation (<a href="https://llvm.org/docs/LangRef.html#undefined-values" target="_blank">https://llvm.org/docs/LangRef.html#undefined-values</a>) says:<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> The string ‘<span><span style="font-size:10pt;font-family:"Courier New"">undef</span></span>’ can be used anywhere a constant is expected, and indicates that the user of the value may receive an unspecified bit-pattern.
 Undefined values may be of any type (other than ‘<span><span style="font-size:10pt;font-family:"Courier New"">label</span></span>’ or ‘<span><span style="font-size:10pt;font-family:"Courier New"">void</span></span>’)
 and be used anywhere a constant is permitted.  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Either way, using a 'none' token instead is fine.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">For an example: <a href="https://godbolt.org/z/MowxS_" target="_blank">https://godbolt.org/z/MowxS_</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Where the following input:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:blue">define</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">@foo</span><span style="font-family:"Consolas,",serif;color:black">() #</span><span style="font-family:"Consolas,",serif;color:rgb(9,134,88)">0</span><span style="font-family:"Consolas,",serif;color:black"> {<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:maroon">entry:</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    unreachable<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:maroon">exit:</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">%tok</span><span style="font-family:"Consolas,",serif;color:black"> = call </span><span style="font-family:"Consolas,",serif;color:teal">token</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">@llvm.bar</span><span style="font-family:"Consolas,",serif;color:black">()<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    call </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">@llvm.foo</span><span style="font-family:"Consolas,",serif;color:black">(</span><span style="font-family:"Consolas,",serif;color:teal">token</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">%tok</span><span style="font-family:"Consolas,",serif;color:black">)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    call </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">@llvm.foo</span><span style="font-family:"Consolas,",serif;color:black">(</span><span style="font-family:"Consolas,",serif;color:teal">token</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(221,0,0)">none</span><span style="font-family:"Consolas,",serif;color:black">)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    call </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(0,17,136)">@llvm.foo</span><span style="font-family:"Consolas,",serif;color:black">(</span><span style="font-family:"Consolas,",serif;color:teal">token</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(221,0,0)">undef</span><span style="font-family:"Consolas,",serif;color:black">)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">    ret </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">}<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">attributes #</span><span style="font-family:"Consolas,",serif;color:rgb(9,134,88)">0</span><span style="font-family:"Consolas,",serif;color:black"> = { </span><span style="font-family:"Consolas,",serif;color:blue">norecurse</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:blue">nounwind</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:blue">readnone</span><span style="font-family:"Consolas,",serif;color:black"> }<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black"><u></u> <u></u></span></p>
</div>
<p class="MsoNormal">Will produce after instcombine:<u></u><u></u></p>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black"><u></u> <u></u></span></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:green">; Function Attrs: norecurse nounwind readnone</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:blue">define</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">@foo</span><span style="font-family:"Consolas,",serif;color:black">() </span><span style="font-family:"Consolas,",serif;color:rgb(9,134,88)">#0</span><span style="font-family:"Consolas,",serif;color:black"> {<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:teal">entry:</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">  </span><span style="font-family:"Consolas,",serif;color:blue">unreachable</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:teal">exit:</span><span style="font-family:"Consolas,",serif;color:black">                                             </span><span style="font-family:"Consolas,",serif;color:green">; No predecessors!</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">  </span><span style="font-family:"Consolas,",serif;color:rgb(205,49,49)">%</span><span style="font-family:"Consolas,",serif;color:blue">tok</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:rgb(205,49,49)">=</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">call</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">token</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">@llvm.bar</span><span style="font-family:"Consolas,",serif;color:black">()<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">  </span><span style="font-family:"Consolas,",serif;color:blue">ret</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">void</span><span style="font-family:"Consolas,",serif;color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black">}<u></u><u></u></span></p>
</div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:teal">attributes #0 =</span><span style="font-family:"Consolas,",serif;color:black"> { </span><span style="font-family:"Consolas,",serif;color:teal">norecurse</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">nounwind</span><span style="font-family:"Consolas,",serif;color:black"> </span><span style="font-family:"Consolas,",serif;color:teal">readnone</span><span style="font-family:"Consolas,",serif;color:black"> }<u></u><u></u></span></p>
</div>
</div>
<div>
<p class="MsoNormal" style="background:rgb(255,255,254)"><span style="font-family:"Consolas,",serif;color:black"><u></u> <u></u></span></p>
</div>
<p class="MsoNormal">Where the remaining call is a wasted instruction.<u></u><u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Jun 17, 2020 at 12:28 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">There’s no such thing as an “undef” token; you’ll get an assertion if you try to create one.  There is “none”, but the verifier will fail in some cases if it sees a “none” token.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">In terms of actually erasing instructions, it’s specifically EHPad we can’t erase: unwind edges are required to have an EHPad instruction, so erasing them requires modifying the
 block’s predecessors.  We don’t need to keep an intrinsic call with no uses that produces a token result.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> Alexandre Isoard <<a href="mailto:alexandre.isoard@gmail.com" target="_blank">alexandre.isoard@gmail.com</a>>
<br>
<b>Sent:</b> Tuesday, June 16, 2020 10:25 PM<br>
<b>To:</b> Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>><br>
<b>Cc:</b> David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>>;
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [EXT] Re: [llvm-dev] InstCombine doesn't delete instructions with token<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Yes, it's still respected in this case, as the only instructions that will be deleted have been RAUW with undef.<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Originally, all instructions where RAUW but only non-EHPad were deleted (that means EHPad were RAUW but not deleted).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Then it was later patched by not RAUW token instructions and now not deleting EHPad nor token instructions.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">My assumption is that the instructions we wanted to avoid RAUW were only the EHPad, not all the token instructions.<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal">So I'm changing it into RAUW all non-EHPad instructions and delete all non-EHPad instructions.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">But maybe my assumption is incorrect and there are token instructions that are non-EHPad that we want to skip too?<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Jun 16, 2020 at 7:55 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal">In general, we have to RAUW before we erase an instruction in dead code; even if we know the instruction is dead, it could still have uses in other dead code.  If an instruction
 still has uses, we can’t erase it.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>>
<b>On Behalf Of </b>Alexandre Isoard via llvm-dev<br>
<b>Sent:</b> Tuesday, June 16, 2020 7:33 PM<br>
<b>To:</b> David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>>; llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [EXT] [llvm-dev] InstCombine doesn't delete instructions with token<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hello David,<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I am having an issue with some custom intrinsics that return a token value: InstCombine deletes the users of the token but not the instruction that creates the token itself. The
 IR is still valid but it's wasted.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The source of the issue is coming from an old patch of yours:<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">commit 7204cff0a121ebc770cf81f7f94679ae7324daae<br>
Author: David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>><br>
Date:   Fri Nov 6 21:26:32 2015 +0000<br>
<br>
    [InstCombine] Don't RAUW tokens with undef<br>
    <br>
    Let SimplifyCFG remove unreachable BBs which define token instructions.<br>
    <br>
    llvm-svn: 252343<br>
<br>
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp<br>
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp<br>
@@ -3012,7 +3012,7 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL,<br>
     while (EndInst != BB->begin()) {<br>
       // Delete the next to last instruction.<br>
       Instruction *Inst = &*--EndInst->getIterator();<br>
-      if (!Inst->use_empty())<br>
+      if (!Inst->use_empty() && !Inst->getType()->isTokenTy())<br>
         Inst->replaceAllUsesWith(UndefValue::get(Inst->getType())); <br>
-      if (Inst->isEHPad()) { <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">+      if (Inst->isEHPad() || Inst->getType()->isTokenTy()) { <br>
         EndInst = Inst;<br>
@@ -3022,7 +3022,8 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL,<br>
         ++NumDeadInst;<br>
         MadeIRChange = true;<br>
       }<br>
       Inst->eraseFromParent();<br>
     }<br>
   }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I believe the goal was to avoid RAUW the EHPad (as we don't delete the associated EHRet) and not skip all of the token instructions. At least you only test on EHPad in the associated
 unit test.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">In which case we could instead do:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">     while (EndInst != BB->begin()) {<br>
       // Delete the next to last instruction.<br>
       Instruction *Inst = &*--EndInst->getIterator();<br>
-      if (!Inst->use_empty())<br>
+      if (!Inst->use_empty() && !Inst->isEHPad())<br>
         Inst->replaceAllUsesWith(UndefValue::get(Inst->getType())); <br>
       if (Inst->isEHPad()) { <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">         EndInst = Inst;<br>
@@ -3022,7 +3022,8 @@ static bool prepareICWorklistFromFunction(Function &F, const DataLayout &DL,<br>
         ++NumDeadInst;<br>
         MadeIRChange = true;<br>
       }<br>
       Inst->eraseFromParent();<br>
     }<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Is my assumption correct?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Note that the code is now in llvm::removeAllNonTerminatorAndEHPadInstructions of llvm/lib/Transforms/Utils/Local.cpp<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><b>Alexandre Isoard</b><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><b>Alexandre Isoard</b><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><b>Alexandre Isoard</b><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><b>Alexandre Isoard</b><br></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><b>Alexandre Isoard</b><br></div></div>