Fix PR56605

Submitted by William J. Schmidt on March 13, 2013, 5:07 p.m.

Details

Message ID 1363194474.4027.12.camel@gnopaine
State New
Headers show

Commit Message

William J. Schmidt March 13, 2013, 5:07 p.m.
This patch (suggested by Steven B) removes some redundant loop
assertions that are currently being missed, resulting in redundant
branches appearing prior to many loops on powerpc64.  Bootstrapped and
tested with no new regressions on powerpc64-unknown-linux-gnu.  Ok for
trunk?

Thanks,
Bill


gcc:

2013-03-13  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
	    Steven Bosscher <steven@gcc.gnu.org>

	PR rtl-optimization/56605
	* loop-iv.c (implies_p): Handle equal RTXs and subregs.

gcc/testsuite:

2013-03-13  Bill Schmidt  wschmidt@linux.vnet.ibm.com>

	PR rtl-optimization/56605
	* gcc.target/powerpc/pr56605.c: New.

Comments

Eric Botcazou March 18, 2013, 4:31 p.m.
> 2013-03-13  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> 	    Steven Bosscher <steven@gcc.gnu.org>
> 
> 	PR rtl-optimization/56605
> 	* loop-iv.c (implies_p): Handle equal RTXs and subregs.
> 
> gcc/testsuite:
> 
> 2013-03-13  Bill Schmidt  wschmidt@linux.vnet.ibm.com>
> 
> 	PR rtl-optimization/56605
> 	* gcc.target/powerpc/pr56605.c: New.

OK, thanks.
William J. Schmidt March 20, 2013, 1:45 p.m.
Eric, thanks -- fixed in trunk.  Looks like I've missed the window for
4.8.0.  Is this OK for backport once 4.8 opens up again?  (Copying
Richi/Jakub as well.)

Thanks,
Bill

On Mon, 2013-03-18 at 17:31 +0100, Eric Botcazou wrote:
> > 2013-03-13  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> > 	    Steven Bosscher <steven@gcc.gnu.org>
> > 
> > 	PR rtl-optimization/56605
> > 	* loop-iv.c (implies_p): Handle equal RTXs and subregs.
> > 
> > gcc/testsuite:
> > 
> > 2013-03-13  Bill Schmidt  wschmidt@linux.vnet.ibm.com>
> > 
> > 	PR rtl-optimization/56605
> > 	* gcc.target/powerpc/pr56605.c: New.
> 
> OK, thanks.
>
Jakub Jelinek March 20, 2013, 1:50 p.m.
On Wed, Mar 20, 2013 at 08:45:16AM -0500, Bill Schmidt wrote:
> Eric, thanks -- fixed in trunk.  Looks like I've missed the window for
> 4.8.0.  Is this OK for backport once 4.8 opens up again?  (Copying
> Richi/Jakub as well.)

Not for 4.8.0 (this isn't a wrong-code, just missed-optimization, right?),
but guess for 4.8.1 it might be ok if it doesn't cause any issues on the
trunk for a few weeks.

> On Mon, 2013-03-18 at 17:31 +0100, Eric Botcazou wrote:
> > > 2013-03-13  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> > > 	    Steven Bosscher <steven@gcc.gnu.org>
> > > 
> > > 	PR rtl-optimization/56605
> > > 	* loop-iv.c (implies_p): Handle equal RTXs and subregs.
> > > 
> > > gcc/testsuite:
> > > 
> > > 2013-03-13  Bill Schmidt  wschmidt@linux.vnet.ibm.com>
> > > 
> > > 	PR rtl-optimization/56605
> > > 	* gcc.target/powerpc/pr56605.c: New.
> > 
> > OK, thanks.

	Jakub
William J. Schmidt March 20, 2013, 2 p.m.
On Wed, 2013-03-20 at 14:50 +0100, Jakub Jelinek wrote:
> On Wed, Mar 20, 2013 at 08:45:16AM -0500, Bill Schmidt wrote:
> > Eric, thanks -- fixed in trunk.  Looks like I've missed the window for
> > 4.8.0.  Is this OK for backport once 4.8 opens up again?  (Copying
> > Richi/Jakub as well.)
> 
> Not for 4.8.0 (this isn't a wrong-code, just missed-optimization, right?),
> but guess for 4.8.1 it might be ok if it doesn't cause any issues on the
> trunk for a few weeks.

Correct, just missed optimization.  OK, I'll revisit it for 4.8 sometime
next month.  Thanks!

Bill

> 
> > On Mon, 2013-03-18 at 17:31 +0100, Eric Botcazou wrote:
> > > > 2013-03-13  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> > > > 	    Steven Bosscher <steven@gcc.gnu.org>
> > > > 
> > > > 	PR rtl-optimization/56605
> > > > 	* loop-iv.c (implies_p): Handle equal RTXs and subregs.
> > > > 
> > > > gcc/testsuite:
> > > > 
> > > > 2013-03-13  Bill Schmidt  wschmidt@linux.vnet.ibm.com>
> > > > 
> > > > 	PR rtl-optimization/56605
> > > > 	* gcc.target/powerpc/pr56605.c: New.
> > > 
> > > OK, thanks.
> 
> 	Jakub
>

Patch hide | download patch | download mbox

Index: gcc/testsuite/gcc.target/powerpc/pr56605.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr56605.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/pr56605.c	(revision 0)
@@ -0,0 +1,13 @@ 
+/* PR rtl-optimization/56605 */
+/* { dg-do compile { target { powerpc64-*-* && lp64 } } } */
+/* { dg-options "-O3 -mvsx -mcpu=power7 -fno-unroll-loops -fdump-rtl-loop2_doloop" } */
+
+void foo (short* __restrict sb, int* __restrict ia)
+{
+  int i;
+  for (i = 0; i < 4000; i++)
+    ia[i] = (int) sb[i];
+}
+
+/* { dg-final { scan-rtl-dump-times "\\\(compare:CC \\\(subreg:SI \\\(reg:DI" 1 "loop2_doloop" } } */
+/* { dg-final { cleanup-rtl-dump "loop2_doloop" } } */
Index: gcc/loop-iv.c
===================================================================
--- gcc/loop-iv.c	(revision 196633)
+++ gcc/loop-iv.c	(working copy)
@@ -1496,19 +1496,26 @@  implies_p (rtx a, rtx b)
   rtx op0, op1, opb0, opb1, r;
   enum machine_mode mode;
 
+  if (rtx_equal_p (a, b))
+    return true;
+
   if (GET_CODE (a) == EQ)
     {
       op0 = XEXP (a, 0);
       op1 = XEXP (a, 1);
 
-      if (REG_P (op0))
+      if (REG_P (op0)
+	  || (GET_CODE (op0) == SUBREG
+	      && REG_P (SUBREG_REG (op0))))
 	{
 	  r = simplify_replace_rtx (b, op0, op1);
 	  if (r == const_true_rtx)
 	    return true;
 	}
 
-      if (REG_P (op1))
+      if (REG_P (op1)
+	  || (GET_CODE (op1) == SUBREG
+	      && REG_P (SUBREG_REG (op1))))
 	{
 	  r = simplify_replace_rtx (b, op1, op0);
 	  if (r == const_true_rtx)