<div dir="ltr"><div style="font-size:12.8px">Hi David and Pirama,     <span style="font-size:12.8px">(first sent off-list, but resending to list)</span></div><div style="font-size:12.8px">  Thank you for your quick responses. I've now successfully added IR-based PGO to LDC; it's almost trivial. The only thing needed (on LLVM side) was</div><div style="font-size:12.8px">```</div><div style="font-size:12.8px">// For generating pgo info</div><div style="font-size:12.8px"><div>    builder.EnablePGOInstrGen = true;</div><div>    builder.PGOInstrGen = <outputfilename>;<br></div><div>```</div><div><br></div><div>```</div><div>// For using pgo profile</div><div>    builder.PGOInstrUse = <inputfilename>;<br></div></div><div style="font-size:12.8px">````</div><div style="font-size:12.8px">where `builder` is the PassManagerBuilder.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This works well on Linux and macOS, however for a Windows target triple, it does not work. The "instrprof" pass fails in that case.</div><div style="font-size:12.8px">I have attached the failing testcase, that fails with "opt -instrprof crash.ll":</div><div style="font-size:12.8px">```</div><div style="font-size:12.8px"><div>>  opt crash.ll -instrprof</div><div><br></div><div>comdat global value has private linkage</div><div>[1 x i64]* @__profc_luke</div><div>comdat global value has private linkage</div><div>[1 x i64]* @__profc_cold</div><div>comdat global value has private linkage</div><div>[1 x i64]* @__profc_main</div><div>comdat global value has private linkage</div><div>[2 x i64]* @__profc__Dmain</div><div>LLVM ERROR: Broken module found, compilation aborted!</div></div><div style="font-size:12.8px">```</div><div style="font-size:12.8px">I've obtained the IR by compiling the D code with `-print-before-all`, and crash.ll is the IR before the instrprof pass.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Now, before I file this as a bug, I want to make sure that I didn't do anything wrong in setting up IR-based PGO. Are there any other steps needed? FYI: we don't use a special pipeline setup, just the default what LLVM gives us: <a href="https://github.com/ldc-developers/ldc/blob/2645ae8645c70d4dc01988f85482d1b85f82fc14/gen/optimizer.cpp#L235-L331" target="_blank">https://github.com/ldc-<wbr>developers/ldc/blob/<wbr>2645ae8645c70d4dc01988f85482d1<wbr>b85f82fc14/gen/optimizer.cpp#<wbr>L235-L331</a> .</div><div style="font-size:12.8px">(somehow "opt -instr-prof-gen" does work for Windows...)</div><div style="font-size:12.8px"><br></div><div><span style="font-size:12.8px">As Pirama suggested, I tested with Clang and there it does work with a Windows triple. (<a href="https://godbolt.org/g/h5CMJx">https://godbolt.org/g/h5CMJx</a>)</span><br></div><div><span style="font-size:12.8px"><br></span></div><div style="font-size:12.8px">Thanks a lot,</div><div style="font-size:12.8px">Kind regards,</div><div style="font-size:12.8px">  Johan</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 28, 2017 at 7:02 AM, Xinliang David Li <span dir="ltr"><<a href="mailto:xinliangli@gmail.com" target="_blank">xinliangli@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">-fprofile-use and -fprofile-instr-use can actually be used interchangeably for front-end and IR based PGO.  The difference is that -fprofile-use=<> also takes a directory as the argument.<span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div><div>David</div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 27, 2017 at 7:46 PM, Pirama Arumuga Nainar via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><a href="https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization" target="_blank">https://clang.llvm.org/docs/Us<wbr>ersManual.html#profile-guided-<wbr>optimization</a> is the documentation for Clang's PGO.  It doesn't explicitly state which flags map to frontend and IR-based instrumentation.<div><div><br></div><div>* -fprofile-generate and -fprofile-use are for IR-based instrumentation and profile use.</div><div>* -fprofile-instr-generate and -fprofile-instr-use are for frontend-based instrumentation and profile use.</div><div>* -fprofile-sample-use is to use sparse profiles from hardware-counter-based profiles.</div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-4342639936146693722h5">On Wed, Dec 27, 2017 at 2:37 PM, Johan Engelen via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-4342639936146693722h5"><div dir="ltr"><span style="font-size:12.8px">Hello all,</span><div style="font-size:12.8px">  A while ago, I implemented frontend-based PGO in LDC (very similar to Clang's) and now I'd like to add IR-based PGO. I want the commandline interface to be the same (or very similar) to Clang's, but I am having trouble finding the current state of Clang's PGO commandline flags (and their meaning related to Clang/LLVM-IR PGO).</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Can you give me a pointer to where I can find this, or perhaps give me a brief overview of the current flags and how to select whether to use frontend-based or IR-based PGO ?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Thanks a lot,</div><div style="font-size:12.8px">  Johan</div></div>
<br></div></div>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>