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