<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 19, 2016, at 7:06 AM, Alexandre Isoard 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 dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><br class="Apple-interchange-newline"><br class=""><div class="gmail_quote">On Tue, Oct 18, 2016 at 9:12 PM, Sanjoy Das via llvm-dev<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Hi Krzysztof,<br class=""><br class="">freeze(poison) is different from undef today, in the sense that it is an instruction that produces some random, but fixed bit pattern.<br class=""><br class="">E.g. today in<br class=""><br class=""> <span class="Apple-converted-space"> </span>%x = undef<br class=""> <span class="Apple-converted-space"> </span>%y = xor %x, %x<br class=""><br class="">we can fold %y to undef since each use of %x can independently see some arbitrary (up to the compiler / environment) bit pattern.<br class=""></blockquote><div class="">We can also fold it to %y = 0 if we want, isn't it? </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><br class="">But in the new proposal, in:<br class=""><br class=""> <span class="Apple-converted-space"> </span>%x = freeze(poison)<br class=""> <span class="Apple-converted-space"> </span>%y = xor %x, %x<br class=""><br class="">that is no longer allowed (%y _has_ to be 0) -- all uses of %x will see some garbage, but fixed bit pattern.<br class=""></blockquote><div class="">What is the real motivation behind introducing a new kind of undef?</div><div class=""><br class=""></div><div class="">I remember having read that undef does not obey all the rules of SSA. That is, a variable %x set to undef is in fact not initialized at it's definition but at each of it's use instead. Which is an argument I never quite understood, because the nature of undef is that we can safely restrict ourself to a classic aproach where %x has the same value at each use (as the compiler is free to assign any value to any undef it encounter). This does not exploit all of the freedom offered by undef, but is always valid, isn't it?</div></div></div></div></div></blockquote><div><br class=""></div><div>Even if you wanted to do this (use the same “undef” for every use of %x), how can you do since undef is a constant? For example:</div><div><br class=""></div><div>  %y = xor %x, %x<br class=""></div><div>and:</div><div>  %y = xor %x, %z<br class=""></div><div><br class=""></div><div>If %x and %z are undef you can’t differentiate these anymore:</div><div><br class=""></div><div><div>  %y = xor undef, undef</div><div class=""><br class=""></div><div class="">— </div><div class="">Mehdi</div><div class=""><br class=""></div></div></div></body></html>