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 2017 Projects
Building bash-completion for clangShell completion is a function which developers use everyday. Typing "ls -" and pressing [tab] will return a list of probable options, and typing...
Clang-based C/C++ diff toolI want to implement a structural diff tool atop of clang APIs that finds changes to the AST between two versions of a file. This would enable better...
Enable Polyhedral Optimizations in XLA through LLVM/PollyTensorFlow is a popular machine learning and deep learning framework developed by Google. Despite its recent launch in late 2015, it has been widely...
Enabling Julia to target GPGPUs using PollyPolly can now automatically offload suitable kernels to GPUs in the form of Polly-ACC, saving a lot of developer time and effort. Julia, a modern...
Improved Loop Execution Modeling in Clang Static AnalyzerThe current implementation of modeling a loop is quite simple in the Clang Static Analyzer. This simple approach results a loss of coverage, which...
ISL Memory Management Using Clang Static AnalyzerMaintaining consistency while manual reference counting is very difficult. Languages like Java, C#, Go and other scripting languages employ garbage...
ThinLTO OptimizationsI would like to work on ThinLTO to improve and tune performance. This will require some analysis to determine what optimizations to add, as well as...
Warn if virtual calls are made from constructors or destructorsIn C++, virtual functions let instances of related classes have different behavior at run time. Pure function called from constructors and...