Игра с промежуточным форматом gcc

Согласно этой статье, gcc использует несколько промежуточных форматов перед генерацией кода. Я читал, что в формате GIMPLE используется трехадресный код, который, кажется, является самым простым промежуточным языком для использования. Но мне нужно больше подробностей, так как мне нужно создать инструмент, который может взять промежуточный код и вставить в него некоторый код перед генерацией окончательного кода.

Для этого мне сначала нужно узнать, как я могу даже сгенерировать код формата GIMPLE и сохранить его в файле. Поэтому я ищу некоторые документы и примеры. Кроме того, если кто-то работал с такими вещами, могу ли я знать сложность этой задачи, которая заключается в том, чтобы вставить некоторый код в промежуточный код?

3 ответа

Решение

Возможно, вам будет проще написать плагин для GCC, который позволит вам подключить поколение GIMPLE и изменить его внутри GCC, что должно сократить время сохранения, редактирования и попытки компиляции из формы GIMPLE. MELT является одним из таких плагинов (хотя он предлагает гораздо больше, чем просто изменение представлений нижнего уровня). Здесь также есть хороший PDF-файл о сменных плагинах GIMPLE.

Иначе, вы можете посмотреть здесь информацию о том, как работает GIMPLE GCC. С точки зрения демпинга GIMPLE из:

Вы можете запросить вывод C-подобного представления формы GIMPLE с флагом -fdump-tree-gimple.

Вы можете легко сгенерировать GIMPLE представление любого файла, используя флаг -fdump-tree-gimple,

Если вы хотите написать плагин, то вам может быть интересно, как проходы работают в GCC. Вы можете увидеть результат каждого прохода с флагами вида:

-fdump-<ir>-<passname>

где ir может быть:

  • tree: Внутрипроцедурные проходы на ПОДАРОК
  • ipa: Межпроцедурные пасы на GIMPLE
  • rtl: Внутрипроцедурные проходы по RTL

использование <passname> = all чтобы увидеть все свалки, например -fdump-ipa-all,

Я попробовал флаг -fdump-tree-gimple, Он работает только для языка C/C++, но не для других языков, таких как Java, Ada, Fortran и Objective-C)

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