From b57fab18604861a733f9bd7b8bc6b1e1bcd0f9b3 Mon Sep 17 00:00:00 2001
From: Jiufu Guo <guojiufu@linux.ibm.com>
Date: Tue, 24 Dec 2019 13:27:33 +0000
Subject: [PATCH] rs6000: re-enable web and rnreg with -funroll-loops

Previously, limited unrolling was enabled at O2 for powerpc in r278034.  At that
time, -fweb and -frename-registers were not enabled together with -funroll-loops
even for -O3.  After that, we notice there are some performance degradations on
SPEC2006fp which caused by without web and rnreg.  This patch enable -fweb
and -frename-registers for -funroll-loops to align original behavior before
r278034.

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

	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
	-fweb and -frename-registers with -funroll-loops

From-SVN: r279725
---
 gcc/ChangeLog              |  5 +++++
 gcc/config/rs6000/rs6000.c | 15 +++++++++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6023ccabe78c..525a8f013d81 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-24  Jiufu Guo  <guojiufu@linux.ibm.com>
+
+	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
+	-fweb and -frename-registers with -funroll-loops
+
 2019-12-22  Gerald Pfeifer  <gerald@pfeifer.com>
 
 	* doc/invoke.texi (-flto): Use "compile time" as a noun.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 9dd09b95902e..5ee426cb1da2 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4538,12 +4538,19 @@ rs6000_option_override_internal (bool global_init_p)
 			   param_sched_pressure_algorithm,
 			   SCHED_PRESSURE_MODEL);
 
-      /* Explicit -funroll-loops turns -munroll-only-small-loops off.  */
-      if (((global_options_set.x_flag_unroll_loops && flag_unroll_loops)
+      /* Explicit -funroll-loops turns -munroll-only-small-loops off, and
+	 turns -fweb and -frename-registers on.  */
+      if ((global_options_set.x_flag_unroll_loops && flag_unroll_loops)
 	   || (global_options_set.x_flag_unroll_all_loops
 	       && flag_unroll_all_loops))
-	  && !global_options_set.x_unroll_only_small_loops)
-	unroll_only_small_loops = 0;
+	{
+	  if (!global_options_set.x_unroll_only_small_loops)
+	    unroll_only_small_loops = 0;
+	  if (!global_options_set.x_flag_rename_registers)
+	    flag_rename_registers = 1;
+	  if (!global_options_set.x_flag_web)
+	    flag_web = 1;
+	}
 
       /* If using typedef char *va_list, signal that
 	 __builtin_va_start (&ap, 0) can be optimized to
-- 
GitLab