isl_schedule_constraints: split proximity constraints into coincidence/proximity
Before this commit, the only way to tell the schedule to try and
schedule pairs of iterations together was to add the pair to the
proximity constraints hoping that the extreme case of zero dependence
distance can be reached over all proximity constraints.
This fortuitous case would result in the "zero_distance" of a band member
being set.
This works out reasonably well for flow dependences for which you
typically want to minimize the dependence distance and where having
a zero dependence distance may allow parallelization.
There are however cases where only one of these two effects is desired.
For example, false dependences affect parallelism, but
you may or may not be interested in minimizing the dependence
distance over them.
On the other hand, you may want to add input dependences to
the proximity constraints, but they should not affect parallelism.
We therefore split the proximity constraints into proximity and
coincidence constraints. The new proximity constraints have
the same effect of communicating a desire to minimize dependence
distances as the original proximity constraints, but they no longer
affect any "zero_distance" property.
Instead, the coincidence constraints can be used to express
a desire to schedule pairs of domain iterations together.
Success results in the "coincident" property being set on the band member.
During the construction of a band, the scheduler first tries to
satisfy the coincidence constraints. If this fails, then it tries
again without the coincidence constraints.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>