Results 1  10
of
139
Improving Register Allocation for Subscripted Variables
, 1990
"... INTRODUCTION By the late 1980s, memory system performance and CPU performance had already begun to diverge. This trend made effective use of the register file imperative for excellent performance. Although most compilers at that time allocated scalar variables to registers using graph coloring with ..."
Abstract

Cited by 217 (35 self)
 Add to MetaCart
INTRODUCTION By the late 1980s, memory system performance and CPU performance had already begun to diverge. This trend made effective use of the register file imperative for excellent performance. Although most compilers at that time allocated scalar variables to registers using graph coloring with marked success [12, 13, 14, 6], allocation of array values to registers only occurred in rare circumstances because standard dataflow analysis techniques could not uncover the available reuse of array memory locations. This deficiency was especially problematic for scientific codes since a majority of the computation involves array references. Our original paper addressed this problem by presenting an algorithm and experiment for a loop transformation, called scalar replacement, that exposed the reuse available in array references in an innermost loop. It also demonstrated experimentally how another loop transformation, called unrollandjam [2], could expose more opportunities for scalar…
Approximate graph coloring by semidefinite programming
 Proc. 35 th IEEE FOCS, IEEE
, 1994
"... a coloring is called the chromatic number of�, and is usually denoted by��.Determining the chromatic number of a graph is known to be NPhard (cf. [19]). Besides its theoretical significance as a canonical NPhard problem, graph coloring arises naturally in a variety of applications such as register ..."
Abstract

Cited by 186 (6 self)
 Add to MetaCart
(Show Context)
a coloring is called the chromatic number of�, and is usually denoted by��.Determining the chromatic number of a graph is known to be NPhard (cf. [19]). Besides its theoretical significance as a canonical NPhard problem, graph coloring arises naturally in a variety of applications such as register allocation [11, 12, 13] is the maximum degree of any vertex. Beand timetable/examination scheduling [8, 40]. In many We consider the problem of coloring�colorable graphs with the fewest possible colors. We give a randomized polynomial time algorithm which colors a 3colorable graph on vertices with� � ���� colors where sides giving the best known approximation ratio in terms of, this marks the first nontrivial approximation result as a function of the maximum degree. This result can be generalized to�colorable graphs to obtain a coloring using�� � ��� � � � �colors. Our results are inspired by the recent work of Goemans and Williamson who used an algorithm for semidefinite optimization problems, which generalize linear programs, to obtain improved approximations for the MAX CUT and MAX 2SAT problems. An intriguing outcome of our work is a duality relationship established between the value of the optimum solution to our semidefinite program and the Lovász�function. We show lower bounds on the gap between the optimum solution of our semidefinite program and the actual chromatic number; by duality this also demonstrates interesting new facts about the�function. 1
Register Allocation via Graph Coloring
, 1992
"... Chaitin and his colleagues at IBM in Yorktown Heights built the first global register allocator based on graph coloring. This thesis describes a series of improvements and extensions to the Yorktown allocator. There are four primary results: Optimistic coloring Chaitin's coloring heuristic pes ..."
Abstract

Cited by 144 (4 self)
 Add to MetaCart
(Show Context)
Chaitin and his colleagues at IBM in Yorktown Heights built the first global register allocator based on graph coloring. This thesis describes a series of improvements and extensions to the Yorktown allocator. There are four primary results: Optimistic coloring Chaitin's coloring heuristic pessimistically assumes any node of high degree will not be colored and must therefore be spilled. By optimistically assuming that nodes of high degree will receive colors, I often achieve lower spill costs and faster code; my results are never worse. Coloring pairs The pessimism of Chaitin's coloring heuristic is emphasized when trying to color register pairs. My heuristic handles pairs as a natural consequence of its optimism. Rematerialization Chaitin et al. introduced the idea of rematerialization to avoid the expense of spilling and reloading certain simple values. By propagating rematerialization information around the SSA graph using a simple variation of Wegman and Zadeck's constant propag...
The Design and Implementation of the SELF Compiler, an Optimizing Compiler for ObjectOriented Programming Languages
, 1992
"... Objectoriented programming languages promise to improve programmer productivity by supporting abstract data types, inheritance, and message passing directly within the language. Unfortunately, traditional implementations of objectoriented language features, particularly message passing, have been ..."
Abstract

Cited by 132 (16 self)
 Add to MetaCart
Objectoriented programming languages promise to improve programmer productivity by supporting abstract data types, inheritance, and message passing directly within the language. Unfortunately, traditional implementations of objectoriented language features, particularly message passing, have been much slower than traditional implementations of their nonobjectoriented counterparts: the fastest existing implementation of Smalltalk80 runs at only a tenth the speed of an optimizing C implementation. The dearth of suitable implementation technology has forced most objectoriented languages to be designed as hybrids with traditional nonobjectoriented languages, complicating the languages and making programs harder to extend and reuse. This dissertation describes a collection of implementation techniques that can improve the runtime performance of objectoriented languages, in hopes of reducing the need for hybrid languages and encouraging wider spread of purely objectoriented langu...
Register allocation via hierarchical graph coloring
 In Proceedings of the SIGPLAN '91 Conference on Programming Language Design and Implementation
, 1991
"... We present a graph coloring register allocator de signed to minimize the number of dynamic memory references. We cover the program with sets of blocks called tiles and group these tiles into a tree reflecting the program's hierarchical control structure. Registers are allocated for each tile u ..."
Abstract

Cited by 99 (0 self)
 Add to MetaCart
(Show Context)
We present a graph coloring register allocator de signed to minimize the number of dynamic memory references. We cover the program with sets of blocks called tiles and group these tiles into a tree reflecting the program's hierarchical control structure. Registers are allocated for each tile using standard graph coloring techniques and the local allocation and conflict information is passed around the tree in a two phase algorithm. This results in an allocation of reg isters that is sensitive to local usage patterns while retaining a global perspective. Spill code is placed in less frequently executed portions of the program and the choice of variables to spill is based on usage pat terns between the spills and the reloads rather than usage patterns over the entire program. 1
Software pipelining showdown: Optimal vs. heuristic methods in a production compiler
 In Proc. of the ACM SIGPLAN'96 Conf. on Programming Languages Design and Implementation
, 1996
"... This paper is a scientific comparison of two code generation techniques with identical goals — generation of the best possible software pipelined code for computers with instruction level parallelism. Both are variants of modulo scheduling, a framework for generation of soflware pipelines pioneere ..."
Abstract

Cited by 62 (13 self)
 Add to MetaCart
This paper is a scientific comparison of two code generation techniques with identical goals — generation of the best possible software pipelined code for computers with instruction level parallelism. Both are variants of modulo scheduling, a framework for generation of soflware pipelines pioneered by Rau and Glaser [RaG181], but are otherwise quite dissimilar. One technique was developed at Silicon Graphics and is used in the MIPSpro compiler. This is the production compiler for SG1’S systems which are based on the MIPS R8000 processor [Hsu94]. It is essentially a branchandbound enumeration of possible schedules with extensive pruning. This method is heuristic becaus(s of the way it prunes and also because of the interaction between register allocation and scheduling. The second technique aims to produce optimal results by formulat
A Register Allocation Framework Based on Hierarchical Cyclic Interval Graphs
 In International Workshop on Compiler Construction, Paderdorn
, 1993
"... In this paper, we propose the use of cyclic interval graphs as an alternative representation for register allocation. The "thickness" of the cyclic interval graph captures the notion of overlap between live ranges of variables relative to each particular point of time in the program execut ..."
Abstract

Cited by 61 (13 self)
 Add to MetaCart
(Show Context)
In this paper, we propose the use of cyclic interval graphs as an alternative representation for register allocation. The "thickness" of the cyclic interval graph captures the notion of overlap between live ranges of variables relative to each particular point of time in the program execution. We demonstrate that cyclic interval graphs provide a feasible and effective representation that accurately captures the periodic nature of live ranges found in loops. A new heuristic algorithm for minimum register allocation, the fat cover algorithm, has been developed and implemented to exploit such program structure. In addition, a new spilling algorithm is proposed that makes use of the extra information available in the interval graph representation. These two algorithms work together to provide a twophase register allocation process that does not require iteration of the spilling or coloring phases. We extend the notion of cyclic interval graphs to hierarchical cyclic interval graphs and we...
Structured Programs have Small TreeWidth and Good Register Allocation
 Information and Computation
, 1995
"... The register allocation problem for an imperative program is often modelled as the coloring problem of the interference graph of the controlflow graph of the program. The interference graph of a flow graph G is the intersection graph of some connected subgraphs of G. These connected subgraphs repre ..."
Abstract

Cited by 61 (1 self)
 Add to MetaCart
The register allocation problem for an imperative program is often modelled as the coloring problem of the interference graph of the controlflow graph of the program. The interference graph of a flow graph G is the intersection graph of some connected subgraphs of G. These connected subgraphs represent the lives, or life times, of variables, so the coloring problem models that two variables with overlapping life times should be in different registers. For general programs with unrestricted gotos, the interference graph can be any graph, and hence we cannot in general color within a factor O(n " ) from optimality unless NP=P. It is shown that if a graph has treewidth k, we can efficiently color any intersection graph of connected subgraphs within a factor (bk=2c + 1) from optimality. Moreover, it is shown that structured (j gotofree) programs, including, for example, short circuit evaluations and multiple exits from loops, have treewidth at most 6. Thus, for every structured progr...
Coloring Random and SemiRandom kColorable Graphs
, 1995
"... The problem of coloring a graph with the minimum number of colors is well known to be NPhard, even restricted to kcolorable graphs for constant k 3. On the other hand, it is known that random kcolorable graphs are easy to kcolor. The algorithms for coloring random k colorable graphs require fai ..."
Abstract

Cited by 55 (0 self)
 Add to MetaCart
The problem of coloring a graph with the minimum number of colors is well known to be NPhard, even restricted to kcolorable graphs for constant k 3. On the other hand, it is known that random kcolorable graphs are easy to kcolor. The algorithms for coloring random k colorable graphs require fairly high edge densities, however. In this paper we present algorithms that color randomly generated kcolorable graphs for much lower edge densities than previous approaches. In addition, to study a wider variety of graph distributions, we also present a model of graphs generated by the semirandom source of Santha and Vazirani that provides a smooth transition between the worstcase and random models. In this model, the graph is generated by a "noisy adversary"  an adversary whose decisions (whether or not to insert a particular edge) have some small (random) probability of being reversed. We show that even for quite low noise rates, semirandom kcolorable graphs can be optimally colored with high probability.
Spill Code Minimization via Interference Region Spilling
 in SIGPLAN Conference on Programming Language Design and Implementation
, 1997
"... Many optimizing compilers perform global register allocation using a Chaitinstyle graph coloring algorithm. Live ranges that cannot be allocated to registers are spilled to memory. The amount of code required to spill the live range depends on the spilling heuristic used. Chaitin's spilling he ..."
Abstract

Cited by 40 (1 self)
 Add to MetaCart
(Show Context)
Many optimizing compilers perform global register allocation using a Chaitinstyle graph coloring algorithm. Live ranges that cannot be allocated to registers are spilled to memory. The amount of code required to spill the live range depends on the spilling heuristic used. Chaitin's spilling heuristic offers some guidance in reducing the amount of spill code produced. However, this heuristic does not allow the partial spilling of live ranges and the reduction in spill code is limited to a local level. In this paper, we present a global technique called interference region spilling that improves the spilling granularity of any local spilling heuristic. Our technique works above the local spilling heuristic, limiting the normal insertion of spill code to a portion of each spilled live range. By partially spilling live ranges, we can achieve large reductions in dynamically executed spill code; up to 75% in some cases and an average of 33.6% across the benchmarks tested. 1 Introduction Gl...