<div dir="ltr"><div dir="ltr">Hi Florian,<div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 19, 2021 at 3:46 PM Florian Hahn <<a href="mailto:florian_hahn@apple.com">florian_hahn@apple.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="auto"><div dir="ltr"></div><div dir="ltr"><br></div><div dir="ltr"><br><blockquote type="cite">On 19 Aug 2021, at 11:01, Rohit Aggarwal via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr">Hi All,<div><br></div><div>Thanks Florian for response.</div><div><br></div><div><div dir="ltr"><div> Adding more details to the issue:</div><div><ul><li>I revert the commit  <a href="https://github.com/llvm/llvm-project/commit/2fd3037ac615643fe8058292d2b89bb19a49cb2f#" target="_blank">[ConstantFold] Allow propagation of poison for and/or i1</a> then it is working fine.</li><li>In this commit, a check is removed to stop the constantfold of instruction to poison value incase of integer ADD or OR instruction if either of operands are poison.</li><li>Using both release branch and commit reverted branch, a poison value is generated by a shift left instruction due to overflow (UB is present) </li></ul></div></div></div></div></div></blockquote><div><br></div>Ok so it sounds like this is the reason for the different output and the transformation is correct.</div></blockquote><div>    >> Yes, this poison which is generated is handled differently in llvm-trunk and reverted commit code down the pipeline. </div><div> </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="auto"><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div dir="ltr"><ul><li>Now in the release branch, this poison value is propagated down to 'or' inst. and  is constantfolds %or = or  true poison  -> poison  </li></ul></div></div></div></blockquote></div></blockquote><div><br></div><div><ul><li>where as in the reverted code,  %or = or  true poison  -> true</li></ul></div><div>  >> Here is the main reason, where the problem started </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="auto"><div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><ul><li>In the release branch, the poison value propagates to its uses</li><li>There is a store instruction which now has a poison value</li><li>In visitStoreInst, store instruction got removed due to poison value</li><li>But in revert branch, store is not getting remove as it has defined value</li></ul><div>See the below diff for more clarity.</div><div><img alt="image.png" width="472" height="255"><br></div></div></div><div><br></div></div></div></div></blockquote></div></div></blockquote><div>Reattaching the  image. PFA for more clarity.</div><div><br></div><div>Thanks,</div><div>Rohit Aggarwal</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="auto"><div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div><div></div></div></div></div></blockquote></div></div></blockquote></div></div>

<br>
<span><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(34,34,34);vertical-align:baseline;white-space:pre-wrap;background-color:yellow">Disclaimer:- </span><span style="background-color:rgb(255,255,255);color:rgb(34,34,34);font-size:small">This </span><span style="background-color:rgb(255,255,255);color:rgb(34,34,34);font-size:small">footer text is to convey that this email is sent by one of the </span><span style="background-color:rgb(255,255,255);color:rgb(34,34,34);font-size:small">users of IITH. So, do not mark it as SPAM.</span></p></span>