LLVM 01

c 源码到 LLVM 汇编码

$clang -emit-llvm -S multiply.c -o multiply.ll

IR 到bytecode
llvm-as test.ll -o test.bc

llvm-as 为LLVM 的汇编器

LLVM 静态编译器llc

将llvm bytecoe 转换为目标平台的汇编码
llc test.bc -o test.s


clang -S test.bc -o test.s -fomit-frame-pointer # 使用clang 前端

在以上命令中加入-march=architechture 指定目标构架的汇编码
,-mcpu=cpu 指定cpu , -reg allow = baseic /greedy/fast/pbqp 指定寄存器分配类型

将LLVM bitcode 转回LLVM 汇编码
llvm-dis test.bc -o test.ll

转换LLVM IR
opt -passname input.ll -o output.ll

如:
clang -emit-llvm -S multiply.c -o multiply.ll
用opt , 优化内存访问
opt -mem2reg -S multiply.ll -o multiply1.ll

将多个bc 链接成单个bc
llvm-link test1.bc test2.bc -o output.bc

执行LLVM bitcode
lli output.bc

clang 前端

$clang test.c
编译得到可执行文件
-E 调用预编译器
$clang -S test.c -o - 对到test.c 测试码的机器码

llgo 编译器是LLVM 的仅使用Go 语言写的Go语言前端

DragonEgg

DragonEgg 是一个GCC 的插件, 它使GCC 能够使用LLVM 优化器和代码生成器来取代GCC 自己的优化器和代码生成器
$gcc testprog.c -S -O1 -o - fplugin=./dragonegg.so

你可能感兴趣的:(LLVM 01)