Hello , I am a research scholar and a beginner to GCC, studying the impact of optimization flags across different GCC optimization levels. As part of this work, I am trying to understand whether it is possible to achieve performance equivalent to O0 level by disabling optimization flags that are mentioned for higher optimizations.
Specifically, I achieved performance very close to -O2 starting from -O3, and similarly from -O2 to -O1, by cumulatively disabling the optimization flags that differ between these levels. However, I am unable to achieve performance equivalent (or even close) to -O0 when transitioning from -O1, despite disabling all visible optimization flags (using -fno-* flags, and -fdisabling tree/RTL dumps). In practice, even after disabling all -O1 optimizations, the performance remains significantly better than -O0—roughly halfway between -O0 and -O1. This suggests that -O1 or -O enables certain behaviors or properties that are not exposed through individual optimization flags and also that differ from O0. I would greatly appreciate any guidance on the following: - Are there optimization-related behaviors at -O1 that are controlled implicitly (e.g., via internal optimize > 0 gating or other non-flag mechanisms)? - Is it expected that -O0 behavior cannot be fully reproduced by disabling flags starting from -O1? - Are there additional factors that significantly differentiate -O1 from -O0, and can I redirect those properties while transitioning from O1 to O0? - Can I implement any flag that will redirect to O0 properties even if I run O1 with all defined disable flags? Any pointers to documentation, design rationale, or relevant source locations would be extremely helpful. Thank you very much for your time and guidance. Thanks & Regards Soma Pal
