llvm作为一套成熟的编译体系,提供了很多命令用于不同阶段的使用。通过这些命令的组合使用,可以将一个完整的编译过程,拆分成多个步骤。
llvm-as: 将IR文件编译为二进制文件,默认生成后缀名为.bc的文件,也可以使用-o指定输出:
llvm-as -o hello hello.ll
llvm-dis: 将二进制文件回溯成IR文件,生成.ll后缀的文件
llvm-dis hello
当作为分析器时,通常会把分析结果打印到屏幕,当然少数时候也可以有其他目标方式。
当作为优化器时,opt会根据链接的动态库和使用-load选项加载的库做优化。
opt命令的输入可以接受.ll格式和.bc格式的文件。
如果-o没有指定,opt会将结果输出到标准输出。
opt -S -load=xxx.so < hello.ll > hello.new.ll
llc hello.ll
lli hello.bc
llvm-link:将多个LLVM的二进制文件合并为一个二进制文件
llvm-link -o hello hello.bc bye.bc
llvm-ar:创建静态库,用法和ar基本一致。
值得注意的是llvm-ar会创建一个新的符号表来统一记录静态库中所有的成员,这有助于提升速度。
llvm-ar r -hello.a hello.bc bye.bc
llvm-nm: 列出LLVM二进制文件或者静态库文件中的符号表。
llvm-nm hello.a
llvm-diff hello1.ll hello2.ll
llvm-nm: 列出LLVM二进制文件或者静态库文件中的符号表。
llvm-nm hello.a
llvm-diff hello1.ll hello2.ll