- Low Level Virtual Machine
infobox software
name = LLVM
developer =LLVM Developer Group &Apple, Inc
latest_release_version = 2.3
latest_release_date =9 June 2008
released =2000
operating_system =Cross-platform
genre =Compiler
license = University of Illinois/NCSA Open Source License
website = http://llvm.org/The Low Level Virtual Machine, generally known as LLVM, is a
compiler infrastructure, written inC++ , which is designed forcompile-time ,link-time ,run-time , and "idle-time" optimization of programs written in arbitrary imperativeprogramming language s. The LLVM project started in2000 at theUniversity of Illinois at Urbana-Champaign .LLVM currently supports the compilation of C,
C++ ,Objective C , Ada, andFortran programs, using front-ends derived from version 4.0.1 and 4.2 of theGNU Compiler Collection (GCC). An alternate front-end for C-like languages is being developed under the nameclang .Using LLVM, one can create virtual machines for languages like Java, code generators for specific machine architectures, and optimizers independent from particular platforms or languages. The LLVM intermediate representation (IR) is language and architecture independent; it lies between a language-specific module and a code generator for a specific machine. LLVM includes aggressive inter-procedural optimization support, static and JIT compilers.
It has many components in various stages of development; including, but not limited to, a Java bytecode frontend, a CIL frontend, a Python frontend, a new
graph coloring register allocator. The LLVM JIT compiler is capable of optimizing unnecessary static branches out of a program at runtime, and is therefore useful forpartial evaluation in cases where a program has many options—most of which can easily be determined unnecessary in a specific environment. Because of this, it is used in theOpenGL pipeline ofMac OS X 10.5 (Leopard) to provide support for missing hardware features.Code representation
LLVM supports a language-independent instruction set and type system. Most of the instructions have a form similar to
three address code . Each instruction is inStatic single assignment form (SSA), meaning that each variable (called a typed register) is assigned once and is frozen. This helps simplify the analysis of dependencies among variables.Any form of
type conversion , from coercion to thedowncasting of an object, is performed explicitly using thecast
instruction. LLVM has basic types, like integers of fixed sizes, and exactly fivederived type s:pointer s,array s, vectors, structures, and functions. A type construct in a concrete language can be represented by combining these basic types in LLVM. For example, a class in C++ can be represented by a combination of structures, functions and arrays offunction pointer s.Licensing
LLVM and clang are publicly available under the University of Illinois/NCSA Open Source License [http://www.opensource.org/licenses/UoI-NCSA.php] , a GPL-compatible, [ [http://www.gnu.org/philosophy/license-list.html Various Licenses and Comments about Them - GNU Project - Free Software Foundation (FSF) ] ] OSI-approved license that is very similar to the
BSD license .References
ee also
*
GNU Compiler Collection
*libjit
*Clang C CompilerExternal links
* [http://llvm.org/ The LLVM Compiler Infrastructure Project]
* [http://llvm.org/pubs/2004-01-30-CGO-LLVM.pdf LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation] — a published paper byChris Lattner and Vikram Adve.
* [http://llvm.org/docs/LangRef.html LLVM Language Reference Manual] — describes the LLVM intermediate representation.
* [http://video.google.com/videoplay?docid=6189170937161128523 LLVM 2.0 Presentation] — Google Tech Talk Presentation on LLVM 2.0
Wikimedia Foundation. 2010.