Может ли 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 - вы можете точно увидеть, как она устанавливает проходы для запуска там.

Другие вопросы по тегам