<div dir="ltr"><div>Well, I don't know much about what Clang will actually do here, but I'll follow your advice and add -O0 and pipe to opt -S -mem2reg. I'll also add a test case in LLVM (test/CodeGen/PowerPC) that will test that after opt and llc, we generate the desired code for these builtins.<br><br></div>Thanks Sanjay and Bjorn.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 28, 2016 at 6:53 PM, Sanjay Patel <span dir="ltr"><<a href="mailto:spatel@rotateright.com" target="_blank">spatel@rotateright.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">spatel added a comment.<br>
<br>
In <a href="https://reviews.llvm.org/D24397#555552" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24397#555552</a>, @nemanjai wrote:<br>
<br>
> In <a href="https://reviews.llvm.org/D24397#555470" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24397#555470</a>, @spatel wrote:<br>
><br>
> > Having a clang regression/unit test that depends on optimizer behavior is generally viewed as wrong. Can the tests be split into front-end (clang) tests and separate tests for the IR optimizer? Both x86 and AArch64 have done something like that in the last few months for testing of builtins/intrinsics.<br>
><br>
><br>
> Yeah, that sounds reasonable. I'll remove the -O2 from the test case and remove the checks for the select instructions. That's really the only major difference. So am I to understand the nsw/nuw flags will not be added without -O2 and the aforementioned changes will suffice?<br>
<br>
<br>
Changing to -O0 or using -disable-llvm-optzns should keep the clang tests from breaking due to underlying changes in the IR optimizer. That may lead to a lot of bloat though. In <a href="http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160307/152324.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/cfe-commits/Week-of-<wbr>Mon-20160307/152324.html</a> , it was viewed as ok, if not ideal, to pipe the clang IR output using "opt -S -mem2reg".<br>
<br>
Note that clang itself uses APIs like IRBuilder::CreateNUWSub(), so I think it's possible to see no-wrap IR even without the IR optimizer kicking in (but probably isn't a concern in this case?).<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D24397" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24397</a><br>
<br>
<br>
<br>
</blockquote></div><br></div>