https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82197

            Bug ID: 82197
           Summary: Default flags enabled by GCC at -O3 by default appear
                    to be out of sync with the GCC documentation
           Product: gcc
           Version: 7.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: web
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lookatyouhacker at gmail dot com
  Target Milestone: ---

The GCC online docs at this URL list the various optimization options GCC
offers:

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Notably, it says that O3 optimization should enable -ftree-loop-distribution. 
However, my build of GCC 7.2.0 disables it with -O3 by default:

>gcc -c -Q -O3 --help=optimizers | grep distribut                               
>                                                                               
>                                                                               
>                          Tue 12 Sep 2017 09:37:44 AM EDT
  -ftree-loop-distribute-patterns       [enabled]
  -ftree-loop-distribution              [disabled]

I tracked down the problem to the GCC source code in gcc/opts.c, line 528:

    /* -O3 optimizations.  */
    { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 },
    /* Inlining of functions reducing size is a good idea with -Os
       regardless of them being declared inline.  */
    { OPT_LEVELS_3_PLUS_AND_SIZE, OPT_finline_functions, NULL, 1 },
    { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_finline_functions_called_once, NULL, 1
},
    { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_funswitch_loops, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_fgcse_after_reload, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_ftree_loop_vectorize, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_ftree_slp_vectorize, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_DYNAMIC
},
    { OPT_LEVELS_3_PLUS, OPT_fipa_cp_clone, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 },
    { OPT_LEVELS_3_PLUS, OPT_fpeel_loops, NULL, 1 },

In here, it looks like there's no mention of OPT_ftree_loop_distribution.  I
was wondering if this omission was intentional?  It seems that either the
online docs should be updated to reflect this, or the code should be amended to
enable -ftree-loop-distribution with -O3.  I can submit a patch to fix this if
it should in fact be in there.

Some discussion about this was had in this thread:
https://github.com/InBetweenNames/gentooLTO/issues/3

One user confirmed this goes at least as far back as 6.4.0.

Thoughts/suggestions?

Thank you,
Shane Peelar

Reply via email to