The Low-Level Virtual Machine (LLVM) is a compiler infrastructure, a collection of libraries and tools that make it easy to build compilers, optimizers, Just-In-Time code generators, and many other compiler-related programs.
LLVM uses a single, language-independent virtual instruction set both as an offline code representation (to communicate code between compiler phases and to run-time systems) and as the compiler internal representation (to analyze and transform programs). This persistent code representation allows a common set of sophisticated compiler techniques to be applied at compile-time, link-time, install-time, run-time, or “idle-time” (between program runs).
The strengths of the LLVM infrastructure are its extremely simple design (which makes it easy to understand and use), source-language independence, powerful mid-level optimizer, automated compiler debugging support, extensibility, and its stability and reliability. LLVM is currently being used to host a wide variety of academic research projects and commercial projects. LLVM includes C and C++ front-ends (based on GCC 4.0.1), a front-end for a Forth-like language (Stacker), a young scheme front-end, and Java support is in development. LLVM can generate code for X86, SparcV9, PowerPC, or it can produce C code.
The clang project is an effort to build a set of new ‘LLVM native’ front-end technologies for the LLVM optimizer and code generator.
- Front-ends for C, C++, Objective-C, Fortran, etc based on the GCC 4.2 parsers. They support the ANSI-standard C and C++ languages to the same degree that GCC supports them. Additionally, many GCC extensions are supported.
- 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.
- A powerful pass-management system that automatically sequences passes (including analysis, transformation, and code-generation passes) based on their dependencies, and pipelines them for efficiency.
- Includes an aggressive optimizer, including scalar, interprocedural, profile-driven, and some simple loop optimizations.
- A wide range of global scalar optimizations.
- 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.
- An easily retargettable code generator, which currently supports X86, X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, PIC16 MIPS, MSP430, SystemZ, and XCore.
- A Just-In-Time (JIT) code generation system, which currently supports X86, X86-64, PowerPC and PowerPC-64.
- Support for generating DWARF debugging information.
- A C back-end useful for testing and for generating native code on targets other than the ones listed above.
- A profiling system similar to gprof.
- A test framework with a number of benchmark codes and applications.
- APIs and debugging tools to simplify rapid development of LLVM components.
- Supports a life-long compilation model, including link-time, install-time, run-time, and offline optimization.
|New to Linux? Read our Linux for Starters series.|
|The largest compilation of the best free and open source software in the universe. Supplied with our legendary ratings charts.|
|Hundreds of in-depth reviews offering our unbiased and expert opinion on software.|
|Alternatives to Google's Products and Services examines your options to migrate from the Google ecosystem with open source Linux alternatives.|
|Alternatives to Microsoft's Products and Services recommends open source Linux software.|
|Essential Linux system tools looks at small, indispensable utilities, useful for system administrators as well as regular users.|
|Linux utilities to maximise your productivity. Small, indispensable tools, useful for anyone running a Linux machine.|
|Home computers became commonplace in the 1980s. Emulate home computers including the Commodore 64, Amiga, Atari ST, ZX81, Amstrad CPC, and ZX Spectrum.|
|Now and Then examines how promising open source software fared over the years.|
|Linux at Home looks at a range of home activities where Linux can play its part, making the most of our time at home, keeping active and engaged.|
|Linux Candy opens up to the lighter side of Linux. Have some fun!|
|Best Free Android Apps. There's a strict eligibility criteria for inclusion in this series|
|These best free books accelerate your learning of every programming language|
|These free tutorials offer the perfect tonic to the free programming books series|
|Stars and Stripes is an occasional series looking at the impact of Linux in the USA|