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

Reply via email to