static single assignment form in the coins compiler ...sassa/coins- · in the coins compiler...

50
Static Single Assignment Form in the COINS Compiler Infrastructure Masataka Sassa (Tokyo Institute of Technology)

Upload: vanliem

Post on 05-Jun-2018

223 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Static Single Assignment Form in the COINS Compiler

Infrastructure

Masataka Sassa

(Tokyo Institute of Technology)

Page 2: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

0. COINS infrastructure and the SSA form1. SSA optimization module in COINS2. A comparison of two major algorithms for translating from

normal form into SSA form3. A comparison of two major algorithms for translating back

from SSA form into normal form4. Examples of SSA form optimization5. Preliminary experimental results

Outline

Background

Static single assignment (SSA) form facilitates compiler optimizations.Compiler infrastructure facilitates compiler development.

Page 3: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

0. COINS infrastructure andthe static single assignmentform (SSA form)

Page 4: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

COINS compiler infrastructure

• Multiple source languages• Retargetable• Two intermediate forms,

HIR and LIR• Optimizations• Parallelization• C generation, source-to- source translation• Written in Java• 2000~ developed by

Japanese institutions underGrant of the Ministry

High-level Intermediate Representation (HIR)

Basicanalyzer &optimizer

HIRto

LIR

Low-level Intermediate Representation (LIR) 

SSAoptimizer

Codegenerator

Cfrontend

Advancedoptimizer

Basicparallelizer

frontend C generation

SPARC

SIMDparallelizer

x86New

machine

FortranC New language

C OpenMP

Fortranfrontend

C generation

C

Page 5: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

1: a = x + y2: a = a + 33: b = x + y

Static single assignment (SSA) form

(a) Normal (conventional)form (source programor internal form)

1: a1 = x0 + y0 2: a2 = a1 + 3 3: b1 = x0 + y0

(b) SSA form

SSA form is a recently proposed internal representation whereeach use of a variable has a single definition point.

Indices are attached to variables so that their definitions becomeunique.

Page 6: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

1: a = x + y2: a = a + 33: b = x + y

Optimization in static single assignment (SSA) form

(a) Normal form

1: a1 = x0 + y0 2: a2 = a1 + 3 3: b1 = x0 + y0

(b) SSA form

1: a1 = x0 + y02: a2 = a1 + 33: b1 = a1

(c) After SSA form optimization

1: a1 = x0 + y02: a2 = a1 + 33: b1 = a1

(d) Optimized normal form

SSAtranslation

Optimization in SSA form (commonsubexpression elimination)

SSA backtranslation

SSA form is becoming increasingly popular in compilers, since it is suited forclear handling of dataflow analysis and optimization.

Page 7: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x1 = 1 x2 = 2

x3 = φ (x1;L1, x2:L2)… = x3

x = 1 x = 2

… = xL3

L2L1 L1 L2

L3

(b) SSA form(a) Normal form

Translating into SSA form (SSA translation)

Page 8: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x1=… = x1y1=…z1=…

x2=… = x2y2=…z2=…

= y1 = y2

x3= φ (x1,x2)y3= φ (y1,y2)z3= φ (z1,z2) = z3

x1=… = x1y1=…z1=…

x2=… = x2y2=…z2=…

= y1 = y2

y3= φ (y1,y2)z3= φ (z1,z2) = z3

x1=… = x1y1=…z1=…

x2=… = x2y2=…z2=…

= y1 = y2

z3= φ (z1,z2) = z3

x =… = xy =…z =…

x =… = xy =…z =…

= y = y

= z

Minimal SSA form Semi-pruned SSA form Pruned SSA form

Normal form

Translating into SSA form (SSA translation)

Page 9: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x1 = 1 x2 = 2

x3 = φ (x1;L1, x2:L2)… = x3

x1 = 1x3 = x1

x2 = 2x3 = x2

… = x3L3

L2L1L1 L2

L3

(a) SSA form (b) Normal form

Translating back from SSA form(SSA back translation)

Page 10: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

1. SSA optimization module inCOINS

Page 11: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

High-level Intermediate Representation (HIR)

Basicanalyzer &optimizer

HIRto

LIR

Low-level Intermediate Representation (LIR) 

SSAoptimizer

Codegenerator

Cfrontend

Advancedoptimizer

Basicparallelizer

frontend C generation

SPARC

SIMDparallelizer

x86 Newmachine

FortranC New language

C OpenMP

Fortranfrontend

COINS compiler infrastructure

C generation

C

Page 12: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Low-level IntermediateRepresentation (LIR)

SSA optimization module

Codegeneration

Source program

object code

LIR to SSAtranslation

(3 variations)

LIR in SSA

SSA optimization common subexp elim GVN by question prop copy propagation cond const propagation and much more ...

OptimizedLIR in SSA

SSA to LIR backtranslation

(3 variations)+ 2 coalescing about 9,000 lines

transformationon SSA edge splitting redund φ elim empty block elim

SSA optimization module in COINS

Page 13: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Outline of SSA module in COINS(1)• Translation into and back from SSA form on Low-level

Intermediate Representation (LIR)SSA translation

Use dominance frontier [Cytron et al. 91]3 variations: translation into Minimal , Semi-pruned and PrunedSSA forms

SSA back translation [Sreedhar et al. 99]3 variations: Method I, II, and III

CoalescingSSA-based coalescing during SSA back translation [Sreedhar et al.99]Chaitin’s style coalescing after back translation

Each variation and coalescing can be specified by options

Page 14: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Outline of SSA module in COINS (2)Several optimization on SSA form:

dead code elimination, copy propagation, common subexpressionelimination, global value numbering based on efficient querypropagation, conditional constant propagation, loop invariant codemotion, operator strength reduction for induction variable and linearfunction test replacement, empty block elimination, copy folding atSSA translation time ...

Useful transformation as an infrastructure for SSAform optimization:

critical edge removal on control flow graph, loop transformation from‘while’ loop to ‘if-do-while’ loop, redundant phi-function elimination,making SSA graph …

Each variation, optimization and transformation canbe made selectively by specifying options

Page 15: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

2. A comparison of two majoralgorithms for SSA translation

•Algorithm by Cytron [1991] Dominance frontier•Algorithm by Sreedhar [1995] DJ-graph

Comparison made to decide the algorithm to be included in COINS

Page 16: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x1 = 1 x2 = 2

x3 = φ (x1;L1, x2:L2)… = x3

x = 1 x = 2

… = xL3

L2L1 L1 L2

L3

(b) SSA form(a) Normal form

Translating into SSA form (SSA translation)

Page 17: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

0

100

200

300

400

500

600

700

800

900

0 1000 2000 3000 4000No. of nodes of control flow graph

Tra

nsla

tion

tim

e (m

illi s

ec)

CytronSreedhar

Translation time Usual programs

(The gap is due to the garbage collection)

Page 18: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

(b) ladder graph(a) nested loop

Peculiar programs

Page 19: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

0 1000 2000 3000 4000

No. of nodes of control flow graph

Tra

nsla

tion

tim

e (

mill

i se

c)

CytronSreedhar

Translation time Nested loop programs

Page 20: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

0

500

1000

1500

2000

2500

3000

3500

0 1000 2000 3000 4000

No. of nodes of control flow graph

Tra

nsla

tion

tim

e (m

illi s

ec)

CytronSreedhar

Translation time Ladder graph programs

Page 21: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

3. A comparison of two majoralgorithms for SSA back translation

• Algorithm by Briggs [1998] Insert copy statements• Algorithm by Sreedhar [1999] Eliminate interference

There have been no studies of comparisonComparison made on COINS

Page 22: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x1 = 1 x2 = 2

x3 = φ (x1;L1, x2:L2)… = x3

x1 = 1x3 = x1

x2 = 2x3 = x2

… = x3L3

L2L1L1 L2

L3

(a) SSA form (b) Normal form

Translating back from SSA form(SSA back translation)

Page 23: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x0 = 1

x1 = φ (x0, x2)y = x1x2 = 2

return y

x0 = 1

x1 = φ (x0, x2)

x2 = 2

return x1

x0 = 1x1 = x0

x2 = 2

x1 = x2

return x1

not correct

block1

block3

block2

block1

block3

block2

block1

block3

block2

Copy propagation Back translation by naïve method

Problems of naïve SSA back translation(lost copy problem)

Page 24: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x0 = 1

x1 = φ (x0, x2)

x2 = 2

return x1

x0 = 1x1 = x0

x2 = 2x1 = x2

return temp

block1

block3

block2

block1

block3

block2

temp = x1

(a) SSA form (b) normal form after back translation

liverangeof x1

liverangeoftemp

To remedy these problems...(i) SSA back translation algorithm by Briggs

Page 25: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

x0 = 1

x1 = φ (x0, x2)

x2 = 2

return x1

live range ofx0 x1 x2

x0 = 1

x1’ = φ (x0, x2)x1 = x1’x2 = 2

return x1

{x0, x1’, x2} → A

x1 = AA = 2

A = 1

block1

block3

block2

block1

block3

block2

return x1

(a) SSA form (b) eliminating interference

(c) normal form after back translation

live range ofx0 x1' x2

block1

block3

block2

(ii) SSA back translation algorithm by Sreedhar

Page 26: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

4 (4)3 (3)80Hige Swap

0 (0)0 (0)90Selection Sort

5 (2)5 (2)90GCD

0 (0)0 (0)40fib

4 (2)6 (4)90do

4 (4)7 (7)100Swap-lost

3 (3)5 (5)70Swap

2 (2)2 (2)50Simple ordering

1 (1)1 (1)30Lost copy

SreedharBriggs +

Coalescing

BriggsSSAform

No. of copies (no. of copies in loops)

Empirical comparison of SSA back translation

Page 27: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

4. Examples of SSA form optimization

Page 28: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Conditional constant propagation/* from Appel, A.: Modern compiler implementation in Java, 2nd ed., 2002, Fig. 19.4 */int main() { int i, j, k; i = 1; j = 1; k = 0; while (k < 100) { if (j < 20) { j = i; k = k + 1; } else { j = k; k = k + 2; } } printf("%d¥n",j);}

Example source program

Page 29: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Conditional constant propagation

k = 0;L3:if (k >= 100) go to L8;k = k + 1;goto L3;L8:printf("%d¥n",1);

(it is actually in SSA fomintermediate representation, butshown here in C style without φ)

By carefully analyzing the source program, we know that ‘j’ is always 1.

i = 1; j = 1; k = 0; while (k < 100) { if (j < 20) { j = i; k = k + 1; } else { j = k; k = k + 2; } } printf("%d¥n",j);

after conditional constantpropagation

Page 30: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

By carefully analyzing the source program, we know that ‘j’ is always 1.

i = 1; j = 1; k = 0; while (k < 100) { if (j < 20) { j = i; k = k + 1; } else { j = k; k = k + 2; } } printf("%d¥n",j);

k = 0;while (k < 100) { k = k + 1;}printf("%d¥n",1);

(in structured program style)

We see that the else partof the while statement isdeleted.

Conditional constant propagation

(same as before)

Page 31: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Operator strength reduction of loop induction variables andlinear function test replacement

/* addvectosr.c -- add vector for osr example */void addvect(int z[], int x[], int y[], int n) { int i; for (i = 0; i < n; i++) { z[i] = x[i] + y[i]; }}

Example source program

Page 32: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

1

+

φ

0

*

+

x

i1 = 0L1: i2 = φ(i1, i3) if (i2 >= n1) goto L6 temp4i = 4 * i2 tempa = x + temp4i tempxi = * tempa ... i3 = i2 + 1 goto L1L6:

i1

i2

i3

temp4i

tempatempxi

load

SSA form intermediaterepresentation shown in C style

SSA graph

Operator strength reduction of loop induction variables andlinear function test replacement

(‘load’ corresponds to prefix ‘*’ in C)

Page 33: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

1

+

φ

0

*

+

x

i1

i2

i3

temp4i

tempatempxi

load+

φ

4

0

+

temp4i1

temp4i2

temp4i3

tempxi

load

x

Operator strength reduction of loop induction variables andlinear function test replacement

transformation of SSA graph - strength reduction(same as before)

Page 34: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Operator strength reduction of loop induction variables andlinear function test replacement

reconstruct SSA form

temp4i1 = 0

L1: temp4i2 = φ(temp4i1, temp4i3)

...

tempxi = * (x + temp4i2)

...

temp4i3 = temp4i2 + 4

...

SSA form

SSA graph (same as before)

+

φ

4

0

+

temp4i2

temp4i3

tempxi

load

x

temp4i1

Page 35: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Operator strength reduction of loop induction variablesand linear function test replacement

void addvect (int z[],int x[], int y[], int n) { int i; for (i = 0; i < n; i++) { z[i] = x[i] + y[i]; }}

Example source program ... temp4n = n << 2; ... temp4i = 0; i = 0; if (i >= n) goto L6;L4: tempxi = * (x + temp4i); tempyi = * (y + temp4i); * (z + temp4i) = tempxi + tempyi; i = i + 1; temp4i = temp4i + 4; if (temp4i < temp4n) goto L4;L6:

after strength reduction of ind var

In array accesses, ‘multiply by 4’disappears. (Actually it is in SSAform intermediate representation, butshown here in C style without φ.)

Page 36: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Operator strength reduction of loop induction variablesand linear function test replacementafter strength reduction of ind var

... temp4n = n << 2; if (0 >= n) goto L6; temp4i = 0;L4: tempxi = * (x + temp4i); tempyi = * (y + temp4i); * (z + temp4i) = tempxi + tempyi; temp4i = temp4i + 4; if (temp4i < temp4n) goto L4;L6:

after all optimization

Test of induction variable ‘i’ is replacedby that of ‘temp4i’, and ‘i’ disappears.

... temp4n = n << 2; ... temp4i = 0; i = 0; if (i >= n) goto L6;L4: tempxi = * (x + temp4i); tempyi = * (y + temp4i); * (z + temp4i) = tempxi + tempyi; i = i + 1; temp4i = temp4i + 4; if (temp4i < temp4n) goto L4;L6:(same as before)

Page 37: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Common subexpression elimination

/* cse_test.c */...a = 1;b = 2;x = 3;y = a + b;c = x + y;if (a < 10) z = a + b;else z = a + b;d = x + z;printf("%d¥n",d);

Example source program

Page 38: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Common subexpression elimination

a = 1;b = 2;x = 3;y = a + b;c = x + y;if (a < 10) z = a + b;else z = a + b;d = x + z;printf("%d¥n", d);

a = 1;b = 2;x = 3;y = a + b;c = x + y;if (a < 10) (z IS y) // a + b is a common subexpr // and z is equal to y.else (z IS y) // a + b is a common subexpr //and z is equal to y.(z IS y IS a+b) // therefore, z is equal to y // or a+b after if statement.(d IS x+z) // d is equal to x+zprintf("%d¥n", d);

source programafter analysis

Page 39: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Common subexpression elimination

a = 1;b = 2;x = 3;z = a + b;printf("%d¥n", x+z);after commonsubexpr elim,dead code elim,and coalescing

printf("%d¥n", 6);

after alloptimizations

a = 1;b = 2;x = 3;y = a + b;c = x + y;if (a < 10) (z IS y)else (z IS y)(z IS y IS a+b)(d IS x+z)printf("%d¥n", d);

after analysis (same as before)

Page 40: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

5. Preliminary experimental results

Coins C-to-SPARC compiler Measured on Sun Blade 1000

Ultra SPARC III Superscalar SPARC V9 750 MHz * 2 CPU L1 cache : 64 kB data, 32 kB instruction memory: 1 GB SunOS 5.8

Page 41: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Execution time of object code

gcc -O0 NO SSA: Coins baseline compiler (without SSA optimization) SSA CSE: constant propagation, hoisting loop invariant, SSA graph, commonsubexpression elimination, copy propagation, constant propagation, dead codeelimination, operator strength reduction, constant propagation, commonsubexpression elimination, redundant phi elimination, dead code elimination,empty block elimination, in this order (pruned SSA, Sreedhar’s method 3 backtranslation, no memory alias analysis, loop transformation) SSA CSEQP: constant propagation, hoisting loop invariant, SSA graph,common subexpression elimination by EQP, copy propagation, constantpropagation, dead code elimination, operator strength reduction, constantpropagation, common subexpression elimination by EQP, redundant phielimination, dead code elimination, empty block elimination, in this order(pruned SSA, Sreedhar’s method 3 back translation and Chaitin’s coalescing,loop transformation) gcc -O2

Legend

Page 42: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Execution time of object code

0.0

0.2

0.4

0.6

0.8

1.0

1.2

addvect.c

bubble sort

insertion sort

long number e

stable marriage

nqueens

shell sort

gcc -O0NO SSASSA CSESSA CSEQPgcc -O2

(gcc -O0 =1)(small integer programs)

Page 43: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Execution time of object code

0.0

0.2

0.4

0.6

0.8

1.0

1.2

addvect.c

bubble sort

insertion sort

stable marriage

nqueens

shell sort

gcc -O0NO SSASSA CSESSA CSEQPgcc -O2

(gcc -O0 =1)(small floating point programs)

Page 44: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Execution time of object code

0.0

0.2

0.4

0.6

0.8

1.0

1.2

1.4

1.6

mgrid swim tomcatv

gcc -O0

NO SSA

SSA CSE

SSA CSEQP

gcc -O2

(gcc -O0 = 1)(SPEC 95 Fortran benchmarks rewritten to C)

Page 45: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Execution time of object code

0

0.2

0.4

0.6

0.8

1

1.2

181.mcf

gcc -O0NO SSASSA CSESSA MANYgcc -O2

SSA CSE: hoist loop inv, common subexpression eliminationSSA MANY: hoist loop inv, const prop, com subexp elim, dead code elim, coalescing

(gcc -O0 = 1)

(SPEC 2000 benchmark)

Page 46: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Related work: SSA form in compiler infrastructures

SUIF (Stanford Univ.): no SSA form machine SUIF (Harvard Univ.): only one optimization

in SSA form Scale (Univ. Massachusetts): a couple of SSA form

optimizations. But it generates only C programs, andcannot generate machine codes like in COINS.

GCC: some attempts but experimental

Only COINS will have full support of SSA form as acompiler infrastructure

Page 47: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

Summary• SSA form module of the COINS infrastructure• Empirical comparison of algorithms for SSA

translation gave criterion to make a good choice• Empirical comparison of algorithms for SSA back

translation suggests Sreedhar et al.’s method isrecommended.

• A rich set of SSA form optimization modules• Preliminary experimental results

Hope COINS and its SSA module help the compilerwriter to compare/evaluate/add optimization methods

Page 48: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3
Page 49: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

the following slides are unnecessary

Page 50: Static Single Assignment Form in the COINS Compiler ...sassa/coins- · in the COINS Compiler Infrastructure ... 0. COINS infrastructure and the SSA form ... x0 x1' x2 block1 block3

After Conditional Constant Propagation (cont.)

k = 0;L3:if (k >= 100) go to L8;k = k + 1;goto L3;L8:printf("%d¥n",1);

We see that the else part of the while statement isdeleted.

k = 0;while (k < 100) { k = k + 1;}printf("%d¥n",1);

(in structure program style)

=