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>