Life-Long Program Optimization:
* Multiple-stages of analysis & transformation:
o compile-time, link-time, install-time, run-time, idle-time
o Use aggressive interprocedural optimizations
o Gather and exploit end-user profile information
o Tune the application to the user’s hardware
* But what constraints do we have to meet?
o Can’t interfere with the build process!
o Must support multiple source-languages!
o Must integrate with legacy systems and components!
Five key capabilities are needed:
* A persistent, rich code representation
o Enables analysis & optimization throughout lifetime
* Offline native code generation
o Must be able to generate high-quality code statically
* Profiling & optimization in the field
o Adapt to the end-user’s usage patterns
* Language independence
o No runtime, object model, or exception semantics
* Uniform whole-program optimization
o Allow optimization across languages and runtime
Our approach: The LLVM System
* Use a low-level, but typed, representation:
o Type information allows important high-level analysis
o Code representation is truly language neutral
o Allow off-line and runtime native code generation
* Our specific contributions:
o Novel features for language independence:
+ Typed pointer arithmetic, exception mechanisms
o Novel capabilities:
+ First to su
Popularity: 10% [?]
Tags: Compiler, Languages, Low Level Virtual Machine, Machine code, Pointer, Programming, Run time, Type system


