我正在尝试跟踪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
的{{1}}文件的优化版本。
const.reg.bc
生成这些文件没有任何问题,但是由于某些原因,它们完全相同,并且没有优化。结果应该有所不同,我的意思是opt -mem2reg const.bc > const.reg.bc
应该是const.reg.bc
文件的优化版本。但是由于某种原因,它不会发生。有人可以告诉我我做错了什么吗?
答案 0 :(得分: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形式转换为SSA形式。
答案 1 :(得分:0)
此选项可与clang -Xclang -disable-O0-optnone
一起使用,以防止生成optnone
属性。