是否可以对任何代码运行 gcc 优化传递并最终获得 llvm IR?我想使用 gcc 中可用的死存储消除。我知道 llvm 也有这个通行证,但它不像 gcc 那样先进。
问问题
308 次
1 回答
2
我没有这方面的经验,也没有尝试过,但我认为以下命令行应该在 DragonEgg 3.0 及更高版本中工作:
-fplugin=./dragonegg.so -O0 -fdse -fplugin-arg-dragonegg-enable-gcc-optzns -fplugin-arg-dragonegg-llvm-ir-optimize=2 -fplugin-arg-dragonegg-emit-ir -S
-fplugin=./dragonegg.so
启用 DragonEgg-O0
关闭所有 GCC 优化通道-fdse
打开 GCC 死存储消除-fplugin-arg-dragonegg-enable-gcc-optzns
在 DragonEgg 中启用 GCC 优化-fplugin-arg-dragonegg-llvm-ir-optimize=2
强制 LLVM 进行优化,-O2
而不是遵循 GCC 优化级别-fplugin-arg-dragonegg-emit-ir
生成 LLVM IR 而不是 asm,根据问题,这就是你想要的-S
因为你在使用的时候有点需要它-fplugin-arg-dragonegg-emit-ir
这应该适用于任何GCC tree pass。
如果您需要比这更细粒度的控制,您可以调整 DragonEgg:编辑的正确位置是Backend.cppplugin_init
中的函数- 您可以准确地看到它如何设置通道以在那里运行。
于 2013-08-15T08:32:47.050 回答