如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
LLVM 项目是模块化和可重用的编译器和工具链技术的集合。
LLVM 最初是伊利诺伊大学的一个研究项目,目标是提供一种现代的、基于 SSA 的编译策略,能够支持任意编程语言的静态和动态编译。
LLVM最初以C/C++为实现对象,目前已支持包括ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java字节码、Objective-C、Swift、Python、Ruby、Crystal、Rust、Scala以及C#等语言。
LLVM 核心库位于 llvm 目录中。其为主流CPU提供了优化器和代码生成的库,以及一些工具。
LLVM 核心库提供了 C++ 、C 、Go、Ocaml 和Python 等接口。
Polly 项目使用多面体模型实现了一套缓存局部优化以及自动并行和矢量化,如使用缓存局部优化的循环。
MLIR子项目是一种构建可重用和可扩展编译器基础设施的新方法。MLIR 旨在解决软件碎片化问题,改进异构硬件的编译,显着降低构建特定领域编译器的成本,并帮助将现有编译器连接在一起。
Clang编译器位于clang目录,是一个LLVM 原生的C/C++/Objective-C编译器。
clang目录还包含一些工具,如clang-format(代码格式化工具)。
clang-tools-extra目录也提供了一些clang的工具,如clang-tidy(静态代码分析)。
LLD项目是一个新的链接器。用于将编译器创建的对象文件和运行时库链接在一起,形成可执行文件。LLD链接器支持 ELF、COFF、Mach-O 和WebAssembly 格式。
LLDB调试器基于LLVM 和 Clang ,支持 C、C++ 和 Objective-C的调试,并提供 C++ 、lua和Python 等API接口。
源代码 -> 前端(Fontend) -> 优化器(Optimizer) -> 后端(Backend) -> 机器码
前端(Fontend) :解析源代码,错误检查和构建AST抽象语法树(词法分析、语法分析、语义分析)
优化器(Optimizer) : 各种转换以尝试改进代码的运行时间
后端(Backend) :代码映射到目标指令集
+----------------------------+ +----------------------------+
| | | |
| | | |
C +-------> C Frontend +-----+ +----> X86 Backend +-------> X86
| | | | | |
| | | | | |
+----------------------------+ | | +----------------------------+
| |
| |
+----------------------------+ | +----------------------------+ | +----------------------------+
| | | | | | | |
| | | | | | | |
Go +-------> Go Frontend +-----------> Common Optimizer +----------> ARM Backend +-------> ARM
| | | | | | | |
| | | | | | | |
+----------------------------+ | +----------------------------+ | +----------------------------+
| |
| |
| |
+----------------------------+ | | +----------------------------+
| | | | | |
| | | | | |
Rust +-------> Rust Frontend +-----+ +----> Mips Backend +--------> Mips
| | | |
| | | |
+----------------------------+ +----------------------------+
License
License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
Reference: