Original author(s) | Chris Lattner, Vikram Adve |
---|---|
Developer(s) | LLVM Developer Group |
Initial release | 2003 |
Stable release | 19.1.7[2]
/ 14 January 2025 |
Repository | |
Written in | C++ |
Operating system | Cross-platform |
Type | Compiler |
License | Apache License 2.0 with LLVM Exceptions (v9.0.0 or later)[3] Legacy license:[4] UIUC (BSD-style) |
Website | www |
LLVM, also called LLVM Core, is a target-independent optimizer and code generator.[5] It can be used to develop a frontend for any programming language and a backend for any instruction set architecture. LLVM is designed around a language-independent intermediate representation (IR) that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes.[6] The name LLVM originally stood for Low Level Virtual Machine. However, the project has since expanded, and the name is no longer an acronym but an orphan initialism.[7]
LLVM is written in C++ and is designed for compile-time, link-time, runtime, and "idle-time" optimization. Originally implemented for C and C++, the language-agnostic design of LLVM has since spawned a wide variety of frontends: languages with compilers that use LLVM (or which do not directly use LLVM but can generate compiled programs as LLVM IR) include ActionScript, Ada, C# for .NET,[8][9][10] Common Lisp,[11] PicoLisp, Crystal, CUDA, D,[12] Delphi,[13] Dylan, Forth,[14] Fortran,[15] FreeBASIC, Free Pascal, Halide, Haskell, Idris[16], Jai (only for optimized release builds), Java bytecode, Julia, Kotlin, LabVIEW's G language,[17][18] Objective-C, OpenCL,[19] PostgreSQL's SQL and PLpgSQL,[20] Ruby,[21] Rust,[22] Scala,[23][24] Standard ML,[25] Swift, Xojo, and Zig.
RubyMotion transforms the Ruby source code of your project into ... machine code using a[n] ... ahead-of-time (AOT) compiler, based on LLVM.