如何在llvm中关闭常量折叠优化

时间:2019-01-22 03:29:18

标签: llvm llvm-clang llvm-ir

我是clang和llvm的新手。我正在尝试从c源代码生成未优化的位代码版本。我发现生成的位代码具有我不想要的恒定折叠优化。 我正在使用此命令:clang -O0 -Xclang -disable-O0-optnone test1.c -S -emit-llvm -o test1.ll

test1.c文件具有以下代码:

int test() {
int y;
y = 2 * 4;
return y;
}

test1.ll文件的内容: enter image description here

不是生成用于将2和4相乘的指令,而是通过进行常量折叠操作来直接存储值8: 存储i32 8,i32 *%1,对齐4

如果有人好心地让我知道我所缺少的东西以及如何关闭恒定折叠优化功能,那将是非常好的。我正在使用的llvm版本是6.0.0。

谢谢。

1 个答案:

答案 0 :(得分:1)

  

如果有人好心地让我知道我所缺少的东西以及如何关闭恒定折叠优化功能,那将是非常好的。我正在使用的llvm版本是6.0.0。

这是一种Clang功能,即使使用-O0也无法关闭。要解决此问题,请尝试使变量成为全局变量,将其作为参数传递给函数,或仅手动编写IR。