diff mbox

Fix PR45314: backporting a patch from 4.6

Message ID AANLkTimVesYyan3ogO9J5n1UMhpLhw9SQmoVkMJkPbf4@mail.gmail.com
State New
Headers show

Commit Message

Sebastian Pop Nov. 8, 2010, 9:41 p.m. UTC
Hi,

The attached patch back-ports a change from the 4.6 changes
to Graphite that fixed http://gcc.gnu.org/PR45314
Passed bootstrap and test on amd64-linux.
Ok for the 4.5 branch?

Thanks,
Sebastian

Comments

Richard Biener Nov. 9, 2010, 10:22 a.m. UTC | #1
On Mon, 8 Nov 2010, Sebastian Pop wrote:

> Hi,
> 
> The attached patch back-ports a change from the 4.6 changes
> to Graphite that fixed http://gcc.gnu.org/PR45314
> Passed bootstrap and test on amd64-linux.
> Ok for the 4.5 branch?

Ok.

Thanks,
Richard.
diff mbox

Patch

From 1b7565f4c7a1a72d8ad81fbb359fafb1ed370e51 Mon Sep 17 00:00:00 2001
From: Sebastian Pop <sebpop@gmail.com>
Date: Fri, 5 Nov 2010 13:15:25 -0500
Subject: [PATCH] Fix PR45314: backport revision 163123.

2010-11-04  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/45902
	Backport of revision 163132.
	* graphite-sese-to-poly.c (rewrite_phi_out_of_ssa): Always insert out
	of SSA copies on edges except for loop->latch.
---
 gcc/ChangeLog               |    7 +++++
 gcc/graphite-sese-to-poly.c |   56 ++++--------------------------------------
 2 files changed, 13 insertions(+), 50 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91096cd..89606ce 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@ 
+2010-11-04  Sebastian Pop  <sebastian.pop@amd.com>
+
+	PR tree-optimization/45902
+	Backport of revision 163132.
+	* graphite-sese-to-poly.c (rewrite_phi_out_of_ssa): Always insert out
+	of SSA copies on edges except for loop->latch.
+
 2010-11-04  Uros Bizjak  <ubizjak@gmail.com>
 
 	Revert:
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index d4bb8a3..b12210b 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2231,58 +2231,14 @@  rewrite_phi_out_of_ssa (gimple_stmt_iterator *psi)
   for (i = 0; i < gimple_phi_num_args (phi); i++)
     {
       tree arg = gimple_phi_arg_def (phi, i);
+      edge e = gimple_phi_arg_edge (phi, i);
 
-      /* Try to avoid the insertion on edges as much as possible: this
-	 would avoid the insertion of code on loop latch edges, making
-	 the pattern matching of the vectorizer happy, or it would
-	 avoid the insertion of useless basic blocks.  Note that it is
-	 incorrect to insert out of SSA copies close by their
-	 definition when they are more than two loop levels apart:
-	 for example, starting from a double nested loop
-
-	 | a = ...
-	 | loop_1
-	 |  loop_2
-	 |    b = phi (a, c)
-	 |    c = ...
-	 |  end_2
-	 | end_1
-
-	 the following transform is incorrect
-
-	 | a = ...
-	 | Red[0] = a
-	 | loop_1
-	 |  loop_2
-	 |    b = Red[0]
-	 |    c = ...
-	 |    Red[0] = c
-	 |  end_2
-	 | end_1
-
-	 whereas inserting the copy on the incoming edge is correct
-
-	 | a = ...
-	 | loop_1
-	 |  Red[0] = a
-	 |  loop_2
-	 |    b = Red[0]
-	 |    c = ...
-	 |    Red[0] = c
-	 |  end_2
-	 | end_1
-      */
-      if (TREE_CODE (arg) == SSA_NAME
-	  && is_gimple_reg (arg)
-	  && gimple_bb (SSA_NAME_DEF_STMT (arg))
-	  && (flow_bb_inside_loop_p (bb->loop_father,
-				     gimple_bb (SSA_NAME_DEF_STMT (arg)))
-	      || flow_bb_inside_loop_p (loop_outer (bb->loop_father),
-					gimple_bb (SSA_NAME_DEF_STMT (arg)))))
-	insert_out_of_ssa_copy (zero_dim_array, arg);
+      /* Avoid the insertion of code in the loop latch to please the
+	 pattern matching of the vectorizer.  */
+      if (e->src == bb->loop_father->latch)
+ 	insert_out_of_ssa_copy (zero_dim_array, arg);
       else
-	insert_out_of_ssa_copy_on_edge (gimple_phi_arg_edge (phi, i),
-					zero_dim_array, arg);
+	insert_out_of_ssa_copy_on_edge (e, zero_dim_array, arg);
     }
 
   var = force_gimple_operand (zero_dim_array, &stmts, true, NULL_TREE);
-- 
1.7.0.4