DragonEgg可以在gcc中运行优化传递并生成llvm IR吗?

时间:2013-08-06 03:36:29

标签: gcc llvm llvm-gcc llvm-ir

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

1 个答案:

答案 0 :(得分: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.cpp中的plugin_init功能 - 你可以准确地看到它如何设置传递到跑到那里。