При компиляции единицы перевода компилятор выполняет множество оптимизаций - встраивание, постоянное сгибание/распространение, анализ псевдонимов, разворот цикла, удаление мертвого кода и многие другие, о которых я даже не слышал. Все ли они выполняются при использовании LTO/LTCG/WPO между несколькими единицами перевода или просто подмножество (или вариант) из них сделано (я слышал о встраивании)? Если бы не все оптимизации были выполнены, я бы рассмотрел, что построения единичных процессоров превосходят LTO (или, возможно, их использование при наличии более 1 единства исходных файлов).
Я предполагаю, что это не то же самое (единство строит с полным набором оптимизаций), а также то, что он сильно варьируется между компиляторами.
Документация по lto каждого компилятора точно не отвечает на это (или я не понимаю ее).
Поскольку lto включает в себя сохранение промежуточного представления в объектных файлах в теории, LTO может выполнять все оптимизации... правильно?
Обратите внимание, что я не спрашиваю о скорости сборки - это отдельная проблема.
ИЗМЕНИТЬ: Меня больше всего интересует gcc/llvm.