<div dir="rtl"><div dir="ltr">Created patch in Phabricator with Vadim patch from the other thread.</div><div dir="ltr"><br></div><div dir="ltr">  <a href="http://reviews.llvm.org/D3417">http://reviews.llvm.org/D3417</a><br>

</div><div dir="ltr"><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div dir="ltr">2014-04-17 11:26 GMT+03:00 David Chisnall <span dir="ltr"><<a href="mailto:David.Chisnall@cl.cam.ac.uk" target="_blank">David.Chisnall@cl.cam.ac.uk</a>></span>:</div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 15 Apr 2014, at 22:22, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br>


<br>
> Personally I'm in favor, but others may disagree.  Right now clang inserts calls to llvm.trap(), and that's how we get ud2's when falling off the end of a function with a return type.  That may be the preferred approach for __builtin_unreachable(), since other clients of LLVM at -O0 may actually want it to produce code quickly without inserting any debugging aids.<br>


<br>
</div>It would be trivial to write a pre-codegen pass that would turn all unreachable instructions into calls to llvm.trap and then unreachable.  If a front end wants to guarantee a trap, then it is also free to insert the trap (and it will be deleted later if the basic block becomes truly unreachable).<br>


<br>
I'd be somewhat hesitant about making it the default behaviour, because machine instruction passes may want to do some reordering of instructions and once they've got an instruction that is guaranteed to trap then it enforces hard constraints on flow control.  To preserve this, you'd need to keep it as a pseudo right up until the very last stage of compilation, which adds some complexity to back ends.<br>


<span class="HOEnZb"><font color="#888888"><br>
David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br></div>