LLVM Overview 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. The name "LLVM" itself is not an acronym; it is the full name of the project. LLVM began as aresearch project at theUniversity 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 subprojects, many of which are being used in production by a wide variety ofcommercial and open source projects as well as being widely used inacademic research. Code in the LLVM project is licensed under the "Apache 2.0 License with LLVM exceptions" The primary sub-projects of LLVM are: TheLLVM Core libraries provide a modern source- and target-independentoptimizer, along withcode generation support for many popular CPUs (as well as some less common ones!) These libraries are built around awell specified code representation known as the LLVM intermediate representation ("LLVM IR"). The LLVM Core libraries arewell documented, and it is particularly easy to invent your own language (or port an existing compiler) to useLLVM as an optimizer and code generator. Clang is an "LLVM native" C/C++/Objective-C compiler, which aims to deliver amazingly fast compiles, extremely usefulerror and warning messages and to provide a platform for building great source level tools. TheClang Static Analyzer andclang-tidy are tools that automatically find bugs in your code, and are great examples of the sort of tools that can be built using the Clang frontend as a library to parse C/C++ code. TheLLDB project builds on libraries provided by LLVM and Clang to provide a great native debugger. It uses the Clang ASTs and expression parser, LLVM JIT, LLVM disassembler, etc so that it provides an experience that "just works". It is also blazing fast and much more memory efficient than GDB at loading symbols. Thelibc++ andlibc++ ABI projects provide a standard conformant and high-performance implementation of the C++ Standard Library, including full support for C++11 and C++14. Thelibc project provides a high-performance, standards-conformant implementation of the C Standard Library, fully integrated with LLVM. It delivers optimized performance and comprehensive support for modern C standards, ensuring a reliable and efficient foundation for C applications. Thecompiler-rt project provides highly tuned implementations of the low-level code generator support routines like "__fixunsdfdi" and other calls generated when a target doesn't have a short sequence of native instructions to implement a core IR operation. It also provides implementations of run-time libraries for dynamic testing tools such asAddressSanitizer,ThreadSanitizer,MemorySanitizer, andDataFlowSanitizer. TheMLIR subproject is a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software fragmentation, improve compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers together. TheOpenMP subproject provides anOpenMP runtime for use with the OpenMP implementation in Clang. Thepolly project implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using a polyhedral model. Thelibclc project aims to implement the OpenCL standard library. Theklee project implements a "symbolic virtual machine" which uses a theorem prover to try to evaluate all dynamic paths through a program in an effort to find bugs and to prove properties of functions. A major feature of klee is that it can produce a testcase in the event that it detects a bug. TheLLD project is a new linker. That is a drop-in replacement for system linkers and runs much faster. TheBOLT project is a post-link optimizer. It achieves the improvements by optimizing application's code layout based on execution profile gathered by sampling profiler.
In addition to official subprojects of LLVM, there are a broad variety ofother projects thatuse componentsof LLVM for various tasks. Through these external projects you can useLLVM to compile Ruby, Python, Haskell, Rust, D, PHP, Pure, Lua, Julia, and a number ofother languages. A major strength of LLVM is its versatility, flexibility, andreusability, which is why it is being used for such a wide variety of differenttasks: everything from doing light-weight JIT compiles of embedded languageslike Lua to compiling Fortran code for massive super computers. As much as everything else, LLVM has a broad and friendly community of peoplewho are interested in building great low-level tools. If you are interested ingetting involved, agood first place is to skim theLLVM Blog and joinLLVM Discourse. For information on how to send in a patch, get commit access, andcopyright and license topics, please seetheLLVM Developer Policy. | | Latest LLVM Release! Upcoming Events April 14-16 - 2025 EuroLLVM June 10 - 2025 AsiaLLVM
ACM Software System Award! LLVM has been awarded the2012 ACM Software System Award! This award is given by ACM toone software system worldwide every year. LLVM is in highly distinguished company! Click on any of the individual recipients' names on that page for the detailed citation describing the award. Upcoming Releases LLVM Release Schedule: - 20.1.x
- Jan 28th: release/20.x branch created
- Feb 1st: 20.1.0-rc1 was released
- Feb 12th: 20.1.0-rc2 was released
- Feb 25th: 20.1.0-rc3 was released
- Mar 4th: 20.1.0 was released
- Mar 18th: 20.1.1
- Apr 1st: 20.1.2
- Apr 15th: 20.1.3
- Apr 29th: 20.1.4
- May 13th: 20.1.5
- May 27th: 20.1.6 (Tentative)
- Jun 10th: 20.1.7 (Tentative)
- Jun 24th: 20.1.8 (Tentative)
- Jul 8th: 20.1.9 (Tentative/If Necessary)
Developer Meetings Upcoming: Proceedings from past meetings: - October 22-24, 2024
- April 10-11, 2024
- October 9-11, 2023
- May 10-11, 2023
- November 8-9, 2022
- May 10-11, 2022
- November 16-19, 2021
- October 6-8, 2020
- October 22-23, 2019
- April 8-9, 2019
- October 17-18, 2018
- April 16-17, 2018
- October 18-19, 2017
- March 27-28, 2017
- November 3-4, 2016
- March 17-18, 2016
- October 29-30, 2015
- April 13-14, 2015
- October 28-29, 2014
- April 7-8, 2014
- Nov 6-7, 2013
- April 29-30, 2013
- November 7-8, 2012
- April 12, 2012
- November 18, 2011
- September 2011
- November 2010
- October 2009
- August 2008
- May 2007
|