| W. Wulf, R.K. Johnsson, C.B. Weinstock, S.O. Hobbs, and C.M. Geschke, The Design of an Optimizing Compiler. New York: American Elsevier, 1975. |
....abstraction requires that the candidate regions be single entry, single exit: internal jumps must be within the body of the region. Figure 4 shows an example of cross jumping (sometimes known as tail merging) in which identical regions that end with a jump to the same target are merged together [24]. In this transformation, we replace a region with a direct jump to another identical region. All of the out branches in each region must match in order for cross jumping to be applied. Both these transformations have certain costs, both in terms of code space and execution time. For example, ....
W. Wulf, R. Johnson, C. Weinstock, S. Hobbs, and C. Geschke. The Design of an Optimizing Compiler. American Elsevier, New York, 1975.
....Code Sequence Optimization, Register Allocation, Instruction Scheduling, Code Generation, Superscalar architectures, Instruction Level Parallelism. 1 Introduction In this paper we revisit the optimal code generation problem [1, 9] also known as the evaluationorder determination problem [42]: the problem of generating an instruction sequence from a data dependence graph (DDG) In particular, we are interested in generating an instruction sequence S that uses the minimum number of registers. We define the Minimum Register Instruction Sequence (MRIS) problem as: Given a data ....
....a part of the MRIS problem formulation. To highlight this difference, we distinguish the use of the terms instruction schedule and instruction sequence . The MRIS problem is closely related to the optimal code generation (OCG) problem [1, 9, 34] or the evaluation order determination problem [42]. For the case in which the dependence graph is a tree, an algorithm that produces an optimal sequence (in terms of code length) for the OCG problem exists. For a general DAG, the problem is known to be NP Complete since 1975 [34] An important difference between these traditional code generation ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. The Design of an Optimizing Compiler, Programming Languages Series. American Elsevier, New York, N. Y., 1975. 38
....CCR 0220334, and EIA 0080123 to the Univ. of Arizona. Code compaction techniques. A commonly used approach to code compaction is the application of compiler based transformations which nd recurring code sequences in an application and replace them by a single shared copy of the code sequence [16, 7, 17, 1, 2]. There are two commonly used transformations for removing repeated occurrences of a code sequence: tail merging [16, 7, 1] and procedural abstraction [17, 2] If the recurring sequences appear along alternate paths immediately prior to a merge point in the control ow graph, tail merging is ....
.... is the application of compiler based transformations which nd recurring code sequences in an application and replace them by a single shared copy of the code sequence [16, 7, 17, 1, 2] There are two commonly used transformations for removing repeated occurrences of a code sequence: tail merging [16, 7, 1] and procedural abstraction [17, 2] If the recurring sequences appear along alternate paths immediately prior to a merge point in the control ow graph, tail merging is applied to replace multiple occurrences of the code sequence immediately before the merge point by a single occurrence of the ....
W. Wulf, R. Johnson, C. Weinstock, S. Hobbs, and C. Geschke, \The Design of an Optimizing Compiler," American Elsevier, New York, 1975.
....abstraction requires that the candidate regions be single entry, single exit: internal jumps must be within the body of the region. Figure 4 shows an example of cross jumping (sometimes known as tail merging) in which identical regions that end with a jump to the same target are merged together [24]. In this transformation, we replace a region with a direct jump to another identical region. All of the out branches in each region must match in order for cross jumping to be applied. Both these transformations have certain costs, both in terms of code space and execution time. For example, ....
....support, and is very widely applicable. Techniques to reduce ram use (as opposed to secondary storage) have focused primarily on the code segments of executables, rather than data or stack storage. A variety of compiler optimization techniques have been developed that seek to produce compact code [24, 19, 17, 15]. These methods are designed to reduce code size without requiring hardware support and without imposing significant run time penalties. A number of researchers have experimented with schemes in which the program executable itself is stored in compressed form in ram or rom, requiring some sort ....
W. Wulf, R. Johnson, C. Weinstock, S. Hobbs, and C. Geschke. The Design of an Optimizing Compiler. American Elsevier, New York, 1975.
....possible. This increases the number of instructions in the program that are identical and allow the compressor to make use of the repetition. Cooper and McIntosh Cooper and McIntosh [Cooper99] use register renaming to increase opportunities to apply procedure abstraction and cross jumping [Wulf75]. They search the entire executable binary for sequences of instructions (possibly spanning several basic blocks) that have similar data flow and control flow. They then attempt to make the sequences identical by renaming registers in the live ranges that flow through the sequences. Once the ....
W. Wulf, R. Johnsson, C. Weinstock, S. Hobbs, and C. Geschke, The Design of an Optimizing Compiler, North Holland, 1975.
....computing rather than specialized architectures such as digital signal processors. Portability has always been a concern of compiler researchers since the inception of high level programming languages and compilers [Conway 58] Therefore, almost all compilers are organized in two major phases [Wulf 75] Aho 86] which may, of course, consist of smaller phases) The first phase, called the front end, consists of lexical analysis and parsing. The task of the front end is to translate a program from its source language form to an intermediate form that is largely language independent and ....
W. Wulf, R. K. Johnson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. The Design of an Optimizing Compiler. American Elsevier, New York, New York, 1975.
....for subsequent uses, or result in stores and loads of the saved value from memory. In general, a compiler has to weigh the savings realized from common subexpression elimination against the costs incurred to determine whether a particular common subexpression is worth eliminating (e.g. see [14]) Thus, common subexpression elimination involves 1. identifying common subexpressions; 2. deciding which of these are worth eliminating; and 3. transforming the code sequence to eliminate such common subexpressions. Since these three points are essentially orthogonal to each other, we will ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke, The Design of an Optimizing Compiler, American Elsevier, New York, 1975.
....S j repeat I after S j if E then S j S S j I : E j nothing I identifier E expression Figure 1: Abstract syntax of CORTL ditional, assignment, and sequencing statements have the usual meaning. The region and depart constructs are similar to the label and leave constructs of Bliss [WJW 75]: region I S declares a region of code named I consisting of S, and depart I after S executes S and then jumps to the statement after region I. On the other hand, repeat I after S executes S and then jumps to region I, thus providing a means of doing iteration; there is no looping construct as ....
....with control more effectively, and so are more powerful than traditional algorithms. Despite the advantages of ASTs, optimizing compilers have rarely used them. Zelkowitz and Bail [ZB74] discuss how to do CSE and code motion in a structured programming language using an AST. The Bliss compiler [WJW 75] uses an AST for some optimizations and to locate loops, but uses a CFG for most optimizations. The Modula 2 compiler of Powell [Pow84] uses an AST for CSE and code motion. The code optimizers just mentioned use language specific ASTs, whereas I propose using CORTL ASTs in order to achieve ....
W. A. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. The Design of an Optimizing Compiler. American Elsevier, 1975.
....to assume that the necessary infrastructure for applying code compression at the intermediate code level will be available. 2 Related Work Algorithms for code compression typically operate on machine code, and use string matching techniques to locate repeated occurrences of instruction sequences [22, 7]. Recently, Cooper and McIntosh [2] have proposed a more sophisticated code compression technique. They rely on string matching algorithms but improve applicability of the algorithm by using an abstract representation in which register names are represented as offsets pointing to the previous ....
William Wulf, Richard K. Johnson, Charles B. Weinstock, Steven O. Hobbs, and Charles M. Geschke. The Design of an Optimizing Compiler. American Elsevier, New York, 1975.
....is a generalization of common subexpression elimination (CSE) Here, the configurations are expressions, and the definition is the introduction of a new variable holding the value of the multiply used definition. While CSE can be done in near linear time by employing hash consing strategies [124], generalized folding has a much higher complexity. 5.11 Fixed Points One of the central problems of AI is the computation of fixed points (or fixpoints) of recursive functions. In the context of PE this means the modelling of possibly nonterminating executions traces, i.e: dynamically bound ....
W. Wulf, R.K. Johnson, C.B. Weinstock, S.O. Hobbs, C.M. Geschke, The Design of an Optimizing Compiler, American Elsevier, 1975
....Thus, given the variables y, we can obtain its value (another object with identical state) with the expression y.copy( and use the object s value in an addition with x.add(y. copy( This copy operation is implicit in most procedural programming languages via rvalue interpretation, with Bliss [Wulf et al. 1975] a notable exception. In the remainder of this paper, we explicitly mark the copy operation, but due to its frequency, use the shorthand # in place of .copy( The addition example becomes x.add(y#) Note that objects for which a copy operation does not make sense (e.g. semaphores) need not ....
William A. Wulf, Richard K. Johnsson, Charles B. Weinstock, Steven O. Hobbs, and Charles M. Geschke, The Design of an Optimizing Compiler, Elsevier, 1975.
....a compiler back end used in several of its compiler products [1] The GEM approach to binpacking and treatment of lifetime holes [3] was the starting point for our work on linear scan allocation. Binpacking evolved from work done in the production quality compiler compiler project at CMU [11,17]. However, the discovery of linearscan register allocation at Digital was almost an accident: its first implementation was intended as a throw away module, meant to be replaced by a more elaborate scheme. When the throw away turned out to perform better than its more complicated replacement, it ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs and C. M. Geschke, The Design of an Optimizing Compiler, American Elsevier, New York, 1975.
....a compiler back end used in several of its compiler products [1] The GEM approach to binpacking and treatment of lifetime holes [3] were the starting points for our work on linear scan allocation. Binpacking evolved from research done in the production quality compiler compiler project at CMU [13,21]. However, the discovery of linear scan register allocation at Digital was almost an accident: its first implementation was intended as a throw away module, meant to be replaced by a more elaborate scheme. When the throw away turned out to perform better than its more complicated replacement, it ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs and C. M. Geschke, The Design of an Optimizing Compiler, American Elsevier, New York, NY, 1975.
....The last phase is the backpatching of jumps and other relative addresses in a machine language program. Relative jump instructions on many machines are of different sizes depending on the distance jumped, and several iterations of estimating jump sizes may be required before a fixed point is found[19]. This is handled in a machine independent way by the Backpatch functor: signature RelativeAddresses = sig type JumpKind val sizeJump : JumpKind int val emitJump : int unit) JumpKind unit end 13 signature BackPatch = sig type Label val newlabel : unit Label type JumpKind val ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, C. B. Hobbs, and C. M. Geschke, Design of an Optimizing Compiler, Elsevier North-Holland, New York, 1975.
....Portable Optimizer) BeD88, DaF84, Dav86] The optimizer, vpo, replaces the traditional code generator used in many compilers and has been used to build C, Pascal, and Ada compilers. 1 vpo is retargeted by supplying a description of the target machine. Using the diagrammatic notation of Wulf [WJW75], Figure 1 shows the overall structure of a set of compilers constructed using vpo. Vertical columns within a box represent logical phases which operate serially. Columns divided horizontally into rows indicate that the subphases of the column may be executed in an arbitrary order. IL is the ....
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs and C. M. Geschke, The Design of an Optimizing Compiler, American Elsevier, New York, NY, 1975.
No context found.
W. Wulf, R.K. Johnsson, C.B. Weinstock, S.O. Hobbs, and C.M. Geschke, The Design of an Optimizing Compiler. New York: American Elsevier, 1975.
No context found.
William A. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. Design of an Optimizing Compiler. American Elsevier, 1975.
No context found.
W. A. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. The Design of an Optimizing Compiler. American Elsevier, 1975.
No context found.
W. Wulf, R. K. Johnsson, C. B. Weinstock, S. O. Hobbs, and C. M. Geschke. The Design of an Optimizing Compiler. Elsevier North-Holland, Inc., New York, 1975. 132
No context found.
W. Wulf, R. K. Johnsson, C. B. Weinstock, C. B. Hobbs, and C. M. Geschke, Design of an Optimizing Compiler, Elsevier North-Holland, New York, 1975.
Online articles have much greater impact More about CiteSeer.IST Add search form to your site Submit documents Feedback
CiteSeer.IST - Copyright Penn State and NEC