blob: 49cf81e4a6af63022e2a52c5e9ee6f705015c65b [file] [log] [blame]
<!--#include virtual="header.incl" -->
<div class="www_sectiontitle">LLVM Features</div>
<p>The <a href="releases/">LLVM compiler system</a> for C and C++ includes the
following:</p>
<ul>
<li>Front-ends for C, C++, Objective-C, Fortran, etc.
They support the ANSI-standard C and C++ languages.
Additionally, many GCC extensions are supported.</li>
<li>A stable implementation of the LLVM instruction set, which serves
as both the online and offline code representation, together with assembly
(ASCII) and bytecode (binary) readers and writers, and a verifier.</li>
<li>A powerful pass-management system that automatically sequences passes
(including analysis, transformation, and code-generation passes) based on
their dependences, and pipelines them for efficiency.</li>
<li>A wide range of global scalar optimizations.</li>
<li>A link-time interprocedural optimization framework with a rich set of
analyses and transformations, including sophisticated whole-program pointer
analysis, call graph construction, and support for profile-guided
optimizations.</li>
<li>An easily retargettable code generator, which currently supports X86,
X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU,
MIPS, MSP430, SystemZ, WebAssembly and XCore.</li>
<li>A Just-In-Time (JIT) code generation system, which currently supports
X86, X86-64, ARM, AArch64, Mips, SystemZ, PowerPC, and PowerPC-64.</li>
<li>Support for generating DWARF debugging information.</li>
<li>A profiling system similar to gprof.</li>
<li>A test framework with a number of benchmark codes and applications.</li>
<li>APIs and debugging tools to simplify rapid development of LLVM
components.</li>
</ul>
<div class="www_sectiontitle">Strengths of the LLVM System</div>
<div class="www_text">
<ol>
<li>LLVM uses a simple <a href="docs/LangRef.html">low-level language</a> with
strictly defined semantics.</li>
<li>It includes front-ends for <a
href="docs/CommandGuide/html/llvmgcc.html">C</a> and
<a href="docs/CommandGuide/html/llvmgxx.html">C++</a>. Front-ends for
Java, Scheme, and other languages are in development.</li>
<li>It includes an aggressive optimizer, including scalar, interprocedural,
profile-driven, and some simple loop optimizations.</li>
<li>It supports a <a
href="/pubs/2004-01-30-CGO-LLVM.html">life-long
compilation model</a>, including link-time, install-time, run-time, and
offline optimization.</li>
<li>LLVM has full support for <a href="docs/GarbageCollection.html">accurate
garbage collection</a>.</li>
<li>The LLVM code generator is relatively easy to retarget, and makes use of
a powerful target description language.</li>
<li>LLVM has extensive <a href="docs/">documentation</a> and has
hosted many <a href="ProjectsWithLLVM/">projects</a> of various sorts.</li>
<li>Many third-party users have claimed that LLVM is easy to work with and
develop for. For example, the (now removed) Stacker front-end was written
in 4 days by someone who started knowing nothing about LLVM. Additionally,
LLVM has tools to make
<a href="docs/Bugpoint.html">development easier</a>.</li>
<li>LLVM is under active development and is constantly being extended,
enhanced and improved. See the status updates on the left bar to see the rate
of development.</li>
<li>LLVM is freely available under an OSI-approved "Apache License Version 2.0" license.</li>
<li>LLVM is currently used by many commercial, non-profit or academic entities, who contribute
many extensions and new features.</li>
</ol>
</div>
<div class="www_sectiontitle">LLVM Audience</div>
<p>LLVM can be used in many different kinds of projects. You might be
interested in LLVM if you are:</p>
<ul>
<li>A compiler researcher interested in compile-time, link-time
(interprocedural), and runtime transformations for C and C++ programs.</li>
<li>A virtual machine researcher/developer interested in a portable,
language-independent instruction set and compilation framework.</li>
<li>An architecture researcher interested in compiler/hardware
techniques.</li>
<li>A security researcher interested in static analysis or
instrumentation.</li>
<li>An instructor or developer interested in a system for quick prototyping of
compiler transformations.</li>
<li>An end-user who wants to get better performance out of your code.</li>
</ul>
<div class="www_sectiontitle">Want to Know More?</div>
<p>
You can <a href="docs/">browse the documentation online</a>,
try <a href="/demo/index.cgi">LLVM in your web browser</a>, or
<a href="/releases/index.html">download the source code.</a>
</p>
<!--#include virtual="footer.incl" -->