Commit 4454141a by Sebastian Pop Committed by Sebastian Pop

graphite-dependences.c (pddr_transformed_scattering): New.

2009-10-17  Sebastian Pop  <sebastian.pop@amd.com>

	* graphite-dependences.c (pddr_transformed_scattering): New.
	(dot_original_deps_stmt_1): New.
	(dot_transformed_deps_stmt_1): New.
	(dot_deps_stmt_1): Call dot_original_deps_stmt_1 and
	dot_transformed_deps_stmt_1.
	(dot_original_deps): New.
	(dot_transformed_deps): New.
	(dot_deps_1): Call dot_original_deps and dot_transformed_deps.

From-SVN: r154607
parent dd61070d
2009-10-17 Sebastian Pop <sebastian.pop@amd.com> 2009-10-17 Sebastian Pop <sebastian.pop@amd.com>
* graphite-dependences.c (pddr_transformed_scattering): New.
(dot_original_deps_stmt_1): New.
(dot_transformed_deps_stmt_1): New.
(dot_deps_stmt_1): Call dot_original_deps_stmt_1 and
dot_transformed_deps_stmt_1.
(dot_original_deps): New.
(dot_transformed_deps): New.
(dot_deps_1): Call dot_original_deps and dot_transformed_deps.
2009-10-17 Sebastian Pop <sebastian.pop@amd.com>
* graphite-dependences.c (reduction_dr_1): Remove wrong * graphite-dependences.c (reduction_dr_1): Remove wrong
assert: reduction BBs can have multiple reduction writes assert: reduction BBs can have multiple reduction writes
to memory. to memory. interchange-3.f90 is an example.
2009-10-17 Sebastian Pop <sebastian.pop@amd.com> 2009-10-17 Sebastian Pop <sebastian.pop@amd.com>
......
...@@ -515,8 +515,8 @@ static bool ...@@ -515,8 +515,8 @@ static bool
poly_drs_may_alias_p (poly_dr_p pdr1, poly_dr_p pdr2); poly_drs_may_alias_p (poly_dr_p pdr1, poly_dr_p pdr2);
/* Returns the PDDR corresponding to the original schedule, or NULL if /* Returns the PDDR corresponding to the original schedule, or NULL if
the dependence relation is empty or unknown (Can't judge dependency the dependence relation is empty or unknown (cannot judge dependency
under polyhedral model. */ under polyhedral model). */
static poly_ddr_p static poly_ddr_p
pddr_original_scattering (poly_bb_p pbb1, poly_bb_p pbb2, pddr_original_scattering (poly_bb_p pbb1, poly_bb_p pbb2,
...@@ -541,6 +541,34 @@ pddr_original_scattering (poly_bb_p pbb1, poly_bb_p pbb2, ...@@ -541,6 +541,34 @@ pddr_original_scattering (poly_bb_p pbb1, poly_bb_p pbb2,
return pddr; return pddr;
} }
/* Returns the PDDR corresponding to the transformed schedule, or NULL if
the dependence relation is empty or unknown (cannot judge dependency
under polyhedral model). */
static poly_ddr_p
pddr_transformed_scattering (poly_bb_p pbb1, poly_bb_p pbb2,
poly_dr_p pdr1, poly_dr_p pdr2)
{
poly_ddr_p pddr;
ppl_Pointset_Powerset_C_Polyhedron_t d1 = PBB_DOMAIN (pbb1);
ppl_Pointset_Powerset_C_Polyhedron_t d2 = PBB_DOMAIN (pbb2);
ppl_Polyhedron_t st1 = PBB_ORIGINAL_SCATTERING (pbb1);
ppl_Polyhedron_t st2 = PBB_ORIGINAL_SCATTERING (pbb2);
if ((pdr_read_p (pdr1) && pdr_read_p (pdr2))
|| PDR_BASE_OBJECT_SET (pdr1) != PDR_BASE_OBJECT_SET (pdr2)
|| PDR_NB_SUBSCRIPTS (pdr1) != PDR_NB_SUBSCRIPTS (pdr2))
return NULL;
pddr = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, st1, st2,
true, false);
if (pddr_is_empty (pddr))
return NULL;
return pddr;
}
/* Return true when the data dependence relation between the data /* Return true when the data dependence relation between the data
references PDR1 belonging to PBB1 and PDR2 is part of a references PDR1 belonging to PBB1 and PDR2 is part of a
reduction. */ reduction. */
...@@ -829,18 +857,16 @@ dependency_between_pbbs_p (poly_bb_p pbb1, poly_bb_p pbb2, int level) ...@@ -829,18 +857,16 @@ dependency_between_pbbs_p (poly_bb_p pbb1, poly_bb_p pbb2, int level)
return false; return false;
} }
/* Pretty print to FILE all the data dependences of SCoP in DOT /* Pretty print to FILE all the original data dependences of SCoP in
format. */ DOT format. */
static void static void
dot_deps_stmt_1 (FILE *file, scop_p scop) dot_original_deps_stmt_1 (FILE *file, scop_p scop)
{ {
int i, j, k, l; int i, j, k, l;
poly_bb_p pbb1, pbb2; poly_bb_p pbb1, pbb2;
poly_dr_p pdr1, pdr2; poly_dr_p pdr1, pdr2;
fputs ("digraph all {\n", file);
for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++) for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++)
for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++) for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++)
{ {
...@@ -848,36 +874,104 @@ dot_deps_stmt_1 (FILE *file, scop_p scop) ...@@ -848,36 +874,104 @@ dot_deps_stmt_1 (FILE *file, scop_p scop)
for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++) for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++)
if (pddr_original_scattering (pbb1, pbb2, pdr1, pdr2)) if (pddr_original_scattering (pbb1, pbb2, pdr1, pdr2))
{ {
fprintf (file, "S%d -> S%d\n", fprintf (file, "OS%d -> OS%d\n",
pbb_index (pbb1), pbb_index (pbb2)); pbb_index (pbb1), pbb_index (pbb2));
goto done; goto done;
} }
done:; done:;
} }
}
fputs ("}\n\n", file); /* Pretty print to FILE all the transformed data dependences of SCoP in
DOT format. */
static void
dot_transformed_deps_stmt_1 (FILE *file, scop_p scop)
{
int i, j, k, l;
poly_bb_p pbb1, pbb2;
poly_dr_p pdr1, pdr2;
for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++)
for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++)
{
for (k = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb1), k, pdr1); k++)
for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++)
if (pddr_transformed_scattering (pbb1, pbb2, pdr1, pdr2))
{
fprintf (file, "TS%d -> TS%d\n",
pbb_index (pbb1), pbb_index (pbb2));
goto done;
}
done:;
}
} }
/* Pretty print to FILE all the data dependences of SCoP in DOT /* Pretty print to FILE all the data dependences of SCoP in DOT
format. */ format. */
static void static void
dot_deps_1 (FILE *file, scop_p scop) dot_deps_stmt_1 (FILE *file, scop_p scop)
{
fputs ("digraph all {\n", file);
dot_original_deps_stmt_1 (file, scop);
dot_transformed_deps_stmt_1 (file, scop);
fputs ("}\n\n", file);
}
/* Pretty print to FILE all the original data dependences of SCoP in
DOT format. */
static void
dot_original_deps (FILE *file, scop_p scop)
{ {
int i, j, k, l; int i, j, k, l;
poly_bb_p pbb1, pbb2; poly_bb_p pbb1, pbb2;
poly_dr_p pdr1, pdr2; poly_dr_p pdr1, pdr2;
fputs ("digraph all {\n", file);
for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++) for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++)
for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++) for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++)
for (k = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb1), k, pdr1); k++) for (k = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb1), k, pdr1); k++)
for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++) for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++)
if (pddr_original_scattering (pbb1, pbb2, pdr1, pdr2)) if (pddr_original_scattering (pbb1, pbb2, pdr1, pdr2))
fprintf (file, "S%d_D%d -> S%d_D%d\n", fprintf (file, "OS%d_D%d -> OS%d_D%d\n",
pbb_index (pbb1), PDR_ID (pdr1), pbb_index (pbb1), PDR_ID (pdr1),
pbb_index (pbb2), PDR_ID (pdr2)); pbb_index (pbb2), PDR_ID (pdr2));
}
/* Pretty print to FILE all the transformed data dependences of SCoP in
DOT format. */
static void
dot_transformed_deps (FILE *file, scop_p scop)
{
int i, j, k, l;
poly_bb_p pbb1, pbb2;
poly_dr_p pdr1, pdr2;
for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb1); i++)
for (j = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), j, pbb2); j++)
for (k = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb1), k, pdr1); k++)
for (l = 0; VEC_iterate (poly_dr_p, PBB_DRS (pbb2), l, pdr2); l++)
if (pddr_transformed_scattering (pbb1, pbb2, pdr1, pdr2))
fprintf (file, "TS%d_D%d -> TS%d_D%d\n",
pbb_index (pbb1), PDR_ID (pdr1),
pbb_index (pbb2), PDR_ID (pdr2));
}
/* Pretty print to FILE all the data dependences of SCoP in DOT
format. */
static void
dot_deps_1 (FILE *file, scop_p scop)
{
fputs ("digraph all {\n", file);
dot_original_deps (file, scop);
dot_transformed_deps (file, scop);
fputs ("}\n\n", file); fputs ("}\n\n", file);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment