In
compiler theory,
dependence analysis produces execution-order constraints between statements/instructions. Broadly speaking, a statement
S2 depends on
S1 if
S1 must be executed before
S2. Broadly, there are two classes of dependencies--
control dependencies and
data dependencies.