Allow several reductions in a reduction PBB.

2011-01-25  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.

From-SVN: r169212
This commit is contained in:
Sebastian Pop 2011-01-25 06:47:21 +00:00 committed by Sebastian Pop
parent 3a292d5909
commit c513da01e3
4 changed files with 21 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2011-01-25 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-25 Sebastian Pop <sebastian.pop@amd.com>
* graphite-scop-detection.c (same_close_phi_node): New.

View file

@ -1,3 +1,10 @@
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.

View file

@ -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

View file

@ -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);