У перші дні gcc (2,8 і т.д.) і в часи egcs, і redhat 2,96 -O3 іноді був досить баггі. Але це вже понад десятиліття тому, і -O3 не сильно відрізняється від інших рівнів оптимізації (у баггісті).
Однак, як правило, виявляються випадки, коли люди покладаються на не визначену поведінку, через більш чітке поводження з правилами, а особливо кутовими випадками мови.
Як особиста примітка, я вже багато років працюю над виробничим програмним забезпеченням у фінансовому секторі з -O3 і досі не стикався з помилкою, якої б там не було, якби я використовував -O2.
За популярним попитом, ось додаток:
-O3 і особливо додаткові прапори, такі як -funroll-петлі (не ввімкнено -O3), іноді можуть призвести до генерування більше машинного коду. За певних обставин (наприклад, на процесорі з виключно невеликим кешем інструкцій L1) це може спричинити уповільнення через весь код, наприклад, якийсь внутрішній цикл тепер не вкладається в L1I. Як правило, gcc намагається не генерувати так багато коду, але оскільки він зазвичай оптимізує загальний випадок, це може статися. Варіанти, особливо схильні до цього (наприклад, розмотування циклу), як правило, не включаються до -O3 і відповідно позначаються на сторінці сторінки. Як таке, зазвичай, добре використовувати -O3 для генерування швидкого коду, і лише повернутися до -O2 або -Os (що намагається оптимізувати для розміру коду), коли це доречно (наприклад, коли профайлер вказує, що L1I не вистачає).
Якщо ви хочете вкрай оптимізувати, ви можете налаштувати в gcc через --param витрати, пов'язані з певними оптимізаціями. Додатково зауважте, що тепер gcc має можливість розміщувати атрибути у функціях, які керують налаштуваннями оптимізації саме для цих функцій, тож коли ви виявите, що у вас є проблема з -O3 в одній функції (або ви хочете спробувати спеціальні прапори саме для цієї функції), вам не потрібно складати весь файл або навіть весь проект з O2.
Ото, мабуть, слід бути обережним при використанні -Ofast, де зазначено:
-Ofast дозволяє всі -O3 оптимізації. Він також дозволяє оптимізувати, які не відповідають усім стандартам, що відповідають стандартам.
що змушує мене зробити висновок, що -O3 повинен повністю відповідати стандартам.