Документация параметров командной строки Clang действительно очень бедна, и, в частности, вы правы, что почти нет объяснений того, что делает уровень оптимизации.
FreeBSD, однако, не добавить man page with a useful summary:
-O0 -O1 -O2 -Os -Oz -O3 -O4
Укажите, какой уровень оптимизации использования. -O0 означает «no optimization»: этот уровень компилирует самый быстрый и генерирует самый отлаживаемый код . -O2 - это умеренный уровень оптимизации , который обеспечивает большую оптимизацию. -Os - это -O2 с дополнительными оптимизациями для уменьшения размера кода. -Oz, как -O (и, следовательно, -O2), , но далее уменьшает размер кода. -O3, как -O2, за исключением того, что он обеспечивает оптимизацию, которая занимает больше времени для выполнения или может генерировать более крупный код (в попытке ускорить выполнение программы ). На поддерживаемых платформах -O4 обеспечивает время соединения ; объектные файлы хранятся в файле битового кода LLVM , а оптимизация всей программы выполняется во время соединения. -O1 - где-то между -O0 и -O2.
Если вы хотите, чтобы найти точный список проходов, выполненных для каждой оптимизации см этот StackOverflow вопрос: