Может ли GCC скомпилировать GIMPLE?
GIMPLE является одним из внутренних представлений в системе GCC. Можно выгрузить GIMPLE или любое другое внутреннее представление через аргумент -fdump-* compiler. Но есть ли способ компилировать дамп GIMPLE или любое другое представление? Похоже, что у GCC нет внешнего интерфейса GIMPLE. Я хотел бы сделать дамп, проанализировать, изменить и затем перекомпилировать дамп GIMPLE для выполнения различных инструкций кода.
PS Я знаю о плагинах GCC и знаю о LLVM/Clang, поэтому, пожалуйста, попробуйте ответить на точный вопрос и не предлагать альтернативных решений. Спасибо!
1 ответ
Был такой проект: GIMPLE FE, начатый несколько лет назад, но он так и не достиг пригодного для использования состояния и в основном мертв. Кстати, отвалы, которые вы получаете от -fdump-
неполны. Они рады сообщить вам, что происходит, но они не содержат достаточно информации для перестройки внутренних структур.
Это усилие было возобновлено во время GSoC'16, с основной целью обеспечения юнит-тестов. Доступны патчи, которые обрабатывают некоторые простые случаи. План состоит в том, чтобы интегрировать эту экспериментальную поддержку в gcc-7 или gcc-8 и постепенно улучшать ее, так как она все больше и больше используется в тестовом комплекте. Точно так же в работе находится интерфейс RTL для этого другого внутреннего представления gcc.
Мы сталкиваемся с той же проблемой. Вместо того, чтобы "выгружать / перезагружать" файлы GIMPLE и манипулировать ими на строковом уровне, я бы предложил просто написать плагин gcc и сразу же управлять структурами данных GIMPLE.