我已使用LLVM
优化将C代码编译为-O0
IR代码。
如何将此-O0
LLVM IR代码转换为-O3
LLVM
IR代码"不使用C代码"?
我在下面尝试过:
clang -O3 -S -emit-llvm O0.ll -o O3.ll
和
opt -O3 -S O0.ll -o O3.ll
但输出仍为-O0
级别。
谢谢。
答案 0 :(得分:1)
我不确定更改何时发生(我认为它是LLVM
3.9.0及以上),但是当您编译为bitcode函数时,请使用optnone
进行注释不执行属性和进一步优化。
查看相关的SO讨论here。
建议做的是:
clang -emit-llvm -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes foo.c -o foo.bc
对于LLVM
3.8.0及更早版本(我认为)你已经做的就足够了。
因此,一旦你获得了那个bitcode(没有optnone
)参数,就可以使用opt
,因为你已经在做了。