Results 1 -
7 of
7
Automatic Generation Of Peephole Optimizations
, 1984
"... This paper describes a system that automatically generates peephole optimizations. A general peephole optimizer driven by a machine description produces optimizations at compile-compile time for a fast, pattern-directed, compile-time optimizer. They form part of a compiler that simplifies retargetin ..."
Abstract
-
Cited by 20 (1 self)
- Add to MetaCart
This paper describes a system that automatically generates peephole optimizations. A general peephole optimizer driven by a machine description produces optimizations at compile-compile time for a fast, pattern-directed, compile-time optimizer. They form part of a compiler that simplifies retargeting by substituting peephole optimization for case analysis.
The RTL System: A Framework for Code Optimization
- Code Generation|Concepts, Tools, Techniques. Proceedings of the International Workshop on Code Generation
, 1991
"... The construction of compiler front and back-ends is understood well enough for a great deal of the work to be automated. This paper describes the RTL System, which helps construct the rest of the compiler---the optimizer---by providing a flexible set of classes with a large number of predefined algo ..."
Abstract
-
Cited by 10 (3 self)
- Add to MetaCart
The construction of compiler front and back-ends is understood well enough for a great deal of the work to be automated. This paper describes the RTL System, which helps construct the rest of the compiler---the optimizer---by providing a flexible set of classes with a large number of predefined algorithms that the compiler writer can customize. The RTL System differs from systems to construct compiler front and back-ends because it does not specify the optimizations with a specialized language, but is instead an objectoriented framework. This paper describes the framework and how it can be used to build a code optimizer. 1 Introduction Compiler front and back-ends are understood well enough for them to be generated automatically. A parser generator can create the parser from a grammar describing the language, and a code generator can be built automatically from a description of the machine. However, the construction of an optimizer is much less straightforward. This paper describes th...
Concise Specifications of Locally Optimal Code Generators
, 1987
"... Dynamic programming allows locally optimal instruction selection for expression trees. More importantly, the algorithm allows concise and elegant specification of code generators. Aho, Ganapathi, and Tjiang have built the Twig code-generator-generator, which produces dynamic-programming code-generat ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
Dynamic programming allows locally optimal instruction selection for expression trees. More importantly, the algorithm allows concise and elegant specification of code generators. Aho, Ganapathi, and Tjiang have built the Twig code-generator-generator, which produces dynamic-programming code-generators from grammar-like specifications. Encoding a complex architecture as a grammar for a dynamic-programming codegenerator -generator shows the expressive power of the technique. Each instruction, addressing mode, register and class can be expressed individually in the grammar. The grammar can be factored much more readily than with the Graham-Glanville LR(1) algorithm, so it can be much more concise. Twig specifications for the VAX and MC68020 are described, and the corresponding code generators select very good (and under the right assumptions, optimal) instruction sequences. Limitations and possible improvements to the specification language are discussed. 1. Introduction One of the last...
Semantics-Directed Code Generation
, 1985
"... The intermediate representations (IR) used by most compilers have an operational semantics. The nodes in the graph (or tree, or quad-code sequence) have an interpretation as the operation codes of some abstract machine. A denotational semantics, in which each node in the IR graph has a static meanin ..."
Abstract
-
Cited by 7 (2 self)
- Add to MetaCart
The intermediate representations (IR) used by most compilers have an operational semantics. The nodes in the graph (or tree, or quad-code sequence) have an interpretation as the operation codes of some abstract machine. A denotational semantics, in which each node in the IR graph has a static meaning, can lead to a clean interface between the front and back ends of the compiler. Furthermore, it is possible to concisely specify a code generator to translate the denotational representation into machine code. Combined with recent work allowing the denotational specification of front ends to translate the input language into the IR, a complete compiler with a well-defined semantics may be generated. Using this technique, compilers have been written for (most of) Pascal and C which, although they compile slowly, produce fairly good machine code. July 25, - 1 - 1 1. Introduction The intermediate representations (IR) used by most compilers have an operational semantics. The nodes in the gra...
The RTL System
, 1990
"... Assignment ImplicitAssignment Assignment PhiAssignment Jump CondJump Return The subclasses play the following roles: EmptyRegisterTransfer: used in the instruction builder to represent transfers that only set flags. See Chapter 8. RegisterTransferSet: represents sets of RegisterTransfers to be pe ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
Assignment ImplicitAssignment Assignment PhiAssignment Jump CondJump Return The subclasses play the following roles: EmptyRegisterTransfer: used in the instruction builder to represent transfers that only set flags. See Chapter 8. RegisterTransferSet: represents sets of RegisterTransfers to be performed concurrently. Theoretically, this is a recursive structure, since it could contain an instance of itself; however, this is never allowed. Its only instance variable is transfers, an OrderedCollection of the component transfers. Call: represents procedure calls. Its instance variables are method, the Register containing the callee's address; returnValueRegister, the Register in which the result of the call will be found; and argumentLogicalRegisters, an OrderedCollection of the Registers that contain the receiver and the first two arguments. AbstractAssignment: the abstract superclass of all classes representing assignments to some storage. Its only instance variable is destinatio...
a Retrospective
, 1997
"... This paper was the last in a series about the retargetable peephole optimizer PO, and it was the only one to appear in a PLDI/CC conference. PO is perhaps best known for its influence on GCC [Stallman], a compiler with many targets and wide use. Peephole optimizers [McKeeman 1965] scan object code f ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
This paper was the last in a series about the retargetable peephole optimizer PO, and it was the only one to appear in a PLDI/CC conference. PO is perhaps best known for its influence on GCC [Stallman], a compiler with many targets and wide use. Peephole optimizers [McKeeman 1965] scan object code for instruction sequences that can be replaced profitably with better sequences. For example, the source code i = j; if (i> 0) … might compile into move j,i test i bne L1 On machines that set the condition codes or flags as a side effect of the move, the test is redundant. Even if the code generated for the source statements is flawless in isolation, the optimal

