Проверка LLVM LTO и ThinLTO оптимизации? - PullRequest
0 голосов
/ 27 февраля 2019

Обычно после оптимизации компилятора мы получаем текстовый IR LLVM, так что мы можем сравнивать IR до и после оптимизаций и рассуждать о них.В LTO мы обычно вводим файлы IR битового кода в компоновщик (lld) и получаем собственные объектные файлы.Есть ли способ получить один монолитный LLVM IR (текстовое представление) после прохождения LTO?И есть ли какой-нибудь эффективный способ анализа объектного кода, чтобы найти оптимизации, кроме просто просмотра текстовой части объектного файла.

Спасибо

Скажите, пожалуйста, если вам нужна дополнительная информация!

1 Ответ

0 голосов
/ 28 февраля 2019

LTO-оптимизации более или менее совпадают с тем, что применяется к коду при обычной компиляции.Разница заключается в том, что оптимизируемый модуль происходит из-за связывания всех модулей программы.

Итак, вы можете просто скомпилировать весь ваш исходный код в LLVM IR (например, с -flto), а затем связать объектные файлы(которые на самом деле являются файлами битовых кодов), используя llvm-link, а затем поиграйтесь с оптимизацией, запускающей opt для этого результирующего битового кода.Список пропусков, примененных на этапе LTO, можно увидеть в lib/Transforms/IPO/PassManagerBuilder.cpp, populateLTOPassManager().Есть также хорошая опция opt, которая называется -print-after, чтобы выдавать текстовое представление IR после примененного данного прохода.

...