+ All Categories
Home > Documents > Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun,...

Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun,...

Date post: 20-Sep-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
50
1 March 22, 2013 Matthias Braun, Sebastian Buchwald , Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form IPD Institute for Program Structures and Data Organization, Karlsruhe Institute of Technology (KIT) Simple and Efficient Construction of Static Single Assignment Form Matthias Braun, Sebastian Buchwald , Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau KIT – University of the State of Baden-Wuerttemberg and National Research Center of the Helmholtz Association www.kit.edu computer science saarland university
Transcript
Page 1: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Institute for Program Structures and Data Organization, Karlsruhe Institute of Technology (KIT)

Simple and Efficient Construction of Static SingleAssignment Form

Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa,Christoph Mallon and Andreas Zwinkau

KIT – University of the State of Baden-Wuerttemberg andNational Research Center of the Helmholtz Association www.kit.edu

computer science

saarlanduniversity

Page 2: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Modern Intermediate Representations

2 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

AST non-SSA

SSA

Optimization Optimization

Two-phase approach:Construct non-SSA intermediate representation from AST

Compute dominance treeCompute liveness

Construct SSA form

Page 3: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Simple and Efficient SSA Construction

3 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

AST non-SSA

SSA

Optimization Optimization

Our SSA construction algorithmRequires no prior analysisConstructs SSA form directly from AST

Page 4: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Straight-Line Code

4 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Data structure:For each basic block: Mapping Variables→ Values

Code:

a = 42;b = a;a = a + b;

IR:

v0: 42

v1: v0 + v0

v0: 42

Mapping:

"a" 7→ v0

Page 5: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Straight-Line Code

4 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Data structure:For each basic block: Mapping Variables→ Values

Code:

a = 42;b = a;a = a + b;

IR:

v0: 42

v1: v0 + v0

v0: 42

Mapping:

"a" 7→ v0"b" 7→ v0

Page 6: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Straight-Line Code

4 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Data structure:For each basic block: Mapping Variables→ Values

Code:

a = 42;b = a;a = a + b;

IR:

v0: 42

v1: v0 + v0

v0: 42

v1: v0 + v0

Mapping:

"a" 7→ v0"b" 7→ v0

Page 7: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Straight-Line Code

4 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Data structure:For each basic block: Mapping Variables→ Values

Code:

a = 42;b = a;a = a + b;

IR:

v0: 42

v1: v0 + v0

v0: 42

v1: v0 + v0

Mapping:

"a" 7→ v1"b" 7→ v0

Page 8: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Properties of Basic Blocks

5 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Filled

All code of this block has already been constructedExisting mapping will not change

SealedThe block is connected to all its direct control flow predecessorsAll direct control flow predecessors are filled

Page 9: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

start

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 10: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...start

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 11: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...start

while

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 12: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...start

while

if

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 13: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...start

while

if

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 14: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...start

while

if

then

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 15: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v1: ...

start

while

if

then

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 16: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v1: ...

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 17: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v1: ...

use(v?)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 18: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v1: ...

v2: φ(v?, v?)use(v?)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 19: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v1: ...

v2: φ(v1, v?)use(v?)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 20: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3:•

v1: ...

v2: φ(v1, v3)use(v?)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 21: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3:•

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 22: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3:•

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 23: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3:•

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 24: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v?, v?)

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 25: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v0, v?)

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 26: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v0, v2)

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endif

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 27: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v0, v2)

v1: ...

v2: φ(v1, v3)use(v2)

start

while

if

then

endifend

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 28: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v0, v2)

v1: ...

v2: φ(v1, v3)use(v2)use(v?)

start

while

if

then

endifend

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 29: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Handling Multiple Basic Blocks

6 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = ...while (...) {

if (...) {x = ...

}use(x)

}use(x)

}

v0: ...

v3: φ(v0, v2)

v1: ...

v2: φ(v1, v3)use(v2)use(v3)

start

while

if

then

endifend

Filled: Inserted all instructionsSealed: Connected to all direct predecessors

Page 30: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Guarantees for Constructed SSA Form

7 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Pruned SSA formNo dead φ functions. X

Minimal SSA form (Cytron et al.)φ functions only occur at iterated dominance frontiers. ?

Page 31: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Trivial φ Functions

8 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

v0: ...

v1: φ(v0, v0)use(v1)

v0: ...

v1: φ(v0, v1)

use(v1)

Trivial φ functionJust references one value (except itself)

Page 32: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Optimization of Trivial φ Functions

9 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

v

φ0

φ1

v

φ1

v

Optimization of trivial φ functionsReplace trivial φ function by its unique operandIterative approach to remove all trivial φ functions

Page 33: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Guarantees for Constructed SSA Form

10 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

TheoremA program in SSA form with a reducible control flow graph without anytrivial φ functions is in minimal SSA form.

Pruned SSA formNo dead φ functions. X

Minimal SSA form (Cytron et al.)φ functions only occur at iterated dominance frontiers. X

∗ for Java and most C programs

Page 34: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Irreducible Control Flow

11 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

v0: ...

v1: φ(v0,v2)

v2: φ(v0,v1)

use(v2)

v0

φ1 φ2

use

Redundant set of φ functionsGeneralization of trivial φ functionsJust reference one value (except themselves)

Page 35: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Redundant φ Functions and SCCs

12 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

v

φ0 φ1

φ2

LemmaLet P be a redundant set of φ functions. Then there is a stronglyconnected component S ⊆ P that is also redundant.

Page 36: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Optimization of Redundant φ Functions

13 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

φ0

x y

φ1

φ2

φ0

x y

φ1

φ2

φ0

x y

Algorithm to find all redundant φ functionsUse Tarjan’s algorithm to find φ-SCCs of maximum sizeIf SCC is not redundant: Check for redundant inner SCC

Page 37: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

New Criterion for Minimal SSA Form

14 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Definition (Minimal SSA form (SCC))A program is in minimal SSA form if it contains no redundant φ-SCCs.

AdvantagesIndependent of the source programImplies Cytron et al.’s criterion

Page 38: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Optimizations and φ-SCCs

15 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

void foo(void) {x = 42while (...) {

if (...) {x = 42

}use(x)

}use(x)

}

v0: 42

v3: φ(v0, v2)

v1: 42

v2: φ(v1, v3)use(v2)use(v3)

start

while

if

then

endifend

Page 39: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Guarantees for Constructed SSA Form

16 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Pruned SSA formNo dead φ functions. X

Minimal SSA form (Cytron et al.)φ functions only occur at iterated dominance frontiers. X

Minimal SSA form (SCC)No redundant φ-SCC. X

Can we have even fewer φ functions?

Page 40: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 41: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: x v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 42: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: xv1: 0

v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 43: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: xv1: 0

v3: false

v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 44: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: xv1: 0

v3: false

v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 45: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

On-the-Fly Optimizations

17 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

int bar(int x) {int mask = 0;int res;

if (x & mask) {res = 0;

} else {res = x;

}

return res;}

v0: xv1: 0

v3: false

return v0

v0: xv1: 0v2: v0& v1v3: v2 6= 0condjump v3

v5: φ(v1,v0)return v5

Page 46: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Evaluation Setup

18 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Setup to evaluate our SSA construction algorithmFull-fledged implementation in cparser/libFirmProof-of-concept implementation in clang/LLVMComparison against existing SSA construction algorithm

Sreedhar and GaoBetter than Cytron et al.Highly-tuned implementation

C programs of SPEC CINT2000 benchmark

Page 47: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Number of Constructed IR Instructions

19 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Benchmark LLVM non-SSASSA

non-SSA SSA

164.gzip 12,038 9,187 131%175.vpr 40,701 27,155 150%176.gcc 516,537 395,652 131%181.mcf 3,988 2,613 153%186.crafty 44,891 36,050 125%197.parser 30,237 20,485 148%253.perlbmk 185,576 140,489 132%254.gap 201,185 149,755 134%255.vortex 126,097 88,257 143%256.bzip2 8,605 6,012 143%300.twolf 76,078 58,737 130%

Average 138%

Page 48: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Quality Comparison

20 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Benchmark Number of φ functions Redundant φ-SCCs

LLVM Our ∆ Optimization Irreducible

164.gzip 594 594 0 0 0175.vpr 1,201 1,201 0 0 0176.gcc 12,904 12,910 6 2 3181.mcf 154 154 0 0 0186.crafty 1,466 1,466 0 0 0197.parser 1,243 1,243 0 0 0253.perlbmk 5,840 5,857 17 0 5254.gap 9,325 9,326 1 0 0255.vortex 2,739 2,737 2 1 0256.bzip2 359 359 0 0 0300.twolf 2,849 2,849 0 0 0

Sum 38,674 38,696 22 3 8

Page 49: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Compilation Speed

21 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

Benchmark LLVM Our OurLLVM

164.gzip 969,233,677 967,798,047 99.85%175.vpr 3,039,801,575 3,025,286,080 99.52%176.gcc 25,935,984,569 26,009,545,723 100.28%181.mcf 722,918,540 722,507,455 99.94%186.crafty 3,653,881,430 3,632,605,590 99.42%197.parser 2,084,205,254 2,068,075,482 99.23%253.perlbmk 12,246,953,644 12,062,833,383 98.50%254.gap 8,358,757,289 8,339,871,545 99.77%255.vortex 7,841,416,740 7,845,699,772 100.05%256.bzip2 569,176,687 564,577,209 99.19%300.twolf 6,424,027,368 6,408,289,297 99.76%

Average 99.59%

Page 50: Simple and Efficient Construction of Static Single ... - KIT · 1 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon and Andreas Zwinkau

Conclusion

22 March 22, 2013 Matthias Braun, Sebastian Buchwald, Sebastian Hack, Roland Leißa, Christoph Mallon andAndreas Zwinkau – Simple and Efficient Construction of Static Single Assignment Form

IPD

KIT

SummarySimple SSA construction algorithm: 375 LOC vs. 1141 LOCGuarantees minimal and pruned SSA formCan reuse conservative optimizationsNew criterion for minimal SSA formA lot more in the paper

Give it a try!


Recommended