LLVM基础概念
LLVM工程包含了一组模块化,可复用的编辑器和工具链。同其名字原意(Low Level Virtual Machine)不同的是,LLVM不是一个首字母缩写,而是工程的名字。目前LLVM包含的主要子项目包括:
1.LLVM Core:包含一个现在的源代码/目标设备无关的优化器,一集一个针对很多主流(甚至于一些非主流)的CPU的汇编代码生成支持。
2.Clang:一个C/C++/Objective-C编译器,致力于提供令人惊讶的快速编译,极其有用的错误和警告信息,提供一个可用于构建很棒的源代码级别的工具.
3.dragonegg: gcc插件,可将GCC的优化和代码生成器替换为LLVM的相应工具。
4.LLDB:基于LLVM提供的库和Clang构建的优秀的本地调试器。
5.libc++、libc++ ABI: 符合标准的,高性能的C++标准库实现,以及对C++11的完整支持。
6.compiler-rt:针对__fixunsdfdi和其他目标机器上没有一个核心IR(intermediate representation)对应的短原生指令序列时,提供高度调优过的底层代码生成支持。
7.OpenMP: Clang中对多平台并行编程的runtime支持。
8.vmkit:基于LLVM的Java和.NET虚拟机实
9.polly: 支持高级别的循环和数据本地化优化支持的LLVM框架。
10.libclc: OpenCL标准库的实现
11.klee: 基于LLVM编译基础设施的符号化虚拟机
12.SAFECode:内存安全的C/C++编译器
13.lld: clang/llvm内置的链接器
clang
作为LLVM提供的编译器前端,clang可将用户的源代码(C/C++/Objective-C)编译成语言/目标设备无关的IR(Intermediate Representation)实现。其可提供良好的插件支持,容许用户在编译时,运行额外的自定义动作。