Может ли DragonEgg выполнить проход оптимизации, доступный в gcc, и создать llvm IR?
Можно ли выполнить прогон оптимизации gcc для любого кода и в итоге получить llvm IR? Я хочу использовать мертвое хранилище, доступное в gcc. Я знаю, что у llvm также есть этот проход, но он не такой продвинутый, как в gcc.
1 ответ
У меня нет опыта работы с ним, и я не пробовал, но я думаю, что следующая команда должна работать в 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
включает оптимизацию GCC в DragonEgg-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.
Если вам нужно более детальное управление, чем это, вы можете настроить DragonEgg: правильное место для редактирования plugin_init
Функция в Backend.cpp - вы можете точно увидеть, как она устанавливает проходы для запуска там.