Array data dependence analysis methods generate false dependences that
can prevent useful program transformations.
For example, there is a flow dependence from an array access
to
an array access
if and only if (1) A is executed with iteration
vector I, (2) B is executed with iteration vector J, (3)
writes to the same location as is read by
, (4)
is
executed before
and (5) there is no write to the location read
by
between the execution of
and
.
Most array data dependence algorithms ignore the last criterion.
While ignoring this criterion does not change the total order imposed
by dependences, it does cause flow dependence to become contained
with output dependences.
In order to make effective use of caches or distributed memories, a
compiler must have accurate information about the flow of information
in a program.
These false dependence can be eliminated by formulating them by using
presburger formulas.
The paper [2] describe the how to extend the Omega test so that it can
answer these queries and allow to eliminate these false data
dependences.