<div dir="ltr">Moving pass LibCallsShrinkWrap after loop unroll will remove all the calls to exp() in the code shown in the bug.<div><br></div><div>Can you post the code using pow() that LibCallsShrinkWrap cannot handle?</div><div><br></div><div>-Rong<br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 25, 2016 at 4:14 PM, David Li <span dir="ltr"><<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">davidxl added inline comments.<br>
<br>
<br>
================<br>
Comment at: lib/Analysis/ConstantFolding.<wbr>cpp:1971<br>
+<br>
+bool llvm::isMathLibCallNoop(<wbr>CallSite CS, const TargetLibraryInfo *TLI) {<br>
+  Function *F = CS.getCalledFunction();<br>
----------------<br>
</span>efriedma wrote:<br>
<span class="">> davidxl wrote:<br>
> > There are lots of duplicated logic here with LibcallShinkWrap pass. I think the right way to do is let the later passes to clean up the dead calls. This can be done by pushing libcall shrinkwrap later in the pipeline.<br>
</span><span class="">> The case which I originally ran into involves pow(), and LibCallsShrinkWrap can't really deal with that effectively, as far as I can tell.<br>
><br>
> It's probably possible to refactor the logic for some of the other libcalls... but we want to perform the check in isInstructionTriviallyDead to get rid of dead calls as soon as possible, so they don't block other optimizations.<br>
</span>Refactoring is ideal, but it may not be easy to do.  Please add a comment here to point to the refactoring opportunity in the future.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D25970" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D25970</a><br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>