<div dir="ltr"><p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Hello,<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">My impression on <i>thinLTO</i> when
I first heard of it, (EuroLLVM2015) was about achieving Cross
Module Optimization (CMO) at the IR level.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"> <span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Having parallel front-end compilation &
initial optimization first, a thin-link of individual input units, more
optimization by calling opt again on the combined IR, and finally the target codegen
using llc.  <span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">A transformation similar to the following:<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Input File 1: Clang+opt (with thinLTO)<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Input File 2: Clang+opt (with
thinLTO)          
---           
llvm-link      
----       opt (for
CMO)     
---             llc
for target codegen.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">                      
…..<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Input File n: Clang+opt (with thinLTO)<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"> <span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">But from the presentation on LLVM
Developers’ Meeting 2016, I believe thinLTO is more than that. The full
advantage of this optimization should require a significant changes in the
backend as well (I suppose).<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Before I post my question, kudos to the
entire team behind thinLTO optimization - Teresa Johnson, Mehdi Amni, Xinliang
David Li, other developers and test engineers across the globe.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">I am working on the compiler for a target wherein the code
size improvement is a critical factor. We are still using LLVM 3.5 code base. We
assume, by moving to LLVM4.0.0 (with thinLTO and other recent target
independent optimizations) we would be able to improve the codegen to a considerable
number.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"> <span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">With thinLTO in LLVM4.0.0 compiler, when we build an application with multiple compilation
units, is it possible to achieve any benefit purely with LLVM IR passes (without
really involving the compiler backend)?<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">If yes, can anyone provide me the
information about the command-line options and the sequence to call the llvm
components (clang, opt, etc.) to achieve it.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">I truly value any input in this regard.<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif"><span> </span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Regards,<span></span></span></p>

<p class="MsoNormal" style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial"><span style="font-size:9.5pt;font-family:Arial,sans-serif">Christu<span></span></span></p></div>