LLVM IR优化

问题描述 投票:0回答:2

我试图关注this链接,以生成c代码的IR表示。我使用的c代码如下

void main() {
 int c1 = 17;
 int c2 = 25;
 int c3 = c1 + c2;
 printf("Value = %d\n", c3);
}

我把它保存为const.c。保存后,我使用以下命令生成.bc文件。

clang -c -emit-llvm const.c -o const.bc

生成.bc文件后,我想使用以下命令生成const.bc文件的优化版本,该文件名为const.reg.bc

opt -mem2reg const.bc > const.reg.bc

我没有任何问题生成这些文件,但由于某些原因它们都完全相同,没有优化发生。结果应该是不同的,我的意思是const.reg.bc应该是const.bc文件的优化版本。但由于某种原因,它不会发生。有人能告诉我,我做得对吗?

llvm compiler-optimization llvm-ir register-allocation
2个回答
1
投票

当你运行clang somefile.c时,它默认为-O0优化级别,它使用optnone属性发出主函数。此属性会阻止优化,这就是您没有看到mem2reg结果的原因。

如果你想让optnone工作,你必须删除opt属性:

clang -S -emit-llvm const.c -o - | sed s/optnone// | opt -S -mem2reg

请注意,mem2reg及其对应的reg2mem通行证并未严格优化。他们只是将IR转换为SSA形式。


0
投票

此选项可与clang -Xclang -disable-O0-optnone一起使用,以防止生成optnone属性。

© www.soinside.com 2019 - 2024. All rights reserved.