To effectively utilize the resources of parallel systems, transformations are necessarily applied by compilers to increase the degree of parallelism in program code or to improve the efficiency of exploiting parallelism. However, the interactions among the transformations as well as the interactions between transformations and scheduling are not well understood. Guidelines for applying transformations, ratios of the cost and benefit of the transformations and the design of tools that operate on the transformed code have yet to be adequately developed. This research investigates these issues. A unifying framework for parallelizing transformations and a set of dependencies that is used to specify the conditions under which a transformation may be safely applied. The framework will be described on two levels: definitional, and operational. Using the definitional level of the framework, enabling and disabling interactions among the transformations and between transformation and scheduling will be studied. The operational level of the framework will be employed in the development and prototyping of tools that generate and support transformed code, and in particular a transformation tool generator, interface tools for the generator and resulting transformer, and a symbolic bugger. Costs and benefits of transformations will be investigated using the framework. A set of guidelines will be developed for the application of transformations base on their interaction, costs, and benefits, taking into account scheduling strategies, program structure, architecture, and resources available. These tools will be designed to operate on any set of transformations expressible in the framework. The utility of the framework for user defined tranformations will be investigated. Throughout the work, experimentation will be performed comparing the framework approach to transformation with the traditional approach of hand-crafting transformations.