Поиск последней грамматики GCC GIMPLE

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

Пока я могу генерировать *.004t.gimple и *.011t.cfg необработанные файлы, используя -fdump-tree-all-graph-raw, но позже я хочу лучше понять язык GIMPLE, поэтому я поискал его грамматику и нашел следующее:

  • GIMPLE WIKI
  • ПРОСТО
  • GENERIC и GIMPLE
  • последний документ GIMPLE (без грамматики !!!)
  • GCC FE
  • грамматика для gcc-4.3.6
  • грамматика для gcc-4.2.1
  • GIMPLE Doc для gcc-5.4.0 (имеет грамматики тоже нет !!!)

Таким образом, кажется, что язык постоянно меняется и имеет несколько форматов (GIMPLE высокого уровня, GIMPLE низкого_уровня, SSA GIMPLE, tree </ strong >), а также грамматика, кажется, продолжает меняться между версиями, но я не могу найти грамматику GIMPLE для последних версий, особенно ту, которая используется в GCC-5.4, и я не могу понять различные форматы .

Вопросы по грамматике:

  • где я могу найти грамматику GIMPLE, используемую в GCC-5.4 и более поздних версиях?
  • как это написано? (в BNF или EBNF или …)
  • Как GCC реализует эту грамматику для создания, анализа и понимания файлов Gimple, которые он генерирует, а затем преобразования их в RTL?
  • Могу ли я написать небольшое подмножество грамматики GIMPLE в Xtext из примеров *.004t.gimple файлов, которые я генерирую?

Вопросы по форматам:

  • В чем разница между форматами 3 Gimple? (я не могу найти подробную документацию по каждому из них в вики)
  • какой формат используется в необработанных файлах *.c.004t.gimple и *.c.011t.cfg? (Высокий или низкий, …)
  • какой из них лучше представляет поток управления из исходного исходного кода без оптимизации?

Спасибо,

где я могу найти грамматику GIMPLE … Не думаю, что такое определение существует. Очень простой обзор дан в Удая Хедекера. слайды на странице 33.   —  person user7724084    schedule 19.07.2019

Как GCC реализует эту грамматику для генерации, анализа и понимания файлов Gimple, которые он генерирует … GCC обычно не выводит gimple в файлы (вы можете потребовать дамп, например, -fdump-tree-all, но это подразумевается для хакеров компиляторов и не нужны для работы); Структуры gimple генерируются внешним интерфейсом языка (и gimplifier), и они хранятся и обрабатываются в памяти, из которых позже создается rtl. Недавно был добавлен интерфейс GIMPLE (в 7.2, IIRC), но он ни в коем случае не завершен (и, опять же, его цель — сделать возможным написание модульных тестов для компилятора).   —  person user7724084    schedule 19.07.2019

О, еще я нашел грубую грамматику GIMPLE в статье Джейсона Меррилла GENERIC и GIMPLE: новое представление дерева для всех функций   —  person user7724084    schedule 19.07.2019

@VladislavIvanishin, спасибо за слайды, я знаю, что есть грубая грамматика GIMPLE из первой статьи и в GCC-4.3.6 и GCC-4.2.1, как вы можете найти в моих ссылках, но я ищу более свежий   —  person user7724084    schedule 19.07.2019

или, может быть, они удалили грамматику из документов, потому что они больше не используют ее? !! так как это теперь работает? !! как они создают файлы дампа из структур в памяти и представляют ли дампы исходные файлы полностью?   —  person user7724084    schedule 19.07.2019

как они создают файлы дампа из структур в памяти — ну, они просто ходят по деревьям gimple. Я думаю, что функция dump_function_to_file() — хорошая точка входа (оттуда можно читать / отлаживать). и представляют ли дампы исходные файлы полностью — я думаю, нет никакой гарантии, потому что, как я уже сказал, эти дампы в основном используются для отладки и тестирования. Кроме того, чтобы быть педантичным, некоторая информация об исходных файлах всегда теряется во время компиляции (но, конечно, сохраняется достаточно, чтобы правильно отражать семантику входной программы).   —  person user7724084    schedule 19.07.2019

@VladislavIvanishin, похоже, что раньше в GIMPLE была грамматика, но позже она претерпела столько изменений, что грамматика не успевала. и да, он не представляет исходный код должным образом (объяснено в этих примечаниях (nkavvadias.com/ hercules / gimple-notes.html). Также, читая исходный код, похоже, невозможно создать что-то, что понимает (анализирует) GIMPLE в его сгенерированном текстовом формате, поскольку он, похоже, не имеет фиксированная структура (или грамматика), но мне все еще нужно это делать, потому что кажется, что она содержит достаточно информации для того, что я хочу сделать.   —  person user7724084    schedule 07.08.2019

Источник: ledsshop.ru

Стиль жизни - Здоровье!