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.