Изменение оптимизаций, выполняемых компилятором Clang / LLVM - PullRequest
2 голосов
/ 10 февраля 2020

Бэкэнд LLVM из компилятора Clang / LLVM выполняет различные передачи на IR (промежуточное представление) для оптимизации.

  • Как узнать, какие все проходы выполняются в любом из режимов -O1 / 2/3?
  • Есть ли способ удалить некоторые из этих проходов и добавить некоторые другие пользовательские письменный пропуск?
  • Кроме того, есть ли зависимость между проходами, о которых нужно позаботиться?

1 Ответ

1 голос
/ 13 февраля 2020

Как узнать, какие все проходы выполняются в любом из режимов -O1 / 2/3

Вся логика c, связанная с оптимизацией построения конвейера, сконцентрирована в PassBuilder. cpp. Там вы можете увидеть прямые условия для уровней оптимизации.

Есть ли способ удалить некоторые из этих проходов и добавить какой-то другой заказной проход

Конечно, просто добавьте его в этот исходный файл.

Кроме того, существует ли какая-либо зависимость между проходами, о которых необходимо позаботиться

Разработчики LLVM пытаются сделать все проходы независимыми (и они, по большей части, насколько я знаю). Если вы хотите использовать информацию из некоторого прохода, этот проход должен быть зарегистрирован как Анализ (т.е. проход, который не преобразует код, но собирает информацию). Вы можете прочитать больше о зависимости анализа в здесь .

Я надеюсь, что это ответ на ваш вопрос!

...