Какие проходы оптимизации сделаны для -O4 в Clang?
Мы пытаемся реализовать jit-компилятор, чья производительность должна быть такой же, как при использовании clang -o4. Есть ли место, где я мог бы легко получить список проходов оптимизации, вызванных clang с -o4?
2 ответа
Насколько я знаю, -O4 означает то же самое, что и -O3 + с поддержкой LTO (Link Time Optimization). Смотрите следующие фрагменты кода:
- Tools.cpp
// Manually translate -O to -O2 and -O4 to -O3;
- Driver.cpp
// Check for -O4.
Также смотрите здесь:
Вы можете создавать битовые файлы из clang, используя -emit-llvm или -flto, или флаг -O4, который является синонимом -O3 -flto.
Для оптимизаций, используемых с флагом -O3, смотрите этот файл PassManagerBuilder.cpp (ищите переменную OptLevel - она будет иметь значение 3).
Обратите внимание, что с LLVM версии 5.1 -O4 больше не подразумевается оптимизация времени соединения. Если вы хотите, вам нужно передать -flto. См. Примечания к выпуску Xcode 5.