Developer knowledge network · moderated exchange

Społeczność UnreliableCode

Badania programistów, inżynieria wsteczna i społeczność programistów

Knowledge indexNa żywo
4Categories
919Threads
2.8KPosty
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
Rozpustnik: 139
Data dołączenia: Jul 2018
Posty: 21
Dzięki: 15
1 miesięcy temu · 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
Rozpustnik: 146
Data dołączenia: Aug 2019
Posty: 33
Dzięki: 31
1 miesięcy temu · 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
Rozpustnik: 186
Data dołączenia: Oct 2021
Posty: 10
Dzięki: 27
1 miesięcy temu · Jul 15, 2026 11:39 PM
#3

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