<div dir="ltr">Hi,<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><div>I had a look at <a href="http://llvm.org/docs/Passes.html" target="_blank">http://llvm.org/docs/Passes.html</a> which describes the optimization passes.</div>


<div>From a newbie standpoint can you please explain the power of LLVM optimization?</div></blockquote><div><br></div><div>There are different levels of answers to your question. I will give it a try, but it's certainly no substitute for reading the docs. LLVM is a complex system...<br>

<br></div><div>- What effect do compiler optimizations have?<br></div><div>In general, they make your program faster. To get a feeling for that, I recommend you take your favorite C/C++ program, compile it with the '-O0', '-O1', '-O2' and '-O3' flags, and run each of the versions.<br>

<br></div><div>- What do compiler optimizations do?<br></div><div>Many optimizations in LLVM are classical, and found in similar form in other compilers. Examples are:<br></div><div>* Instcombine: knows about many arithmetic simplifications, e.g., n*1 => n<br>

</div><div>* DCE: Dead code elimination removes values that are computed, but never needed<br></div><div>* SimplifyCFG: Removes unreachable code, and converts things such as if (a) x; if (a) y; => if (a) { x; y; }<br>
</div>
<div>Other instrumentations are more specific to the way the LLVM intermediate representation works. For example, SROA tries to put values in registers instead of having them in memory, thereby reducing the number of memory accesses.<br>

<br></div><div>- What does LLVM actually do to optimize programs?<br></div><div dir="ltr">I recommend you to have a look at the <a href="http://llvm.org/docs/doxygen/html/PassManagerBuilder_8cpp_source.html#l00140">PassManagerBuilder</a>. It select the optimization passes that LLVM actually uses, and determines their order. This will give you a good feeling for the inner workings of LLVM.<br>

<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><div>Can you also kindly tell me the list of languages which purely use LLVM as its backend instead of its own ?</div>

</blockquote><div><br></div><div>Personally, I've used LLVM with C/C++. The <a href="http://tomlee.co/2014/04/03/a-more-detailed-tour-of-the-rust-compiler/">rust compiler also translates to LLVM</a>. There is <a href="https://github.com/go-llvm/llgo">a frontend for the Go language</a> as well, are certainly others.<br>

<br></div><div>Hope this helps,<br>Jonas</div></div><br></div>