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 2019 Projects
Apply the Clang Static Analyzer to LLVM-based projectsThe idea is to improve the Clang Static Analyzer so that it is useful for developers who work on Clang and LLVM themselves, as well as on other...
Enhancing bug reports in the Clang Static AnalyzerThe Clang Static Analyzer (analyzer) can discover errors in a code by a technique called symbolic execution. Its core essentially interprets C, C++,...
Generation of Annotated SourcesLLVM automatically derives facts that are only used while the respective translation unit, or LLVM module, is processed (i.e. constant function,...
Improve (function) attribute inferenceLLVM functions, as well as arguments and other entities, can be tagged with several attributes such as the function only reads memory, or the...
Improve (function) attribute inferenceLLVM functions can be tagged with several attributes. These attributes are used in optimizations to decide whether a particular transformation is...
Improve LLVM binary utilitiesLLVM includes binary utilities equivalent to GNU binutils. Basic functionalities are done but there are incomplete ones such as Mach-O support. This...
libObjectcopyWorking on librarifying llvm-objcopy for use throughout binutils. Creating a good base for a library such that many object file formats can be added...
Speculative compilation in LLVM ORC - Just in time APIsOne of the selling points of new LLVM ORC Concurrent JIT APIs is we can speculatively compile functions before we need it, with the hope that when we...