isl_access_info_compute_flow: support "kill" accesses
commit08be2d48bc0b825f364bd0c6da05ab092517cdda
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 1 Feb 2017 16:52:08 +0000 (1 17:52 +0100)
committerSven Verdoolaege <sven.verdoolaege@gmail.com>
Mon, 12 Jun 2017 13:48:50 +0000 (12 15:48 +0200)
treebb883a9495c797e7dce1a97ca5aa731463b3dc33
parentbebd4175ed72b6c1c633cd163f98989ab98be3fa
isl_access_info_compute_flow: support "kill" accesses

Kills have the same effect as must-sources in that they
block any dependence between an earlier source and a later source,
but they do not by themselves result in dependences.
Kills are useful in cases where only the dependence blocking effect
is required.

It was already possible for the user to add the kills
to the must-sources and then to remove the resulting
spurious dependences from the result, but this is not
very elegant.
Add direct support for kills.

In fact, make kills the primary interface, with must-sources
considered to be both may-sources and kills since the effect
of kills is actually easier to explain than that of must-sources.

The initial implementation does exactly do the above treating
kills as must-sources and then removing spurious dependences,
but this could be improved in the future.
For example, the pure kills (those that do not overlap
with the actual must-sources) could be explicitly marked
during the computation such that the resulting dependences
would not even have to be added to the results in the first place.
It would also be possible to not even compute may-dependences
derived from kills.

Signed-off-by: Sven Verdoolaege <sven.verdoolaege@gmail.com>
27 files changed:
doc/user.pod
include/isl/flow.h
isl_flow.c
test_inputs/flow/kill_loop-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_loop-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_loop.ai [new file with mode: 0644]
test_inputs/flow/kill_loop.flow [new file with mode: 0644]
test_inputs/flow/kill_loop2-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_loop2-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_loop2.ai [new file with mode: 0644]
test_inputs/flow/kill_loop2.flow [new file with mode: 0644]
test_inputs/flow/kill_loop3-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_loop3-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_loop3.ai [new file with mode: 0644]
test_inputs/flow/kill_loop3.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop2-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop2-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop2.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop2.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop3-tree.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop3-tree.flow [new file with mode: 0644]
test_inputs/flow/kill_may_loop3.ai [new file with mode: 0644]
test_inputs/flow/kill_may_loop3.flow [new file with mode: 0644]