Regarding -fno optimization options
Ralf Jahr
ralf.jahr@informatik.uni-augsburg.de
Thu Aug 2 08:15:00 GMT 2012
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
More information about the Gcc-help
mailing list