<div dir="ltr">Looks like I forgot to reply all so my reply and our follow on conversation got lost. Copied it below. Basically, this is expected because -emit-llvm only emits the result of the regular LTO link, which is typically empty for a normal ThinLTO build.<div><br></div><div>Teresa<br><div><br></div><div><div dir="ltr" class="gmail_attr">On Sun, Jul 12, 2020 at 10:16 AM Teresa Johnson <<a href="mailto:tejohnson@google.com">tejohnson@google.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="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 12, 2020 at 10:05 AM Stephan Z <<a href="mailto:stephan.yichao.zhao@gmail.com" target="_blank">stephan.yichao.zhao@gmail.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="ltr">Hi Teresa,<div><br></div><div>Thank you for your quick response. </div><div><br></div><div>I have a program that analyzes the bitcode generated from "<span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">-flto </span><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">-Wl,-plugin-opt,emit-llvm</span>" to analyze code across modules. </div><div><br></div><div>"-flto=thin <span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">-Wl,-plugin-opt,save-</span><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">temps" dumps those bc files for each module. This does not provide a bitcode for all modules.</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px"><br></span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">I was trying ThinLTO because LTO uses too much memory and is slow, and </span>ThinLTO blog shows it uses less memory and time.</div><div>With ThinTLO, do we still have a way to get the entire bitcode after link? This allows reusing my program. </div><div>Or does ThinLTO recommend other ways to do cross module analysis?<br></div></div></blockquote><div><br></div><div>ThinLTO is fast and scalable because it does not combine all bitcode into a single module. It does whole program analysis on compact summaries of the input modules (during the "thin link"). You'd have to rewrite your analysis to operate on the combined summary index, either during the thin link, or on the serialized combined index (*.index.bc dumped by the save-temps option). But depending on what you are doing, you might need to enhance the summary info. See ModuleSummaryIndex.h for the info it currently has.</div><div><br></div><div>Teresa</div><div><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="ltr"><div></div><div><br></div><div>Thank you, S</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jul 12, 2020 at 8:13 AM Teresa Johnson <<a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.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="ltr"><div dir="ltr">-emit-llvm only emits the result of the regular LTO link, which is why it is very small for your ThinLTO link (which supports having some amount of regular LTO objects mixed in, and also split thin and regular LTO bitcode modules, but by default for ThinLTO this regular LTO combined module will be small and effectively empty).<div><br></div><div>For ThinLTO there are going to be multiple modules. To get the bitcode for them you could use <span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px"> </span><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">-Wl,-plugin-opt,save-temps. This will give you more than you want, as it dumps the bitcode for each module at multiple places in the ThinLTO backends. The files end in .bc and the suffixes include the name of the phase where they were emitted:</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- preopt.bc  (before any optimization)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- promote.bc (after ThinLTO local to global promotion)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- internalize.bc (after internalization)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- import.bc (after ThinLTO importing)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- opt.bc (after optimization pipeline but before codegen)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px">- precodegen.bc (usually the same as opt.bc)</span></div><div><span style="color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px"><br></span></div><div>Are you debugging or trying to do something else?</div><div><br></div><div>Teresa</div></div></div></blockquote></div></blockquote></div></div></blockquote></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 20, 2020 at 12:42 PM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.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">I think there is a way, but I'm not entirely sure.<br>
<br>
It's possible you've got the right thing & it's just that ThinLTO's<br>
optimized away most of the file you're looking at?<br>
<br>
On Sat, Jul 11, 2020 at 9:53 PM Stephan Z via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I wanted to get the linked result in LLVM bitcode format.<br>
><br>
> With LTO, this can be done by -flto -Wl,-plugin-opt,emit-llvm. Instead of generating native executables, it outputs a file with bitcode format.<br>
><br>
> Does this still work with -flto=thin? -flto=thin -Wl,-plugin-opt,emit-llvm outputs a bitcode file, but its file size is too small, and does not contain all contents.<br>
><br>
> What is the correct way to emit LLVM bitcode after ThinLTO?<br>
><br>
> Thank you, S<br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"><br></td></tr></tbody></table></span></div></div></div>