From: Jiufu Guo <guoji...@linux.ibm.com>

Previously, flag_unroll_loops was turned on at -O2 implicitly.  It
also turned on cunroll with allowance size increasing, and then cunroll
will unroll/peel the loop even the loop is complex like code in PR95018.
With this patch, size growth for cunroll is allowed if -funroll-loops
or -fpeel-loops is specified explicitly.

Bootstrap/regtest pass on powerpc64le. OK for trunk? And backport to
GCC10?

BR,
Jiufu

gcc/ChangeLog
2020-02-28  Jiufu Guo  <guoji...@linux.ibm.com>

        PR target/95018
        * config/rs6000/rs6000.c (rs6000_option_override_internal):
        Override flag_cunroll_grow_size.

---
 gcc/config/rs6000/rs6000.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8435bc15d72..df6e03146cb 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4567,7 +4567,12 @@ rs6000_option_override_internal (bool global_init_p)
            unroll_only_small_loops = 0;
          if (!global_options_set.x_flag_rename_registers)
            flag_rename_registers = 1;
+         if (!global_options_set.x_flag_cunroll_grow_size)
+           flag_cunroll_grow_size = 1;
        }
+      else
+       if (!global_options_set.x_flag_cunroll_grow_size)
+         flag_cunroll_grow_size = flag_peel_loops;
 
       /* If using typedef char *va_list, signal that
         __builtin_va_start (&ap, 0) can be optimized to
-- 
2.17.1

Reply via email to