We present a simple and novel framework for generating blocked codes for high-performance machines with a memory hierarchy. Unlike traditional compiler techniques like tiling, which are based on reasoning about the control ow of programs, our techniques are based on reasoning directly about the ow of data through the memory hierarchy. Our data-centric transformations permit a more direct solution to the problem of enhancing data localitythan current control-centric techniques do, and generalize easily to multiple levels of memory hierarchy. We buttress these claims with performance numbers for standard benchmarks from the problem domain of dense numerical linear algebra. The simplicity and intuitive appeal of our approach should make it attractiveto compilerwriters as wellas to library writers.