是否可以对任何代码运行gcc优化传递,最终获得llvm IR?我想使用gcc中可用的死存储消除。我知道llvm也有这个传递,但它不像gcc那样先进。
答案 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
功能 - 你可以准确地看到它如何设置传递到跑到那里。