Hi, I have been digging further into this. I can see the flags enabled for each optimization level using "gcc -Q -On -help=optimizers" (flags enabled) Also, when I compile a program for a particular optimization level, I can see the flags used by gcc using, "gcc -Q -v -On program.c" (flags used). I am working with gcc 4.4.5. I found a few anomalies, which are mentioned below: 1. There are a few flags which are documented in O1 but are enabled for O0. Example: -funit-at-a-time. This flag is both enabled and used at O0 2. There are a few flags, which are documented in O1 and are not enabled for O0 (which is correct), but are still used for O0. Example: -fauto-inc-dec flag is documented in O1 and is not enabled for O0 but is still used by O0. 3. Flags which are enabled but are not used. Example: flags -fdce and -fdse are enabled for O0, O1 but is never used by the compiler. 4. Here is the complete list of flags distribution: O0: documented 0; enabled 35; used 43 O1: documented 26; enabled 56; used 66 O2: documented 55; enabled 80; used 91 O3: documented 61; enabled 86; used 97 I understand that there are a few flags which are used internally by the gcc. But my question is, if some of the flags are shown as enabled for a particular optimization level, why are they are not used during compilation? Also, ideally if I am using -O0, i should not be able to add/enable optimization flags. But when i enable some of the O1 optimization flags at O0, I could see gcc using them. For example: "gcc -Q -v -O0 -ftree-fre program.c". Here -ftree-fre is an optimization flag from O1, but still it gets enabled at -O0. Most importantly: How can I make my gcc 4.5.4 adhere strictly with the 4.5.4 documentation? If I have to recompile gcc and make some changes to the config files, then please let me know. I will greatly appreciate your response in this regard. Regards Parang On Wed, Jul 25, 2012 at 11:24 AM, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: > > On 25 July 2012 07:34, Parang Saraf wrote: > > Hi, > > > > I have few very basic questions: > > > > 1. I want to turn-on only some of the optimization flags for O1. Is > > doing this enough?: > > > > " gcc -O0 -fcprop-registers -fdefer-pop -fif-conversion [...] -o > > program program.c " > > > > I tried with a bunch of options, generated an assembly file and > > compared the assembly file with the assembly generated from just -O0. > > Ideally, there should be a difference. Right? > > With -O0 there is no optimisation done, you can't enable individual > optimisation passes if no optmisation is done. > > You probably want to use -O1 and selectively turn off the passes you don't want. > > > 2. Secondly, if I can switch-on flags like this, then what is the need > > for -fno optimization options? Are -fno options meant just to reduce > > the number of command line options, ie. say if for O1 I want most of > > the flags except a few, then I can do "-O1 -fno-flag" ? > > Yes. It's easier to say "I want -O2 without X" rather than "I want > -O1 with A and B and C and D and ..." > > > If that's the > > case, then why not all the flags have a -fno switch. > > It is the case, and I think they do all have -fno switches. > > > 3. In the gcc 4.7.1 optimization options documentation, there is a line: > > > > " Most optimizations are only enabled if an -O level is set on > > the command line. Otherwise they are disabled, even if individual > > optimization flags are specified. " > > > > What exactly is the meaning of second line? > > What I said above. Without -O1 or higher most optimisations will not > run, even if you say -fxxx.