Docstoc

Register Allocation via Coloring of Chordal Graphs

Document Sample
Register Allocation via Coloring of Chordal Graphs Powered By Docstoc
					Register Allocation via Coloring of Chordal Graphs
Fernando M Q Pereira Jens Palsberg
UCLA

95% of the interference graphs produced from Java Methods by the JoeQ compiler are Chordal.
• Java 1.5 library: 95.5% (23,681 methods). • Public ML graphs: 94.1% (27,921 IG’s).
– Not considering pre-colored registers.

• But, what is a chordal graph?

Why is this good news?
• Many problems that are NP-complete for general graphs are linear time for chordal graphs. Ex. graph coloring. • Simpler register allocation algorithms, but still competitive!

Register Allocation is Complicated…
• Iterated Register Coalescing [George and Appel 96]
build simplify

actual spill select

coalesce

freeze

potential spill

The Proposed Algorithm.
SEO pre-spilling phase coloring phase coalescing phase

• • • •

Simple Modular Efficient Works with non-chordal interference graphs.

Some terminology:
– Induced subgraphs: H = G[VH]
A C
D E D

B

A C

B

– Induced cycles: H is a cycle.
A C
D A C E B

B

A D

B E

– Clique: H is a complete graph.
A C

D

E

D

Chordal Graphs.
• A graph G is chordal iff the size of the largest induced cycle is 3 (it is a triangle). • non-chordal: Chordal:
A B A B

D

E

D

E

Why are Interference graphs Chordal?
• Chordal graphs are the intersection graphs of subtrees of a tree:
E
B

D
C

F

A

But CFG’s are not trees…
int m(int a, int d) { int b, c; if(a > 0) { b = 1; c = a; } else { c = 2; b = d; } return b + c; } }

a

b

d

c

Interference graphs of programs in SSA form are chordal.
• Independently proved by Brisk[2005], Hack[2005], Bouchez[2005]. • Intuition:
– The chordal graphs are the intersection graphs of subtrees of a tree. – Live ranges in SSA are subtrees of the dominance tree.

Why only 95% of chordal graphs?
• Executable code is not in SSA form. • SSA elimination.
– Phi-functions are abstract constructions. – In executable code, phi functions are replaced by copy instructions.

• We call programs after SSA elimination PostSSA programs. • Some Post-SSA programs are non-chordal :(

The Proposed Algorithm.
The pre-spilling version:
SEO
pre-spilling phase coloring phase

coalescing phase

The post-spilling version:
SEO

coloring phase

post-spilling phase

coalescing phase

The Example.
Two registers available for allocation: R1 and R2 R1 R2

1 2 3 4 5 6 7 8

int B = R1; int A = R2; int F = 1; int E = A + F; int D = 0; int C = D; R2 = C + E; R1 = B;

A

B

C

F

E

D

The Simplicial Elimination Ordering.
SEO

Simplicial Elimination Ordering (SEO)

pre-spilling phase

coloring phase

coalescing phase

Simplicial Elimination Ordering
R1 A F R2 B E C D

Simplicial Elimination Ordering (SEO)

Neighbors of N that precede N constitute a clique:
S1 = (A, F, B, E, D, C, R2, R1) are SEO’s S2 = (R2, B, E, F, A, D, C, R1) But S3 = (R2, R1, D, F, E, C, A, B) is not a SEO. Why?

}

A third definition of chordal graph.
• A graph G = (V, E) is chordal if, and only if, it has a simplicial elimination ordering [Dirac 61]. • There exist O(|V| + |E|) algorithms to find a simplicial elimination ordering:
– Maximum Cardinality Search, – Lexicographical Breadth First Search.

Simplicial Elimination Ordering (SEO)

The Pre-Spilling Phase.
The pre-spilling phase pre-spilling phase coloring phase coalescing phase

SEO

The Pre-Spilling Phase
• Chromatic number = size of largest clique. 1 - List all the maximal cliques in the graph. 2 - Remove nodes until all maximal cliques have K or less nodes. 2.1 - Which registers to remove?
– For each register r:
• n = number of big cliques that contain r. • f = frequency of use. • s = size of r’s live range.

The pre-spilling phase

– Spill factor = n * s / f

Only look into cliques greater than K = 2.
R1
A

R2
B C

The pre-spilling phase

F S1 = ( A, F, A B, A F E, B F

E D, B E C, B

D R2, R1 ) B
R2

Node B is present in most of the cliques, and must be removed.

Resulting graph:
R1
A

R2
C

The pre-spilling phase

F S1 = ( A, F, A E, F

E D, E C, B

D R2, R1 ) B
R2

Node B is present in most of the cliques, and must be removed.

The Coloring Phase.
The coloring phase pre-spilling phase coloring phase coalescing phase

SEO

Coloring Chordal Graphs.
• Feed the greedy coloring with a simplicial elimination ordering.
C The coloring phase

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Coloring Chordal Graphs.
The coloring phase

C

R1

R2

A

F

E D

S1 = ( A,

F,

E,

D,

C, R2, R1 )

Register Coalescing.
The coalescing phase

SEO

pre-spilling phase

coloring phase

coalescing phase

Register Coalescing
• Greedy coalescing after register allocation.
– Why not before graph coloring?
Algorithm: Register Coalescing Input: (G, color(G)) Output: (G, color’(G)) begin for every non-interfering move instruction (x := y) do let color(x) = color(y) = unused color(N(x) U N(y)); end
The coalescing phase

Register Coalescing
The coalescing phase R2 R1

D A F E
C

Register Coalescing
The coalescing phase R2 R1

D A F E
C

The Post-Spilling Phase.
The Post-Spilling Phase SEO coloring phase

post-spilling phase

coalescing phase

• Remove nodes assigned same color. E.g:
– Remove least used color. – Remove greatest color.

• Faster implementation, but generates worse code.

What about a Non-Chordal Graph?
• Coloring is no longer optimal. • The number of colors will be between the optimal, and twice the optimal for almost every possible graph [Bollobas 1988].

Benchmark
• The Java 1.5 standard libraries.
– 23,681 methods.

• Algorithms implemented in the JoeQ framework. • Two test cases:
– Code without any transformation: 90% chordal. – Programs in Post-SSA form: 95% chordal.

Non-transformed Programs
Chordal coloring Chordal coloring 16 registers 18 registers
# registers / method # spills / method

IRC 18 registers

4.13

4.20

4.25

0.0055 131 17
0.29

0.0044 105 15
0.34

0.0050 115 16
0.31

Total # spill Maximum # spill
Coalescing / moves

Post-SSA Programs
Chordal coloring Chordal coloring 16 registers 18 registers
# registers / method # spills / method

IRC 18 registers

4.12

4.13

4.17

0.0053 125 16
0.68

0.0040 94 17
0.72

0.0049 118 27
0.70

Total # spill Maximum # spill
Coalescing / moves

Registers per Method - Post-SSA Program
6000

5000

Number of methods

4000

3000

2000

1000

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Number of registers MCS Iterated Coalescing

Methods in Java 1.5
• • • • 23,681 methods; 22,544 chordal methods. 85% methods could be colored with 6 regs. 99.8% could be colored with 16 regs. 28 methods demanded more than 16 regs.

Time and Complexity: G = (V, E)
• • • • SEO: O(|V| + |E|); Pre-spilling: O(|V| + |E|); Coloring: O(|E|); Coalescing: O(|V|3);
coalescing coloring spilling

Related Work.
• All the 27,921 public ML interference graphs are 1-perfect [Andersson 2003].
– Structured programs have 1-perfect IG?

• Polynomial register allocation [Brisk 2005], [Hack 2005].
– SSA-Interference graphs are chordal.

Conclusions
• Many interference graphs of structured programs are chordal; • New algorithm:
– Modular; – Efficient; – Competitive;

• We have an extended version of the algorithm implemented on top of GCC:
– http://compilers.cs.ucla.edu/fernando/projects/

Are Java Interference Graphs 1-Perfect?
• 1-Perfect graph: minimum coloring equals largest clique.
– It is different of perfect graphs.

• All the 27,921 IG of the ML compiler compiling itself are 1-perfect [Andersson, 2003].
– Not considering pre-colored registers: 94.5% of chordal graphs.

SSA and Post-SSA Graphs.
• SSA interference graphs:
– Chordal – Perfect – 1-Perfect

• Post SSA graphs:
– If phi functions are replaced by copy instructions, than register allocation is NPcomplete.

Non-1-Perfect Example
int m(it a, int d) { int e, c; if(in() > 0) { e = 0; c = d; } else { b = 0; c = a; e = b; } return c + e; }

d

a

b e c

The Post SSA Interference Graph.
x
b = 0; c1 = d; e1 = b;

d e2 c2 e
c

a b c1 e1

e2 = 0; c2 = d;

e = e2; c = c2;

c = c1; e = e1;

return c + e;

References
• [Andersson 2003] Christian Andersson, Register Allocation by Optimal Graph Coloring, 12th Conference on Compiler Construction • [Brisk 2005] Philip Brisk and Foad Dabiri and Jamie Macbeth and Majid Sarrafzadeh, Polynomial-Time Graph Coloring Register Allocation, 14th International Workshop on Logic and Synthesis • [Hack 2005] Sebastian Hack and Daniel Grund and Gerhard Goos, Towards Register Allocation for Programs in SSA-form.


				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:50
posted:9/16/2009
language:English
pages:47
Lingjuan Ma Lingjuan Ma
About