aboutsummaryrefslogtreecommitdiff
path: root/gcc/graphite-dependences.c
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2009-11-25 04:54:30 +0000
committerSebastian Pop <sebastian.pop@amd.com>2009-11-25 04:54:30 +0000
commitd03941b07b4d1321fe0c956baa8e36c180756932 (patch)
treeb5e1d1cd97c6ef8d389112a92df304c433f8bd89 /gcc/graphite-dependences.c
parent8880a1aa0d8e9de2ff7252ffb20dcb83dffad0d8 (diff)
2009-10-05 Sebastian Pop <sebastian.pop@amd.com>
* graphite-dependences.c (reduction_ddr): New. (graphite_legal_transform_bb): Call reduction_ddr. * graphite-poly.c (new_poly_bb): Pass a new bool parameter. Initialize PBB_IS_REDUCTION. * graphite-poly.h (struct poly_bb): New bool field is_reduction. (PBB_IS_REDUCTION): New. (new_poly_bb): Update declaration. * graphite-scop-detection.h (build_scop_bbs): Removed. (nb_reductions_in_loop): Removed. * graphite-sese-to-poly.c (try_generate_gimple_bb): Pass a sbitmap parameter for reductions. (try_generate_gimple_bb): Update call to new_poly_bb. (build_scop_bbs_1): Same. (build_scop_bbs): Same. (gsi_for_phi_node): New. (scalar_close_phi_node_p): Remove gcc_assert. (split_reduction_stmt): New. (is_reduction_operation_p): New. (phi_contains_arg): New. (follow_ssa_with_commutative_ops): New. (detect_commutative_reduction_arg): New. (detect_commutative_reduction_assign): New. (follow_inital_value_to_phi): New. (edge_initial_value_for_loop_phi): New. (initial_value_for_loop_phi): New. (detect_commutative_reduction): New. (translate_scalar_reduction_to_array_for_stmt): New. (insert_copyout): New. (insert_copyin): New. (translate_scalar_reduction_to_array): New. (rewrite_commutative_reductions_out_of_ssa_close_phi): New. (rewrite_commutative_reductions_out_of_ssa_loop): New. (rewrite_commutative_reductions_out_of_ssa): New. (build_poly_scop): Call rewrite_commutative_reductions_out_of_ssa. * sese.h (split_region_for_bb): New. * gcc.dg/graphite/graphite.exp (DEFAULT_CFLAGS_GRAPHITE_BLOCK): Add -ffast-math. * gcc.dg/graphite/interchange-1.c: Fix format. * gcc.dg/graphite/interchange-10.c: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@154561 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/graphite-dependences.c')
-rw-r--r--gcc/graphite-dependences.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/graphite-dependences.c b/gcc/graphite-dependences.c
index f7b8c737daf..2e777b3508d 100644
--- a/gcc/graphite-dependences.c
+++ b/gcc/graphite-dependences.c
@@ -585,6 +585,15 @@ graphite_legal_transform_dr (poly_bb_p pbb1, poly_bb_p pbb2,
return is_empty_p;
}
+/* Return true when the data dependence relation for PBB1 and PBB2 is
+ part of a reduction. */
+
+static inline bool
+reduction_ddr (poly_bb_p pbb1, poly_bb_p pbb2)
+{
+ return pbb1 == pbb2 && PBB_IS_REDUCTION (pbb1);
+}
+
/* Iterates over the data references of PBB1 and PBB2 and detect
whether the transformed schedule is correct. */
@@ -600,6 +609,9 @@ graphite_legal_transform_bb (poly_bb_p pbb1, poly_bb_p pbb2)
if (!PBB_PDR_DUPLICATES_REMOVED (pbb2))
pbb_remove_duplicate_pdrs (pbb2);
+ if (reduction_ddr (pbb1, pbb2))
+ return true;
+
for (i = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb1), i, pdr1); i++)
for (j = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), j, pdr2); j++)
if (!graphite_legal_transform_dr (pbb1, pbb2, pdr1, pdr2))