Commit bcab4e19 by Sebastian Pop Committed by Sebastian Pop

graphite.c (compare_prefix_loops): New.

2009-01-16  Sebastian Pop  <sebastian.pop@amd.com>
	    Tobias Grosser  <tobi.grosser@amd.com>

	* graphite.c (compare_prefix_loops): New.
	(build_scop_canonical_schedules): Rewritten.
	(graphite_transform_loops): Move build_scop_canonical_schedules
	after build_scop_iteration_domain.


Co-Authored-By: Tobias Grosser <tobi.grosser@amd.com>

From-SVN: r143437
parent 0b040072
2009-01-16 Sebastian Pop <sebastian.pop@amd.com> 2009-01-16 Sebastian Pop <sebastian.pop@amd.com>
Tobias Grosser <tobi.grosser@amd.com> Tobias Grosser <tobi.grosser@amd.com>
* graphite.c (compare_prefix_loops): New.
(build_scop_canonical_schedules): Rewritten.
(graphite_transform_loops): Move build_scop_canonical_schedules
after build_scop_iteration_domain.
2009-01-16 Sebastian Pop <sebastian.pop@amd.com>
Tobias Grosser <tobi.grosser@amd.com>
* graphite.c (add_conditions_to_domain): Add the loops to * graphite.c (add_conditions_to_domain): Add the loops to
the dimension of the iteration domain. Do copy the domain the dimension of the iteration domain. Do copy the domain
only when it exists. only when it exists.
......
...@@ -2472,6 +2472,29 @@ build_scop_dynamic_schedules (scop_p scop) ...@@ -2472,6 +2472,29 @@ build_scop_dynamic_schedules (scop_p scop)
} }
} }
/* Returns the number of loops that are identical at the beginning of
the vectors A and B. */
static int
compare_prefix_loops (VEC (loop_p, heap) *a, VEC (loop_p, heap) *b)
{
int i;
loop_p ea;
int lb;
if (!a || !b)
return 0;
lb = VEC_length (loop_p, b);
for (i = 0; VEC_iterate (loop_p, a, i, ea); i++)
if (i >= lb
|| ea != VEC_index (loop_p, b, i))
return i;
return 0;
}
/* Build for BB the static schedule. /* Build for BB the static schedule.
The STATIC_SCHEDULE is defined like this: The STATIC_SCHEDULE is defined like this:
...@@ -2508,34 +2531,29 @@ build_scop_dynamic_schedules (scop_p scop) ...@@ -2508,34 +2531,29 @@ build_scop_dynamic_schedules (scop_p scop)
static void static void
build_scop_canonical_schedules (scop_p scop) build_scop_canonical_schedules (scop_p scop)
{ {
int i, j; int i;
graphite_bb_p gb; graphite_bb_p gb;
int nb = scop_nb_loops (scop) + 1; int nb_loops = scop_nb_loops (scop);
lambda_vector static_schedule = lambda_vector_new (nb_loops + 1);
VEC (loop_p, heap) *loops_previous = NULL;
SCOP_STATIC_SCHEDULE (scop) = lambda_vector_new (nb); /* We have to start schedules at 0 on the first component and
because we cannot compare_prefix_loops against a previous loop,
prefix will be equal to zero, and that index will be
incremented before copying. */
static_schedule[0] = -1;
for (i = 0; VEC_iterate (graphite_bb_p, SCOP_BBS (scop), i, gb); i++) for (i = 0; VEC_iterate (graphite_bb_p, SCOP_BBS (scop), i, gb); i++)
{ {
int offset = nb_loops_around_gb (gb); int prefix = compare_prefix_loops (loops_previous, GBB_LOOPS (gb));
int nb = gbb_nb_loops (gb);
/* After leaving a loop, it is possible that the schedule is not
set at zero. This loop reinitializes components located loops_previous = GBB_LOOPS (gb);
after OFFSET. */ memset (&(static_schedule[prefix + 1]), 0, sizeof (int) * (nb_loops - prefix));
++static_schedule[prefix];
for (j = offset + 1; j < nb; j++) GBB_STATIC_SCHEDULE (gb) = lambda_vector_new (nb + 1);
if (SCOP_STATIC_SCHEDULE (scop)[j]) lambda_vector_copy (static_schedule,
{ GBB_STATIC_SCHEDULE (gb), nb + 1);
memset (&(SCOP_STATIC_SCHEDULE (scop)[j]), 0,
sizeof (int) * (nb - j));
++SCOP_STATIC_SCHEDULE (scop)[offset];
break;
}
GBB_STATIC_SCHEDULE (gb) = lambda_vector_new (offset + 1);
lambda_vector_copy (SCOP_STATIC_SCHEDULE (scop),
GBB_STATIC_SCHEDULE (gb), offset + 1);
++SCOP_STATIC_SCHEDULE (scop)[offset];
} }
} }
...@@ -6049,7 +6067,6 @@ graphite_transform_loops (void) ...@@ -6049,7 +6067,6 @@ graphite_transform_loops (void)
if (!build_scop_loop_nests (scop)) if (!build_scop_loop_nests (scop))
continue; continue;
build_scop_canonical_schedules (scop);
build_bb_loops (scop); build_bb_loops (scop);
if (!build_scop_conditions (scop)) if (!build_scop_conditions (scop))
...@@ -6071,6 +6088,7 @@ graphite_transform_loops (void) ...@@ -6071,6 +6088,7 @@ graphite_transform_loops (void)
continue; continue;
add_conditions_to_constraints (scop); add_conditions_to_constraints (scop);
build_scop_canonical_schedules (scop);
build_scop_data_accesses (scop); build_scop_data_accesses (scop);
build_scop_dynamic_schedules (scop); build_scop_dynamic_schedules (scop);
......
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