The 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.
The LLVM Compiler Infrastructure 2020 Projects
-
Xing GUO
Add DWARF Support for yaml2objLLVM offers 2 useful YAML tools, yaml2obj and obj2yaml. The former one reads YAML files and emits object files, e.g., ELF, COFF and MachO. The latter... -
Hideto Ueno
Advanced Heuristics for Ordering Compiler Optimization PassesSelecting optimization passes for given application is very important but non-trivial problem because of the huge size of the compiler transformation... -
Tarindu Jayatilaka
Advanced Heuristics for Ordering Compiler Optimization PassesCompilers come with hundreds of optimization passes, making it difficult to select which passes to run and deciding the order in which to execute... -
Luofan Chen
Deduce attributes for non-exact functionsA 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... -
Nithin V Rajendrakumar
Find null smart pointer dereferences with the Static AnalyzerThe Clang Static Analyzer is used to find bugs in the program by analyzing source code without compiling and executing. It uses symbolic computations... -
Gongyu Deng
Implement the missing tab completions for LLDB's command lineTo 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... -
Ruijie Fang
Improve hot cold splitting to aggressively outline small blocksThis project aims at enhancing the ability to detect and split small cold blocks (for example, __assert_rtn, throws) to the existing hot/cold... -
Kuter Dinel
Improve inter-procedural analyses and optimizationsIn this project we aim to improve the deduction capabilities of the Attributor framework. -
Shinji Okumura
Improve inter-procedural analyses and optimizationsLLVM IR has some attributes which can be attached to function, argument, callsite, et cetera. These attributes guarantee a property corresponding to... -
Vishal Chebrolu
Improve MergeFunctions to incorporate MergeSimilarFunctions patches and ThinLTO SupportThe project aims at providing the MergeFunctions pass in LLVM to have feature parity with the MergeSimilarFunctions pass, which can merge functions... -
Stefan Stipanovic
Improve Parallelism-Aware Analyses and OptimizationsParallelism is used to improve performance. In sequential languages, parallelism is introduced with parallel constructs. However, it doesn’t come... -
Hamilton Tobon Mosquera
Latency Hiding for Host to Device Memory TransfersGiven the increasing number of use cases for massively parallel devices (GPUs), solving the problems they bring have become an important research... -
George Mitenkov
SPIR-V to LLVM IR dialect conversion in MLIRMLIR is a novel compiler infrastructure that enables multi-level abstraction and therefore enhances reusability and extensibility. The core concept... -
Shu Anzai
Support autosuggestions in LLDB's command lineTab 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... -
Rithik Sharma
Unify ways to move code or check if code is safe to be movedLLVM transformation passes use code motion in different types of transformations. All these passes have some embedded code motion safety checks and...