The LLVM Compiler Infrastructure
LLVM Compiler Infrastructure
LLVM Compiler Infrastructure
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. LLVM began as a research project at the University of Illinois, with the goal of providing a modern, SSA-based compilation strategy capable of supporting both static and dynamic compilation of arbitrary programming languages. Since then, LLVM has grown to be an umbrella project consisting of a number of different subprojects, many of which are being used in production by a wide variety of commercial and open source projects as well as being widely used in academic research.
The primary sub-projects of LLVM are:
- The LLVM Core libraries provide a modern source- and target-independent optimizer, along with code generation support for many popular CPUs. These libraries are built around a well specified code representation known as the LLVM intermediate representation ("LLVM IR").
- Clang is an "LLVM native" C/C++/Objective-C compiler, which aims to deliver amazingly fast compiles, extremely useful error and warning messages and to provide a platform for building great source level tools. The Clang Static Analyzer is a clang-based tool that automatically finds bugs in your code.
- The LLDB project builds on libraries provided by LLVM and Clang to provide a great native debugger on top of Clang and LLVM libraries.
- The libc++ and libc++ ABI projects provide a standard conformant and high-performance implementation of the C++ Standard Library.
- The MLIR subproject aims to address software fragmentation, compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers.
- The lld project aims to be the built-in linker for clang/llvm. Currently, clang must invoke the system linker to produce executables.
- In addition to official subprojects of LLVM, there are a broad variety of projects that use components of LLVM for various tasks.
2020 Program
Successful Projects
Contributor
Stefan Stipanovic
Mentor
Jon Chesterfield, Johannes Doerfert
Organization
The LLVM Compiler Infrastructure
Improve Parallelism-Aware Analyses and Optimizations
Parallelism is used to improve performance. In sequential languages, parallelism is introduced with parallel constructs. However, it doesn’t come...
Contributor
Hideto Ueno
Mentor
EJ Park, Giorgis Georgakoudis, Johannes Doerfert
Organization
The LLVM Compiler Infrastructure
Advanced Heuristics for Ordering Compiler Optimization Passes
Selecting optimization passes for given application is very important but non-trivial problem because of the huge size of the compiler transformation...
Contributor
Ruijie Fang
Mentor
Aditya Kumar, Rodrigo Rocha
Organization
The LLVM Compiler Infrastructure
Improve hot cold splitting to aggressively outline small blocks
This project aims at enhancing the ability to detect and split small cold blocks (for example, __assert_rtn, throws) to the existing hot/cold...
Contributor
Rithik Sharma
Mentor
Whitney Tsang, Bardia Mahjour, Ettore Tiotto
Organization
The LLVM Compiler Infrastructure
Unify ways to move code or check if code is safe to be moved
LLVM transformation passes use code motion in different types of transformations. All these passes have some embedded code motion safety checks and...
Contributor
Shu Anzai
Mentor
Jonas Devlieghere, Raphael Isemann
Organization
The LLVM Compiler Infrastructure
Support autosuggestions in LLDB's command line
Tab completion in LLDB is a very useful function for users. However, it is needed that users press [tab] key to confirm completion. If they can...
Contributor
Tarindu Jayatilaka
Mentor
EJ Park, Giorgis Georgakoudis, Johannes Doerfert
Organization
The LLVM Compiler Infrastructure
Advanced Heuristics for Ordering Compiler Optimization Passes
Compilers come with hundreds of optimization passes, making it difficult to select which passes to run and deciding the order in which to execute...
Contributor
Gongyu Deng
Mentor
Jonas Devlieghere, Raphael Isemann
Organization
The LLVM Compiler Infrastructure
Implement the missing tab completions for LLDB's command line
To implement the missing tab completions for LLDB's command line as the title goes, I dug out possible commands as targets and provided a list of...
Contributor
George Mitenkov
Mentor
Lei Zhang, Mahesh Ravishankar
Organization
The LLVM Compiler Infrastructure
SPIR-V to LLVM IR dialect conversion in MLIR
MLIR is a novel compiler infrastructure that enables multi-level abstraction and therefore enhances reusability and extensibility. The core concept...
Contributor
Nithin V Rajendrakumar
Mentor
Gabor Horvath, Artem Dergachev
Organization
The LLVM Compiler Infrastructure
Find null smart pointer dereferences with the Static Analyzer
The Clang Static Analyzer is used to find bugs in the program by analyzing source code without compiling and executing. It uses symbolic computations...
Contributor
Shinji Okumura
Mentor
Johannes Doerfert, Brian Homerding
Organization
The LLVM Compiler Infrastructure
Improve inter-procedural analyses and optimizations
LLVM IR has some attributes which can be attached to function, argument, callsite, et cetera. These attributes guarantee a property corresponding to...
Contributor
Hamilton Tobon Mosquera
Mentor
Jon Chesterfield, Johannes Doerfert
Organization
The LLVM Compiler Infrastructure
Latency Hiding for Host to Device Memory Transfers
Given the increasing number of use cases for massively parallel devices (GPUs), solving the problems they bring have become an important research...
Contributor
Vishal Chebrolu
Mentor
JF Bastien, Aditya Kumar
Organization
The LLVM Compiler Infrastructure
Improve MergeFunctions to incorporate MergeSimilarFunctions patches and ThinLTO Support
The project aims at providing the MergeFunctions pass in LLVM to have feature parity with the MergeSimilarFunctions pass, which can merge functions...
Contributor
Luofan Chen
Mentor
Johannes Doerfert, Brian Homerding
Organization
The LLVM Compiler Infrastructure
Deduce attributes for non-exact functions
A function that is non-exactly defined is a function that could be replaced at link time. Usually most of the non-inlining IPOs are inhibited. For...