GSoC/GCI Archive
Google Summer of Code 2009

LLVM Compiler Infrastructure

Web Page:

Mailing List:

LLVM is an open source compiler infrastructure project, providing aggressive static compilation as well as JIT code generation. LLVM supports optimization and code generation for many architectures.

Also, LLVM has several subprojects including Clang (modular C/C++/ObjC compiler) and VMKit (Java/CLR/whatever VM on top of LLVM).


  • Adding Static Profiling Capabilities to LLVM The project goal is to augment LLVM with static profiling capabilities. Static profiling will help the compiler to identify which parts of a program are executed more frequently. Therefore the compiler can spend more resources in order to optimize these specific parts. In addition to this implementation, we will use it to enhance the linear scan register allocator used in LLVM, so that when necessary to spill variables, the allocator will choose those variables that tend to be the least used.
  • Auto-vectorization for LLVM The goal of this project is to implement a minimal end-to-end loop-based auto-vectorization system for LLVM. Auto-vectorization is a well-researched topic with numerous dependencies on other analysis and transformation passes, so a significant part of the proposed project is to evaluate already-available LLVM passes regarding their applicability to support auto-vectorization and to add what's missing. Special emphasis will be given to loop-dependence analysis.
  • Simulating Static Single Information Form in LLVM The Static Single Information (SSI) form is an extension of SSA form which has the additional property that each definition of a variable will be used only along one path of the control flow graph of the program. The SSI representation is a central part of many different analysis and optimizations that are used in the back end of compilers.
  • Support for an ELF writer Redesign the Object Code writers in LLVM, trying to be generic enough to support the widely used object formats: ELF and MachO. The ELF writer at the end of the project must be a complete replacement for an external assembler.
  • System V ABI support for the PowerPC backend The goal of this project is to implement support for the System V ABI in the PowerPC backend of LLVM. Since this is the ABI used on 32-bit PowerPC Linux, this will effectively bring LLVM to the 32-bit PowerPC Linux platform. At the moment PowerPC Linux is not officially supported by LLVM, however the PowerPC backend is considered to be stable on Darwin.