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

Posted

技术标签:

【中文标题】如何关闭llvm中的常量折叠优化【英文标题】:How to turn off the constant folding optimization in llvm 【发布时间】:2019-01-22 03:29:17 【问题描述】:

我是 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 文件的内容:

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

如果有人好心让我知道我缺少什么以及我应该如何关闭不断折叠优化,那就太好了。我使用的 llvm 版本是 6.0.0。

谢谢。

【问题讨论】:

不要发布代码截图,而是粘贴代码。 【参考方案1】:

如果有人好心让我知道我缺少什么以及我应该如何关闭不断折叠优化,那就太好了。我使用的 llvm 版本是 6.0.0。

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

【讨论】:

以上是关于如何关闭llvm中的常量折叠优化的主要内容,如果未能解决你的问题,请参考以下文章

LLVM学习笔记(51)

您如何看待代码折叠? [关闭]

如何使用 Javascript 将 HTML 页面中的 XML 显示为可折叠和可展开的树? [关闭]

如何在我的中间代码上执行常量折叠和常量传播?

如何在调整后的折叠更改代码中使用 is.na 或 is.infinite 覆盖数据帧中的 NA? [关闭]

Vim:仅折叠顶层折叠