# Application of Graph Rewriting to Optimization and Parallelization of Programs

Chapter
Part of the Computing Supplementum book series (COMPUTING, volume 3)

## Abstract

Application of Graph Rewriting to Optimization and Parallelization of Programs. Classical automatic optimization is starting with linearized intermediate code and builds up graph-like data struetures (flow graph, DAGs, data flow analysis data). Most of the information which was already known by the upper part of the compiler now has to be detected again. We start with a graph-like intermediate code in which all structural information of the source is still present. Optimization is then carried out by graph manipulations. This is sketched by some examples, namely local common subexpression elimination, motion of loop invariant computations, and induction variable elimination. The usual way in parallelization is also to build up graph-like information (data graph) from flattened code. Here, the parallelization of linear programs and microparallelization within expressions are regarded, starting again with a graph-like intermediate code. There are a lot of further tasks in the context of reliable software generation which can be efficiently performed on high-level intermediate code.

## Keywords

Basic Block Array Element Graph Transformation Program Graph Graph Grammar
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

## Zusammenfassung

Anwendung von Graphersetzungen auf Optimierung und Parallelisierung von Programmen. Bei der automatischen Optimierung von Programmen beginnt man meist mit linearisiertem Zwischencode und baut daraus, zum Teil durch aufwendige Algorithmen, graphähnliche Datenstrukturen auf. Der größte Teil der so aufgefundenen Information war dem oberen Teil des Compilers bereits bekannt, diese Information wurde aber nicht an den Zwischencode weitergegeben. Wir gehen dagegen gleich von einem graphähnlichen Zwischencode aus, der die Strukturinformation des betreffenden Quellprogramms noch vollständig enthält. Optimierungen werden dann durch Graphmanipulationen auf diesem Zwischencode durchgeführt. Wir betrachten diese Vorgehensweise an zwei Beispielen, nämlich der Elimination (lokaler) gemeinsamer Teilausdrücke und der Optimierung von Schleifen. Bei der Parallelisierung von Programmen baut man sich ebenfalls einen Graphen (Datengraphen) aus Quell- oder Zwischencode auf. Wir gehen auch hier wieder von graphähnlichem Zwischencode aus. Aus diesem Bereich betrachten wir die Parallelisierung von linearen Programmen und von Ausdrücken. Optimierung und Parallelisierung sind nur zwei Aufgaben aus dem Bereich der Erzeugung zuverlässiger und effizienter Software, die sich auf graphähnlichem Zwischencode gut durchführen lassen.

## References

1. [AU77]
2. [Ba79]
Bauer, F. L., et al.: Program development by transformation, Section III of program construction (Bauer, F. L., ed.). Lect. Notes Comp. Sei. 69, 235–492 (1979).Google Scholar
3. [BNW78]
Brendel, W., Nagl, M., Weber, D.: Implementation of sequential and parallel graph rewriting systems. Applied Computer Science 8, 79–106 (1978).Google Scholar
4. [CER79]
Claus, V., Ehrig, H., Rosen, B. K. (eds.): Graph grammars and their application to Computer science and biology. (Lect. Notes in Comp. Sei., Vol. 79.) Berlin-Heidelberg-New York: Springer 1979.
5. [FKZ79]
Farrow, R., Kennedy, K., Zucconi, L.: Graph grammars and global program data flow analysis. Techn. Rep., Dpt. Math. Sei., Rice University, Texas.Google Scholar
6. [HHS76]
Händler, W., Hofmann, F., Schneider, H. J.: A general purpose array with a broad spectrum of applications. (Informatik-Fachberichte, Vol. 4), pp. 311–335. Berlin-Heidelberg-New York: Springer 1976.Google Scholar
7. [Kn74]
Knuth, D.: Structured programming with goto statements. Computing Surveys 8,261–301 (1974).
8. [Ko76]
Kotov, V. E.: Theory of parallel programming I, Survey of practical aspects. In: Advances in Information Systems Sciences (Ton, J. T., ed.), Vol. 6, pp. 1–55. New York: Plenum Press 1976.
9. [Ku77]
Kuck, D. J.: A survey of parallel machine Organization and programming. Computing Surveys 9, 29–59 (1977).
10. [Lo76]
Loveman, D. E.: Program improvement by source to source transformation. Proc. 3rd ACM POPL Symp. 140–152 (1976).Google Scholar
11. [Na79]
Nagl, M.: Graph-Grammatiken: Theorie, Anwendungen, Implementierung. Wiesbaden: Vieweg 1979.
12. [Na80]
Nagl, M.: An incremental Compiler as component of a system for Software generation. Proc. 6th Gl Conference on Programming Languages and Program Development. (Informatik- Fachberichte, Vol. 25), pp. 29–44. Berlin-Heidelberg-New York: Springer 1980.Google Scholar
13. [Na80]
Nagl, M.: GRAPL — A programming language for handling dynamic problems on graphs. In: Discrete Struetures and Algorithms (Pape, U., ed.), pp. 25–45. München: Carl Hanser Verlag 1980.Google Scholar
14. [Nr76]
Naring’yani, A. S.: Theory of parallel programming II, Survey of formal models, as [Ko76] pp. 57–113.Google Scholar
15. [Ro77]
Rosen, B. K.: High level data flow analysis. Comm. ACM 20, 712–724 (1977).
16. [Ro79]
Rosen, B. K.: Data flow analysis for procedural languages. Journ. ACM 26, 322–344 (1979).
17. [Sn75]
Schneider, H. J.: Syntax-directed description of incremental Compilers. (Lect. Notes Comp. Sei., Vol. 26), pp. 192–201. Berlin-Heidelberg-New York: Springer 1975.Google Scholar
18. [U173]
Ullman, J. D.: Fast algorithms for the elimination of common subexpressions. Acta Informatica 2, 191–213 (1973).
19. [Wi79]
Wilhelm, R.: Computation and use of data flow information in optimizing Compilers. Acta Informatica 12, 209–225 (1979).
20. [Wu75]
Wulf, W., et al.: The Design of an Optimizing Compiler. New York: American Elsevier 1975.
21. [ZB74]
Zelkowitz, M. V., Bail, W. G.: Optimization of structured programs. Software Pract. & Exp. 4,51–57 (1974).