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 polly project implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using a polyhedral model.
- 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 other projects that use components of LLVM for various tasks.
LLVM Compiler Infrastructure 2018 Projects
A checker for dangling string pointers in C++The C++ std::string class provides a c_str() method that returns a raw pointer to a string's inner character buffer. When a std::string is destroyed,...
Command line replacements for GNU BinutilsA lot of GNU binutils have their equivalent in the LLVM project. As the majority of people are already accustomed to the GNU ones, it would be great...
Devirtualization v2In this project I would like to implement proposal “RFC: C++ Devirtualization v2” that I was working on for a quite some time with help from other...
Implement a single updater class for DominatorsDominance relationship is used widely in many compiler analyses and optimizations. The current API provided by LLVM to update the dominator tree and...
Improve Debugging of Optimized CodeMeasure DebugInfo loss statistics. Find the cause. Fix the culprit transformations starting from the most used areas of the compiler.
Move the apt.llvm.org CI to OBSLLVM uses a Jenkins instance and Jenkins-Debian-Glue to build LLVM, Clang, clang extra tools, compiler-rt, polly, LLDB and LLD packages for the...
Re-implement lldb-mi on top of the LLDB public APIThe project goal is to re-implement lldb-mi to avoid using of HandleCommand and regular expressions to parse commands results.
Using the Z3 SMT Solver to Validate Bugs Reported by the Clang Static AnalyzerThe goal of this project is to provide a new option in the clang static analyzer to validate (or refute) reported bugs, by using an SMT solver. The...