This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Regarding -fno optimization options


Hi,

I tried in the last days to reconstruct an optimization level by just using the individual optimization flags. Well, it did not work at all.

My basic idea was to take the list from "-Q -v" and use it. But there still were some differences where comparing the list from a basic optimization level with the list from the flags.

Also, as I am working with a processor simulator (gem5), I was able to compare the performance of both programs. There was a big difference between using e.g. O3 and setting the flags.

Also I found this FAQ entry:

http://gcc.gnu.org/wiki/FAQ#optimization-options

Ian, is this still valid?

Cheers,

Ralf



Am 01.08.2012 22:25, schrieb Parang Saraf:
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@gmail.com> 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.

-- Dr. Ralf Jahr

Universität Augsburg
Lehrstuhl für Systemnahe Informatik und Kommunikationssysteme
Institut für Informatik
Universitätsstraße 6a
86159 Augsburg

Telefon: +49 (821) 598-2354
E-Mail: ralf.jahr@informatik.uni-augsburg.de


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]