<div dir="ltr"><div dir="ltr">Hi, <div><br><div><div>I don't know how lli picks the value for `undef` but I think optimizations eliminate the `undef` value in phi before the execution</div><div>because optimization is allowed to change `undef` to an arbitrary value[0], so `undef` can be replaced by %c.1. </div><div>For example, early-cse optimizes `%c.2` to `%c.2 = phi i32 [ %c.0, %while.end ], [ %c.1, %while.end12 ]`.<br></div><div>(link: <a href="https://godbolt.org/z/e1M7x5z5K" target="_blank">https://godbolt.org/z/e1M7x5z5K</a> )</div><div><br></div><div>[0] <a href="https://llvm.org/docs/LangRef.html#undefined-values" target="_blank">https://llvm.org/docs/LangRef.html#undefined-values</a></div><div> </div><div><div><div>Regards,</div><div>Hideto</div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 16, 2021 at 8:50 PM Hideto Ueno <<a href="mailto:uenoku.tokotoko@gmail.com">uenoku.tokotoko@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">Hi, <div><br><div><div>I don't know how lli picks the value for `undef` but I think optimizations eliminate the `undef` value in phi before the execution</div><div>because optimization is allowed to change `undef` to an arbitrary value[0], so `undef` can be replaced by %c.1. </div><div>For example, early-cse optimizes `%c.2` to `%c.2 = phi i32 [ %c.0, %while.end ], [ %c.1, %while.end12 ]`.<br></div><div>(link: <a href="https://godbolt.org/z/e1M7x5z5K" target="_blank">https://godbolt.org/z/e1M7x5z5K</a> )</div><div><br></div><div>[0] <a href="https://llvm.org/docs/LangRef.html#undefined-values" target="_blank">https://llvm.org/docs/LangRef.html#undefined-values</a></div><div> </div><div><div><div>Regards,</div><div>Hideto</div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 16, 2021 at 6:55 PM Charitha Saumya via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</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"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><font face="times new roman, serif">Hi,</font></div><div><font face="times new roman, serif"><br></font></div><div><font face="times new roman, serif">Consider the following LLVM IR snippet. (also attached)</font></div><div><font face="times new roman, serif"><br></font></div><div><font face="times new roman, serif">the value of %unify.phi is undefined if the loop body (while.body9)  is executed, otherwise it has some specific value (%c.1 is a defined value).</font></div><div><font face="times new roman, serif"><br></font></div><div><font face="times new roman, serif">However when I execute this IR (using lli), the value of %c.2 is always the value of %c.1, even if the loop is executed multiple times.</font></div><div><font face="times new roman, serif"><br></font></div><div><font face="times new roman, serif">What is the reason for this behavior?  how undefined values are handled in LLVM and is this behaviour architecture dependent (depending on how undef is handled in Codegen) ?</font></div><div><font face="times new roman, serif"><br></font></div><div><font face="times new roman, serif">Thanks</font></div><div><font face="times new roman, serif">Charitha</font></div></div></div></div></div></div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div></div>