The dependence analysis approach we have studied so far can be used to
determine the validity of the loop transformations needed for
high performance.
This does not tell us which transformations are optimal in a
particular situation.
As we saw with matrix multiplication, several transformations
may be needed to reach the best code.
One approach is to try all the valid transformations, and
evaluate the results using metrics of parallelism and locality.
This ``generate and test'' approach is not attractive because
of the large number of possibilities -- many of them uninteresting.