isl_scheduler.c: split_scaled: do not enforce relative shifts
commit68cd8808fffbbc2c9a1cc7ad162c2a4f08516b89
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 31 Mar 2017 07:12:50 +0000 (31 09:12 +0200)
committerSven Verdoolaege <sven.verdoolaege@gmail.com>
Thu, 25 May 2017 14:13:31 +0000 (25 16:13 +0200)
tree8f498b9d5336923fb5abd7f2169c7ed909c0712a
parent393c656e7dc140aec6c92dd7cc28d85ffbfd1901
isl_scheduler.c: split_scaled: do not enforce relative shifts

The Feautrier scheduler is designed to carry as many edges
as possible, but this is not strictly necessary when used
as a fallback for the Pluto-like scheduler.
In particular, if it is possible to construct a valid schedule
that results in several strongly connected components
at the next level, then the Feautrier scheduler will
scale the schedule by the number of components and
assign each component a different offset in order to also carry
the edges between the components.

split_scaled tries to detect simple cases of such scaled schedules
and scales them down.  The different offsets would then be used
to create a sequence node that orders the components.
This ensures that the combination of scaled down band node
and schedule node expresses the same ordering as the original
scaled band node, but has the advantage that the coefficients
are smaller.
However, enforcing the exact same order is not required.
The scaled down band node in itself is sufficient and there
is no need to enforce the ordering of the components.

Drop the introduction of the sequence node such that
the scheduler is free to combine components at the next level.

For example, in PolyBench's doitgen, the fixed ordering
of the components would force a loop distribution that
is both not necessary and not desired.
Without the fixed ordering, the scheduler is free
to combine the components and effectively prevent
the loop distribution.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
isl_scheduler.c