1.将C语言代码转换成llvm ir:
clang -emit-llvm -S multiply.c -o multiply.ll或 clang -cc1 -emit-llvm testfile.c -o testfile.ll
2.把ll文件的LLVM IR转为bitcode格式
llvm-as test.ll –o test.bc
3.通过以下命令可把bc文件中LLVM bitcode转换为汇编码:
llc test.bc –o test.s或clang -S test.bc -o test.s –fomit-frame-pointer
4.执行以下命令把bitcode文件转换为我们之前创建过的ll文件:
llvm-dis test.bc –o test.ll
5.使用以下命令用opt执行转换Pass
opt –passname input.ll –o output.ll
adce:入侵式无用代码消除。
bb-vectorize:基本块向量化。
constprop:简单常量传播。
dce:无用代码消除。
deadargelim:无用参数消除。
globaldce:无用全局变量消除。
globalopt:全局变量优化。
gvn:全局变量编号。
inline:函数内联。
instcombine:冗余指令合并。
licm:循环常量代码外提。
loop-unswitch:循环外提。
loweratomic:原子内建函数lowering。
lowerinvoke:invode指令lowering,以支持不稳定的代码生成器。
lowerswitch:switch指令lowering。
mem2reg:内存访问优化。
memcpyopt:MemCpy优化。
simplifycfg:简化CFG。
sink:代码提升。
tailcallelim:尾调用消除。
6.使用llvm-link命令链接两个LLVM bitcode文件:
llvm-link test1.bc test2.bc –o output.bc
7.lli工具命令执行LLVM bitcode格式程序
lli output.bc
8.把C语言代码转为bitcode格式
% clang -O3 -emit-llvm hello.c -c -o hello.bc