Я провел небольшой эксперимент, чтобы выяснить, будет ли Clang генерировать лучший код, если я скомпилирую кучу фиктивных исходных файлов C в один файл битового кода LLVM (сначала используя -emit-llvm
для компиляции в .bc
файлы, а затем используя llvm-link
, чтобы заключить их в один .bc
файл) перед компиляцией в фиктивную библиотеку, в отличие от обычной компиляции для отдельных объектных файлов, которые должны быть связаны, и, кажется, он способен выполнять некоторые WPO (целые оптимизации программы), такие как вставка функционирует в разных единицах перевода, чего не было бы в противном случае. Я знаю о LTO (оптимизация времени соединения) через -flto
, так что это мой маленький эксперимент, чтобы увидеть, как Clang будет вести себя по-разному в этом конкретном случае.
Мой вопрос, однако, целесообразно ли вообще создавать двоичные файлы таким образом? Отличается ли конечный результат от простого использования -flto
? Если так, что будет отличаться, будь то с точки зрения процесса или конечного результата? Если нет, то это просто более хитрый способ вызова LTO?