aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2011-01-18 16:56:41 +0000
committerSebastian Pop <sebastian.pop@amd.com>2011-01-18 16:56:41 +0000
commitbe7569a039564191b0f4e4b5ab805d8e213bbb7e (patch)
tree55d5f81b7c77d801dd903aec254ff3c4f2a937be
parenteb48f73a14adde52499cf5335beb2ff8da25077a (diff)
Allow several reductions in a reduction PBB.
2011-01-17 Sebastian Pop <sebastian.pop@amd.com> * graphite-dependences.c (reduction_dr_1): Allow several reductions in a reduction PBB. * graphite-sese-to-poly.c (split_reduction_stmt): Do not split PBBs that have already been marked as PBB_IS_REDUCTION. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/graphite@168955 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.graphite7
-rw-r--r--gcc/graphite-dependences.c7
-rw-r--r--gcc/graphite-sese-to-poly.c4
3 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 7cf92a5024c..0167f22c346 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,5 +1,12 @@
2011-01-17 Sebastian Pop <sebastian.pop@amd.com>
+ * graphite-dependences.c (reduction_dr_1): Allow several reductions
+ in a reduction PBB.
+ * graphite-sese-to-poly.c (split_reduction_stmt): Do not split PBBs
+ that have already been marked as PBB_IS_REDUCTION.
+
+2011-01-17 Sebastian Pop <sebastian.pop@amd.com>
+
* graphite-scop-detection.c (same_close_phi_node): New.
(remove_duplicate_close_phi): New.
(make_close_phi_nodes_unique): New.
diff --git a/gcc/graphite-dependences.c b/gcc/graphite-dependences.c
index 1820d8bda97..6129905ce15 100644
--- a/gcc/graphite-dependences.c
+++ b/gcc/graphite-dependences.c
@@ -571,10 +571,11 @@ reduction_dr_1 (poly_bb_p pbb1, poly_dr_p pdr1, poly_dr_p pdr2)
poly_dr_p pdr;
FOR_EACH_VEC_ELT (poly_dr_p, PBB_DRS (pbb1), i, pdr)
- if (PDR_TYPE (pdr) == PDR_WRITE)
- break;
+ if (PDR_TYPE (pdr) == PDR_WRITE
+ && same_pdr_p (pdr, pdr1) && same_pdr_p (pdr, pdr2))
+ return true;
- return same_pdr_p (pdr, pdr1) && same_pdr_p (pdr, pdr2);
+ return false;
}
/* Return true when the data dependence relation between the data
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 88eee71f757..c57802507fc 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2640,7 +2640,9 @@ split_reduction_stmt (scop_p scop, gimple stmt)
/* Do not split basic blocks with no writes to memory: the reduction
will be the only write to memory. */
- if (nb_data_writes_in_bb (bb) == 0)
+ if (nb_data_writes_in_bb (bb) == 0
+ /* Or if we have already marked BB as a reduction. */
+ || PBB_IS_REDUCTION (pbb_from_bb (bb)))
return bb;
e1 = split_pbb (scop, pbb, bb, stmt);