mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-28 06:14:10 +08:00
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
This commit is contained in:
parent
0b040072d6
commit
bcab4e19da
@ -1,3 +1,11 @@
|
||||
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.
|
||||
|
||||
2009-01-16 Sebastian Pop <sebastian.pop@amd.com>
|
||||
Tobias Grosser <tobi.grosser@amd.com>
|
||||
|
||||
|
@ -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.
|
||||
|
||||
The STATIC_SCHEDULE is defined like this:
|
||||
@ -2508,34 +2531,29 @@ build_scop_dynamic_schedules (scop_p scop)
|
||||
static void
|
||||
build_scop_canonical_schedules (scop_p scop)
|
||||
{
|
||||
int i, j;
|
||||
int i;
|
||||
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++)
|
||||
{
|
||||
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
|
||||
after OFFSET. */
|
||||
|
||||
for (j = offset + 1; j < nb; j++)
|
||||
if (SCOP_STATIC_SCHEDULE (scop)[j])
|
||||
{
|
||||
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];
|
||||
loops_previous = GBB_LOOPS (gb);
|
||||
memset (&(static_schedule[prefix + 1]), 0, sizeof (int) * (nb_loops - prefix));
|
||||
++static_schedule[prefix];
|
||||
GBB_STATIC_SCHEDULE (gb) = lambda_vector_new (nb + 1);
|
||||
lambda_vector_copy (static_schedule,
|
||||
GBB_STATIC_SCHEDULE (gb), nb + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6049,7 +6067,6 @@ graphite_transform_loops (void)
|
||||
if (!build_scop_loop_nests (scop))
|
||||
continue;
|
||||
|
||||
build_scop_canonical_schedules (scop);
|
||||
build_bb_loops (scop);
|
||||
|
||||
if (!build_scop_conditions (scop))
|
||||
@ -6071,6 +6088,7 @@ graphite_transform_loops (void)
|
||||
continue;
|
||||
|
||||
add_conditions_to_constraints (scop);
|
||||
build_scop_canonical_schedules (scop);
|
||||
|
||||
build_scop_data_accesses (scop);
|
||||
build_scop_dynamic_schedules (scop);
|
||||
|
Loading…
Reference in New Issue
Block a user