Developer knowledge network · moderated exchange

UnreliableCode қауымдастығы

Әзірлеушілерді зерттеу, кері инженерия және кодтау қауымдастығы

Knowledge indexТірі
4Categories
919Threads
2.8KЖазбалар
Analysis

Comparing Compiler Optimization Passes: -O2 vs -O3 vs -Os vs -Ofast in GCC and Clang [StackOverflow Architecture Guide]

llvm_compiler_dev
LLVM & Clang Hacker
MEMBER
Өкіл: 139
Қосылу күні: Jul 2018
Хабарламалар: 21
Рахмет: 15
1 ай бұрын · Jul 15, 2026 7:13 AM
#1

What compiler optimization flags actually enable under the hood:

  • -O2: Enables standard optimizations (instruction scheduling, register allocation, inlining, common subexpression elimination).
  • -O3: Adds aggressive loop unrolling, SIMD auto-vectorization, and function cloning (can increase binary code size).
  • -Os / -Oz: Prioritizes code compactness, disabling loop unrolling to maximize CPU L1 Instruction Cache hits.
  • -Ofast: Enables -O3 plus -ffast-math (breaks IEEE 754 floating point standard compliance and NaN/Infinity guarantees!).
profiler_pat
Performance Hunter
MEMBER
Өкіл: 146
Қосылу күні: Aug 2019
Хабарламалар: 33
Рахмет: 31
1 ай бұрын · Jul 15, 2026 12:50 PM
#2

Warning: Never use -Ofast in financial, cryptographic, or physics simulation software because -ffast-math assumes floats are associative and ignores NaN checks.

assembly_micro_dev
x86_64 Micro-arch
MEMBER
Өкіл: 186
Қосылу күні: Oct 2021
Хабарламалар: 10
Рахмет: 27
1 ай бұрын · Jul 15, 2026 11:39 PM
#3

In many instruction-cache bound servers, -Os actually outperforms -O3 due to fewer L1i cache misses!