Eliminating Redundant Recursive Calls.
ACM Transactions on Programming Languages and Systems (TOPLAS)
The concept of a supercompiler
ACM Transactions on Programming Languages and Systems (TOPLAS) - The MIT Press scientific computation series
From function level semantics to program transformation and optimization
Proc. of the international joint conference on theory and practice of software development (TAPSOFT) Berlin, March 25-29, 1985 on Mathematical foundations of software development, Vol. 1: Colloquium on trees in algebra and programming (CAAP'85)
Rational equivalence relations
Theoretical Computer Science
Compiling Fibonacci-like recursion
ACM SIGPLAN Notices
Executing a program on the MIT tagged-token dataflow architecture
Volume II: Parallel Languages on PARLE: Parallel Architectures and Languages Europe
Formal languages
Global value numbers and redundant computations
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A parser for context free plex grammars
WG '89 Proceedings of the fifteenth international workshop on Graph-theoretic concepts in computer science
Common LISP: the language (2nd ed.)
Common LISP: the language (2nd ed.)
Handbook of theoretical computer science (vol. B)
Tutorial notes on partial evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Cancellation in context-free languages: enrichment by reduction
Theoretical Computer Science
Principled optimization of functional programs
Principled optimization of functional programs
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Variations on the Common Subexpression Problem
Journal of the ACM (JACM)
Global optimization by suppression of partial redundancies
Communications of the ACM
Towards Unifying Partial Evaluation, Deforestation, Supercompilation, and GPC
ESOP '94 Proceedings of the 5th European Symposium on Programming: Programming Languages and Systems
The Use of Metasystem Transition in Theorem Proving and Program Optimization
Proceedings of the 7th Colloquium on Automata, Languages and Programming
An introduction to the NLC way of rewriting graphs
Proceedings of the 3rd International Workshop on Graph-Grammars and Their Application to Computer Science
Experiments with a supercompiler
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
Transformations of FP program schemes
FPCA '81 Proceedings of the 1981 conference on Functional programming languages and computer architecture
Recursive and Iterative Functions for Generating Fibonacci Numbers
Recursive and Iterative Functions for Generating Fibonacci Numbers
Program Improvement by Automatic Redistribution of Intermediate Results
Program Improvement by Automatic Redistribution of Intermediate Results
A theory of justified reformulations
A theory of justified reformulations
Programming languages and their compilers: Preliminary notes
Programming languages and their compilers: Preliminary notes
Program analysis using binary relations
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Static caching for incremental computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Efficiency by Incrementalization: An Introduction
Higher-Order and Symbolic Computation
Program optimization using indexed and recursive data structures
PEPM '02 Proceedings of the 2002 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Hi-index | 0.00 |
We describe a new technique for optimizing first-order functional programs. Programs are represented as graph grammars, and optimization proceeds by counterexample: when a graph generated by the grammar is found to contain an unnecessary computation, the optimizer attempts to reformulates the grammar so that it never again generates any graph that contains that counterexample. This kind of program reformulation corresponds to an interesting problem on context-free grammars. Our reformulation technique is derived from an (approximate) solution to this CFG problem. An optimizer called Thinner is the proof of concept for this technique. Thinner is a fully automatic, source-to-source optimizer for a Lisp-like language of purely functional, first-order programs. Thinner rediscovers a wide variety of common compiler optimizations. It also finds other more exotic transformations, including the well-known Fibonacci reformulation and the Knuth-Morris-Pratt optimization.