Unlike loop transformations, which must satisfy data dependences, data transforms are not limited by any ordering constraints. On the other hand, loop transforms have the advantage that they affect only one specific loop; performing an array data transform requires that all accesses to the array in the entire program use the new layout. Current programming languages like C and FORTRAN have features that can make these transformations difficult. The compiler cannot restructure an array unless it can guarantee that all possible accesses of the same data can be updated accordingly. For example, in FORTRAN, the storage for a common block array in one procedure can be re-used to form a completely different set of data structures in another procedure. In C, pointer arithmetic and type casting can prevent data transformations.