optionally allow live ranges to be reordered
commitbc47e699bc6cd927b2d7bc77707941c73d6751ae
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 14 Nov 2012 15:38:21 +0000 (14 16:38 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 16 Oct 2013 13:25:22 +0000 (16 15:25 +0200)
tree3ef70521c931892046d9946194b9ac88aaffb348
parent318d183b8d49294821982912bc417ff9afca5cd7
optionally allow live ranges to be reordered

Live range reordering allows for the reordering of  live ranges on the same
array elements in a particular schedule band, provided the live ranges are
local to the band (i.e., domain and range of each live range are mapped to
the same point).  In particular, this can increase the tiling opportunities
in the presence of memory reuse.

For generating GPU code, we also allow live ranges on the same scalar
to be executed in parallel.  These scalars are then mapped to registers.
Parallel execution of live ranges on non-scalar arrays is currently not
allowed as that may require array expansion.

For generating CPU code, parallel execution of live ranges is currently
not allowed at all.

Live range reordering is turned on by default.  Since the constraints
passed to the scheduler can be somewhat different, this may result
in different schedules even no live range reordering can be exploited.
In particular, the way the dependence graphs is split along SCCs
in case of a conflict is fairly arbitrary and may be affected
in arbitrary ways by the difference in constraints.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
cpu.c
gpu.c
gpu.h
polybench_test.sh.in
ppcg.c
ppcg.h
ppcg_options.c
ppcg_options.h