As an addendum to the Gentoo quote I gave in a previous
email I found
more along the lines of "don't use -O3" on the
official Gentoo CFLAGS
guide (htt
p://www.gentoo.org/doc/en/gcc-optimization.xml) which
suggests there are particular problems with gcc 4.x with
erroneous
builds and slower runtimes. So, I contacted the author of
that page
to find out what this was based on. His response was that
it was
based on "years of experience" of users having
problems especially in
the transition from gcc 3.x. to 4.x and using -O3.
Jos
On 11/07/07, Chris Fairles <chris.fairles gmail.com> wrote:
> Just so we're clear, here's the descriptions of the
extra
> optimizations -O3 turns on.
>
> -funswitch-loops
> Move branches with loop invariant conditions out of
the loop, with
> duplicates of the loop on both branches (modified
according to result
> of the condition).
>
> So, for example:
>
> for i = 0 ... 100
> if (a > 0) f(i);
> else g(i);
> end for
>
> can become:
>
> if (a > 0)
> for i = 0..100
> f(i)
> end for
> else
> for i = 0..100
> g(i)
> end for
> end if
>
> It doubles code which can be an issue for embedded
platforms but
> hopefully they're using -Os anyway. I can't conjure up
a scenario
> where this might cause code to run slower.
>
> -finline-functions
> Integrate all simple functions into their callers.
The compiler
> heuristically decides which functions are simple enough
to be worth
> integrating in this way. If all calls to a given
function are
> integrated, and the function is declared static, then
the function is
> normally not output as assembler code in its own
right.
>
> Dependant on the hueristics of the compiler but
inlining is not always
> best for some functions. I think this has the greatest
potential for
> not being "safe" and/or slowing down code as
opposed to making it
> faster. See:
> http://www.new-brunswick.net/workshop
/c++/faq/inline-functions.html#faq-9.3
>
> I
>
> -fgcse-after-reload
> When -fgcse-after-reload is enabled, a redundant
load elimination
> pass is performed after reload. The purpose of this
pass is to cleanup
> redundant spilling.
>
> Not clear what issues can arise with this one.
>
> I as well opt for -O2 99% of the time and use a
workaround (cxxflags)
> to force -O2.
>
> Chris
>
> On 7/11/07, Jos Hickson <jos.hickson gmail.com> wrote:
> > I've trawled the GCC mailing list and found the
following from 01/2007:
> >
> > <quote>
> > Andreas Bogk <andreas andreas.org> writes:
> >
> > > Then maybe it shouldn't be the default in
autoconf. But wasn't -O3 the
> > > set of optimizations considered potentially
unsafe?
> >
> > No. -O3 is a set of optimizations which are
useful for many program
> > but which will cause a substantial number of
programs to run slower.
> > -O2 is a set of optimizations which we believe
will make (almost) all
> > programs run faster. -O1 also makes (almost) all
programs run faster.
> > The difference between -O1 and -O2 is that it
takes longer to run the
> > compiler with -O2.
> >
> > gcc never enables unsafe optimizations except by
explicit request via
> > -f options (e.g., -ffast-math), where
"unsafe" is defined as
> > "violating the language standard."
> > </quote>
> >
> > This is from http
://gcc.gnu.org/ml/gcc/2007-01/msg01095.html. So, I
> > am mistaken in my belief and apologies for that.
However, here we
> > have had problems with the inlining turned on by
O3 even in a very
> > simple program that I don't have to hand right now
though this
> > particular problem at least may well be a GCC bug,
we're not sure yet.
> >
> > However, it is interesting to note that the author
of the response
> > above says that -O3 "will cause a substantial
number of programs to
> > run slower." How "official" this
statement is, I don't know.
> >
> > Regards,
> >
> > Jos
> >
> >
> >
> >
> >
> >
> > On 11/07/07, Dean Michael Berris
<mikhailberis gmail.com> wrote:
> > > On 7/11/07, Jos Hickson <jos.hickson gmail.com> wrote:
> > > > [snip]
> > > > >
> > > > > > One thing I was wonder was why
-O3 is the default as that is usually
> > > > > > considered a bit risky?
> > > > >
> > > > > Is it? I'm not aware of that.
> > > > >
> > > >
> > > > To quote from the Gentoo Linux
"Safe CFLAGS" page
> > > > (http://gentoo-wiki
.com/Safe_Cflags) as an example:
> > > >
> > > > <quote>
> > > > Note that -O2 is regarded as safer than
"-O3", and "-O3" can often be
> > > > a counter-productive attempt at
optimization.
> > > > </quote>
> > > >
> > >
> > > Any particular reason why this would be the
case? How is "safety"
> > > defined in this manner? Does conservative
optimization mean safer?
> > >
> > > --
> > > Dean Michael C. Berris
> > > http://cplusplus-
soup.blogspot.com/
> > > mikhailberis AT gmail DOT com
> > > +63 928 7291459
> > >
_______________________________________________
> > > Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
a>
> > >
> > _______________________________________________
> > Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
a>
> >
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
a>
>
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
a>
|