<div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 17, 2019 at 11:22 AM David Greene via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">hameeza ahmed via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> writes:<br>
<br>
> Hello,<br>
> I want to study the individual O3 optimizations. For this I am using<br>
> following commands, but unable to replicate O3 behavior.<br>
><br>
> 1. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O1<br>
> -Xclang -disable-llvm-passes -emit-llvm -S vecsum.c -o vecsum-noopt.ll<br>
><br>
> 2. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O3<br>
> -mllvm -debug-pass=Arguments -emit-llvm -S vecsum.c<br>
><br>
> 3. Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/opt<br>
> <optimization sequence obtained in step 2> -S vecsum-noopt.ll -S -o<br>
> o3-chk.ll<br>
><br>
> Why the IR obtained by above step i.e individual O3 sequences, is not same<br>
> when O3 is passed?<br>
><br>
> Where I am doing mistake?<br></blockquote><div><br></div><div>If you could provide the full reproducer, it could help to debug this.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
I think you need to turn off LLVM optimizations when doing the<br>
-emit-llvm dump. Something like this:<br>
<br>
Documents/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang -O3 \<br>
-mllvm -debug-pass=Arguments -Xclang -disable-llvm-optzns -emit-llvm \<br>
-S vecsum.c<br>
<br>
Otherwise you are effectively running the O3 pipeline twice, as clang<br>
will emit LLVM IR after optimization, not before (this confused me too<br>
when I first tried it).<br></blockquote><div><br></div><div>This is the common pitfall indeed!</div><div>I think they are doing it correctly in step 1 though by including: `-Xclang -disable-llvm-passes`.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
That said, I'm not sure you will get the same IR out of opt as with<br>
clang -O3 even with the above. For example, clang sets<br>
TargetTransformInfo for the pass pipeline and the detailed information<br>
it uses may or may not be transmitted via the IR it dumps out. I have<br>
not personally tried to do this kind of thing in a while.</blockquote><div><br></div><div>I struggled as well to setup TTI and TLI the same way clang does :(</div><div>It'd be nice to revisit our PassManagerBuilder setup and the opt integration to provide reproducibility (maybe could be a starter project for someone?).</div><div><br></div><div>-- </div><div>Mehdi</div><div><br></div></div></div></div>