3

是否可以对任何代码运行 gcc 优化传递并最终获得 llvm IR?我想使用 gcc 中可用的死存储消除。我知道 llvm 也有这个通行证,但它不像 gcc 那样先进。

4

1 回答 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 回答