Subject: -O
To: None <current-users@sun-lamp.cs.berkeley.edu>
From: Frank van der Linden <vdlinden@fwi.uva.nl>
List: current-users
Date: 04/13/1994 14:22:52
There seem to be several people who seem to use -O6 for optimization
with gcc. I always wondered how this came about. If I remember correctly,
it used to be in the Linux kernel Makefile too. So, I did some checking
in the 2.4.x, 2.5.x and -current gcc code (which is 2.4.5 with some
code reshuffling and modifications), and it always came down to this piece
of code (toplev.c):

----------------------
  if (optimize >= 2)
    {
      flag_cse_follow_jumps = 1;
      flag_cse_skip_blocks = 1;
      flag_expensive_optimizations = 1;
      flag_strength_reduce = 1;
      flag_rerun_cse_after_loop = 1;
      flag_caller_saves = 1;
#ifdef INSN_SCHEDULING
      flag_schedule_insns = 1;
      flag_schedule_insns_after_reload = 1;
#endif
    }

#ifdef OPTIMIZATION_OPTIONS
  /* Allow default optimizations to be specified on a per-machine basis.  */
  OPTIMIZATION_OPTIONS (optimize);
#endif
----------------------

So, anything higher than 2 can optionally be handled by the macro
OPTIMIZATION_OPTIONS(). Which is defined in the config files for some
architectures, but only 2 of them use -O3 (to enable inline functions
by default).

I don't know if anyone knows how -O6 ended up being used sometimes (for example,
it is used in /sys/arch/i386/boot/Makefile), but it seems useless to me (ok,
it's the same as -O2, so it doesn't do any harm either.. you could even claim
that any Makefile using it is prepared for future releases of gcc ;))

- Frank

------------------------------------------------------------------------------