Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
Graph rewriting: an algebraic and logic approach
Handbook of theoretical computer science (vol. B)
An algebraic theory of graph reduction
Journal of the ACM (JACM)
Revisiting catamorphisms over datatypes with embedded functions (or, programs from outer space)
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Linear-Time Algorithm for Finding Tree-Decompositions of Small Treewidth
SIAM Journal on Computing
Algebra of programming
Functional programming with graphs
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Tupling calculation eliminates multiple data traversals
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Data flow analysis is model checking of abstract interpretations
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
All structured programs have small tree width and good register allocation
Information and Computation
Register allocation in structured programs
Journal of Algorithms - Special issue on SODA '95 papers
Linear-time register allocation for a fixed number of registers
Proceedings of the ninth annual ACM-SIAM symposium on Discrete algorithms
Characterizations of Reducible Flow Graphs
Journal of the ACM (JACM)
Linear-time computability of combinatorial problems on series-parallel graphs
Journal of the ACM (JACM)
Make it practical: a generic linear-time algorithm for solving maximum-weightsum problems
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Proving correctness of compiler optimizations by temporal logic
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Universal Regular Path Queries
Higher-Order and Symbolic Computation
Data Flow Analysis as Model Checking
TACS '91 Proceedings of the International Conference on Theoretical Aspects of Computer Software
The Treewidth of Java Programs
ALENEX '02 Revised Papers from the 4th International Workshop on Algorithm Engineering and Experiments
Register allocation & spilling via graph coloring
SIGPLAN '82 Proceedings of the 1982 SIGPLAN symposium on Compiler construction
Proceedings of a symposium on Compiler optimization
Journal of Functional Programming
Register allocation by proof transformation
ESOP'03 Proceedings of the 12th European conference on Programming
Generation of efficient programs for solving maximum multi-marking problems
SAIG'01 Proceedings of the 2nd international conference on Semantics, applications, and implementation of program generation
A global progressive register allocator
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Write it recursively: a generic framework for optimal path queries
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Maximum marking problems with accumulative weight functions
ICTAC'05 Proceedings of the Second international conference on Theoretical Aspects of Computing
Proceedings of the 2nd ACM SIGPLAN workshop on Functional high-performance computing
Hi-index | 0.00 |
Program analysis is the heart of modern compilers. Most control flow analyses are reduced to the problem of finding a fixed point in a certain transition system, and such fixed point is commonly computed through an iterative procedure that repeats tracing until convergence.This paper proposes a new method to analyze programs through recursive graph traversals instead of iterative procedures, based on the fact that most programs (without spaghetti GOTO) have well-structured control flow graphs, graphs with bounded tree width. Our main techniques are; an algebraic construction of a control flow graph, called SP Term, which enables control flow analysis to be defined in a natural recursive form, and the Optimization Theorem, which enables us to compute optimal solution by dynamic programming.We illustrate our method with two examples; dead code detection and register allocation. Different from the traditional standard iterative solution, our dead code detection is described as a simple combination of bottom-up and top-down traversals on SP Term. Register allocation is more interesting, as it further requires optimality of the result. We show how the Optimization Theorem on SP Terms works to find an optimal register allocation as a certain dynamic programming.