<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=""><div class="">Luckily someone already did the work writing a bunch of examples down:</div><div class=""><a href="http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html" class="">http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html</a></div><div class=""><br class=""></div><div class="">And +1 for keeping this on-topic on how to implement poison.</div><div class=""><br class=""></div><div class="">- Matthias</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Jun 16, 2017, at 3:19 PM, John Regehr via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">I'll repeat that open-ended requests would that end up generating lots of work for other people probably aren't going to get great results here.<br class=""><br class="">John<br class=""><br class=""><br class=""><br class="">On 6/16/17 4:03 PM, Peter Lawrence via llvm-dev wrote:<br class=""><blockquote type="cite" class="">All,<br class="">     These discussions seem to be based on the premise that there is a<br class="">need for the compiler to exploit undefined behavior for performance<br class="">optimization reasons.<br class=""><br class="">So far the only beneficial optimization I am aware of that relies on some<br class="">form of “undefined” is Dan Gohman’s original project for LP64 targets of<br class="">promoting i32 induction variables to i64 and hoisting sign-extension out<br class="">of the loop.<br class=""><br class="">But “undef” / “poison” never appears in either the original or the transformed<br class="">IR for these types of loops, instead properties of “+nsw” are used to<br class="">justify the transformation.  The transformation does not just fall out because<br class="">we’ve done a good job at defining “undef” / “poison” IR nodes.<br class=""><br class="">So I’d like to see some concrete examples of where the compiler can<br class="">do useful optimization based on “undef” / “poison” appearing explicitly<br class="">In the IR,  finding some would surely advance this discussion.<br class=""><br class=""><br class=""><br class="">Peter Lawrence.<br class=""><br class=""><br class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""><br class=""></blockquote>_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></div></blockquote></div><br class=""></body></html>