TY - GEN
T1 - LLVM
T2 - International Symposium on Code Generation and Optimization, CGO 2004
AU - Lattner, Chris
AU - Adve, Vikram
PY - 2004
Y1 - 2004
N2 - This paper describes LLVM (Low Level Virtual Machine), a compiler framework designed to support transparent, life-long program analysis and transformation for arbitrary programs, by providing high-level information to compiler transformations at compile-time, link-time, run-time, and in idle time between runs. LLVM defines a common, low-level code representation in Static Single Assignment (SSA) form, with several novel features: a simple, language-independent type-system that exposes the primitives commonly used to implement high-level language features; an instruction for typed address arithmetic; and a simple mechanism that can be used to implement the exception handling features of high-level languages (and setjmp/longjmp in C) uniformly and efficiently. The LLVM compiler framework and code representation together provide a combination of key capabilities that are important for practical, lifelong analysis and transformation of programs. To our knowledge, no existing compilation approach provides all these capabilities. We describe the design of the LLVM representation and compiler framework, and evaluate the design in three ways: (a) the size and effectiveness of the representation, including the type information it provides; (b) compiler performance for several interprocedural problems; and (c) illustrative examples of the benefits LLVM provides for several challenging compiler problems.
AB - This paper describes LLVM (Low Level Virtual Machine), a compiler framework designed to support transparent, life-long program analysis and transformation for arbitrary programs, by providing high-level information to compiler transformations at compile-time, link-time, run-time, and in idle time between runs. LLVM defines a common, low-level code representation in Static Single Assignment (SSA) form, with several novel features: a simple, language-independent type-system that exposes the primitives commonly used to implement high-level language features; an instruction for typed address arithmetic; and a simple mechanism that can be used to implement the exception handling features of high-level languages (and setjmp/longjmp in C) uniformly and efficiently. The LLVM compiler framework and code representation together provide a combination of key capabilities that are important for practical, lifelong analysis and transformation of programs. To our knowledge, no existing compilation approach provides all these capabilities. We describe the design of the LLVM representation and compiler framework, and evaluate the design in three ways: (a) the size and effectiveness of the representation, including the type information it provides; (b) compiler performance for several interprocedural problems; and (c) illustrative examples of the benefits LLVM provides for several challenging compiler problems.
UR - http://www.scopus.com/inward/record.url?scp=3042658703&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=3042658703&partnerID=8YFLogxK
U2 - 10.1109/CGO.2004.1281665
DO - 10.1109/CGO.2004.1281665
M3 - Conference contribution
AN - SCOPUS:3042658703
SN - 0769521029
SN - 9780769521022
T3 - International Symposium on Code Generation and Optimization, CGO
SP - 75
EP - 86
BT - International Symposium on Code Generation and Optimization, CGO 2004
Y2 - 20 March 2004 through 24 March 2004
ER -