rs6000: Refine small loop unroll in loop_unroll_adjust hook
authorJiufu Guo <guojiufu@linux.ibm.com>
Mon, 11 Nov 2019 06:30:38 +0000 (06:30 +0000)
committerJiufu Guo <guojiufu@gcc.gnu.org>
Mon, 11 Nov 2019 06:30:38 +0000 (06:30 +0000)
commit48f657953fe5f90218003c93feafdb3158e6d3d2
tree9723a1ee3ec29985e19ff7b9bd0b48b9bfb5892e
parent103cba80bd84f0f3c7e644783e1fb7154d07f522
rs6000: Refine small loop unroll in loop_unroll_adjust hook

In this patch, loop unroll adjust hook is introduced for powerpc.  We
can do target related heuristic adjustment in this hook.  In this patch,
-funroll-loops is enabled for small loops at O2 and above with an option
-munroll-small-loops to guard the small loops unrolling, and it works
fine with -flto.

gcc/
2019-11-11  Jiufu Guo  <guojiufu@linux.ibm.com>

PR tree-optimization/88760
* gcc/config/rs6000/rs6000.opt (-munroll-only-small-loops): New option.
* gcc/common/config/rs6000/rs6000-common.c
(rs6000_option_optimization_table) [OPT_LEVELS_2_PLUS_SPEED_ONLY]:
Turn on -funroll-loops and -munroll-only-small-loops.
[OPT_LEVELS_ALL]: Turn off -fweb and -frename-registers.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Remove
set of PARAM_MAX_UNROLL_TIMES and PARAM_MAX_UNROLLED_INSNS.
Turn off -munroll-only-small-loops for explicit -funroll-loops.
(TARGET_LOOP_UNROLL_ADJUST): Add loop unroll adjust hook.
(rs6000_loop_unroll_adjust): Define it.  Use -munroll-only-small-loops.

gcc.testsuite/
2019-11-11  Jiufu Guo  <guojiufu@linux.ibm.com>

PR tree-optimization/88760
* gcc.dg/pr59643.c: Update back to r277550.

From-SVN: r278034
gcc/ChangeLog
gcc/common/config/rs6000/rs6000-common.c
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.opt
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr59643.c