The Program Dependence Graph and Its Use in Optimization

The Program Dependence Graph and Its Use in Optimization

July 1987 | JEANNE FERRANTE, KARL J. OTTENSTEIN, JOE D. WARREN
The Program Dependence Graph (PDG) is an intermediate program representation that explicitly captures both data and control dependences for each operation in a program. It allows for efficient optimization by connecting computationally related parts of the program, enabling a single walk of these dependences to perform many optimizations. The PDG supports transformations such as vectorization and loop unrolling uniformly for both control and data dependences. It also facilitates incremental optimization, where transformations can be triggered by one another and applied only to affected dependences. The PDG is constructed by analyzing the control flow graph to determine control dependences and using data flow analysis to determine data dependences. Control dependences are derived from the control flow graph, while data dependences are derived from data flow analysis. The PDG allows for the representation of both data and control dependences in a single graph, making it suitable for various optimizations such as code motion, loop fusion, and vectorization. The PDG is particularly useful for optimizing programs for vector or parallel machines, as it enables the detection of parallelism and the efficient execution of code. It also supports hierarchical views of the program, allowing for the summarization of large sections of the program with respect to both control and data dependence. The PDG has been used in various applications, including the detection of parallelism, node splitting, code motion, and loop fusion. It has also been used in software development environments for tasks such as debugging and incremental data flow analysis. The PDG is constructed by first determining control dependences using post-dominator trees and then determining data dependences using data flow analysis. The PDG allows for the efficient representation of program dependences and supports a wide range of optimizations. It has been shown to be more efficient than other program representations for certain optimizations, particularly in the context of vectorization and parallelism. The PDG is also useful for interprocedural analysis, allowing for the analysis of programs across multiple procedures. The PDG has been used in various studies to evaluate its efficiency and effectiveness in optimizing programs.The Program Dependence Graph (PDG) is an intermediate program representation that explicitly captures both data and control dependences for each operation in a program. It allows for efficient optimization by connecting computationally related parts of the program, enabling a single walk of these dependences to perform many optimizations. The PDG supports transformations such as vectorization and loop unrolling uniformly for both control and data dependences. It also facilitates incremental optimization, where transformations can be triggered by one another and applied only to affected dependences. The PDG is constructed by analyzing the control flow graph to determine control dependences and using data flow analysis to determine data dependences. Control dependences are derived from the control flow graph, while data dependences are derived from data flow analysis. The PDG allows for the representation of both data and control dependences in a single graph, making it suitable for various optimizations such as code motion, loop fusion, and vectorization. The PDG is particularly useful for optimizing programs for vector or parallel machines, as it enables the detection of parallelism and the efficient execution of code. It also supports hierarchical views of the program, allowing for the summarization of large sections of the program with respect to both control and data dependence. The PDG has been used in various applications, including the detection of parallelism, node splitting, code motion, and loop fusion. It has also been used in software development environments for tasks such as debugging and incremental data flow analysis. The PDG is constructed by first determining control dependences using post-dominator trees and then determining data dependences using data flow analysis. The PDG allows for the efficient representation of program dependences and supports a wide range of optimizations. It has been shown to be more efficient than other program representations for certain optimizations, particularly in the context of vectorization and parallelism. The PDG is also useful for interprocedural analysis, allowing for the analysis of programs across multiple procedures. The PDG has been used in various studies to evaluate its efficiency and effectiveness in optimizing programs.
Reach us at info@study.space