ABSTRACT: 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 e?ciently. 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 e?ectiveness of the representation, including the type information it provides; (b) compiler performance for several inter-procedural problems; and ( c) illustrative examples of the bene?ts LLVM provides for several challenging compiler problems. | ABSTRACT: 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 effciently. 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 inter-procedural problems; and ( c) illustrative examples of the benefts LLVM provides for several challenging compiler problems. |
REASON: The above abstract is an example of a good abstract since it gives a very good idea as to what LLVM is and what it does to someone who is a computer scientist. It starts of by describing what LLVM is made for, then gives a brief description of the LLVM features. It provides just enough detail to give computer scientists an idea as to what LLVM is and its capabilities, this amount of detail should allow the reader to decide whether to read the paper further or not. | REASON: The above abstract is an example of a good abstract since it gives a very good idea as to what LLVM is and what it does to someone who is a computer scientist. It starts of by describing what LLVM is made for, then gives a brief description of the LLVM features. It provides just enough detail to give computer scientists an idea as to what LLVM is and its capabilities, this amount of detail should allow the reader to decide whether to read the paper further or not. |