1. 工具和库
LLVM中的独立工具:
opt
:在IR级对程序进行优化的工具,输入必须是LLVM的bitcode,生成的输出文件必须具有相同的类型。llc
:通过特定后端将LLVM bitcode转换成目标汇编或目标问价的工具。llvm-mc
:能够汇编指令并生成像ELF、MachO、PE等对象格式的目标文件,也可以反汇编相同的对象,从而转存这些指令的相应汇编信息和内部LLVM机器指令数据结构。lli
:LLVM IP的解释器和JIT编译器。llvm-link
:将几个LLVM bitcode链接在一起,产生一个包含你所有输入的LLVM bitcode。llvm-as
:将人工可读的LLVM IR文件转换为LLVM bitcode。llvm-dis
:将LLVM bitcode解码成LLVM汇编码。
LLVM中的基本库:
- libLLVMCore:该库包含LLVM IR相关的所有逻辑:IR构造以及IR校验器,以及负责编译器中各种编译流程。
- libLLVMAnalysis:包含几个IR分析过程,如别名分析、依赖分析和指令简化等。
- libLLVMCodeGen:该库实现与目标目标无关的代码生成和机器级别的分析和转换。
- libLLVMTarget:该库通过通用目标抽象来提供对目标机器信息的访问接口。
- libLLVMX86CodeGen:该库具有特定于X86目标的代码生成信息、转换和分析过程,组成x86后端。
- libLLVMSupport:该库包含一个通用工具集合。
- libclang:该库实现了一个C接口,它是LLVM代码的默认实现语言。
2. Clang
1. Clang简介
Clang是LLVM编译器的c-family前端,Clang可能意指三种不同的实体:
- 前端(在Clang库中实现)
- 编译器驱动程序(在clang命令和Clang驱动程序库中实现)
- 实际的编译器(在clang -cc1命令中实现)。clang -cc1中的编译器不仅是由Clang库实现,还广泛地使用其他LLVM库来实现编译器的中端、后端以及集成的汇编器。
例如,对于如下size.c示例:
#include<stdio.h>
typedef struct _PixelPacket{
char rt, gt, ot;
}PixelPacket;
int main()