У меня есть код устаревшего кода, который компилируется с параметрами -02 и -03. Из файла man GCC я получаю гарантию, что:
-O3 включает все оптимизации, заданные -O2, а также включает -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload и -ftree-vectorize варианты.
Итак, на первый взгляд казалось бы, что включение обоих этих флагов будет таким же, как только -O3. Тем не менее, это заставило меня думать, что правильная вещь в этом случае как -O2, вероятно, является "более безопасным" вариантом. Очевидно, что просто компилировать код со всеми перестановками и видеть, что происходит в каждом случае, но мне было интересно, знает ли кто-нибудь, существует ли определенная политика, которую GCC имеет для указания нескольких уровней оптимизации, и если да, то является ли это причиной?