Что такое «оптимизация дерева» в GCC по сравнению с «оптимизацией RTL»? - PullRequest
0 голосов
/ 04 марта 2019

Когда я сообщаю об ошибке в GCC по поводу пропущенной оптимизации, я всегда в замешательстве, должен ли я подать ее под "rtl-optimizations" или "tree-optimizations".Я посмотрел на страницу компонентов на bugzilla GCC, и там не было объяснено.

Итак, что это за два типа оптимизаций, или, скорее, чем они отличаются?

1 Ответ

0 голосов
/ 04 марта 2019

Частичный ответ:

Различие связано с различными внутренними представлениями (полускомпилированных) программ в компиляторе GCC.На самом деле это довольно сложная проблема, но для целей этого вопроса:

  • Существует представление на основе abstact-syntax-tree , называемое GIMPLE.Некоторые пропуска оптимизации сделаны на этом представлении;см. этот список .Они называются оптимизациями «tree» или «tree-ssa».
  • Более позднее и низкоуровневое представление находится в языке передачи регистров (или RTL).Другие этапы оптимизации выполняются в этом представлении позже в процессе, чем оптимизация дерева;вот список этих .Они называются оптимизацией "rtl".

При этом я не дал простого эмпирического правила для определения того, какие оптимизации принадлежат, где.


Для получения дополнительной информации вы можете прочитать руководство GCC innerals , где я нашел списки проходов оптимизации.

...