  Analyzing array-based computations to determine data dependences is useful
for many applications including automatic parallelization, race detection,
computation and communication overlap, verification, and shape analysis. For
sparse matrix codes, array data dependence analysis is made more difficult by
the use of index arrays that make it possible to store only the nonzero entries
of the matrix (e.g., in A[B[i]], B is an index array). Here, dependence
analysis is often stymied by such indirect array accesses due to the values of
the index array not being available at compile time. Consequently, many
dependences cannot be proven unsatisfiable or determined until runtime.
Nonetheless, index arrays in sparse matrix codes often have properties such as
monotonicity of index array elements that can be exploited to reduce the amount
of runtime analysis needed. In this paper, we contribute a formulation of array
data dependence analysis that includes encoding index array properties as
universally quantified constraints. This makes it possible to leverage existing
SMT solvers to determine whether such dependences are unsatisfiable and
significantly reduces the number of dependences that require runtime analysis
in a set of eight sparse matrix kernels. Another contribution is an algorithm
for simplifying the remaining satisfiable data dependences by discovering
equalities and/or subset relationships. These simplifications are essential to
make a runtime-inspection-based approach feasible.
