loops

37
School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) Loops Loops Guo, Yao Guo, Yao

Upload: gefen

Post on 05-Jan-2016

50 views

Category:

Documents


0 download

DESCRIPTION

Loops. Guo, Yao. Content. Concepts: Dominators Depth-First Ordering Back edges Graph depth Reducibility Natural Loops Efficiency of Iterative Algorithms. Loops are Important!. Loops dominate program execution time Needs special treatment during optimization - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Loops

School of EECS, Peking University

“Advanced Compiler Techniques” (Fall 2011)

LoopsLoops

Guo, YaoGuo, Yao

Page 2: Loops

2Fall 2011“Advanced Compiler

Techniques”

ContentContent Concepts:Concepts:

DominatorsDominators Depth-First OrderingDepth-First Ordering Back edgesBack edges Graph depthGraph depth ReducibilityReducibility

Natural LoopsNatural Loops Efficiency of Iterative AlgorithmsEfficiency of Iterative Algorithms

Page 3: Loops

3Fall 2011“Advanced Compiler

Techniques”

Loops are Important!Loops are Important! Loops dominate program execution Loops dominate program execution

timetime Needs special treatment during Needs special treatment during

optimizationoptimization Loops also affect the running time of Loops also affect the running time of

program analysesprogram analyses e.g., A dataflow problem can be solved e.g., A dataflow problem can be solved

in just a single pass if a program has no in just a single pass if a program has no loopsloops

Page 4: Loops

4Fall 2011“Advanced Compiler

Techniques”

DominatorsDominators Node Node dd dominatesdominates node node nn if every path if every path

from the entry to from the entry to nn goes through goes through dd.. written as: written as: d dom nd dom n

Quick observations:Quick observations: Every node dominates itself.Every node dominates itself. The entry dominates every node.The entry dominates every node.

Common Cases:Common Cases: The test of a The test of a whilewhile loop dominates all blocks loop dominates all blocks

in the loop body.in the loop body. The test of an The test of an if-then-elseif-then-else dominates all dominates all

blocks in either branch.blocks in either branch.

Page 5: Loops

5Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Dominators: Dominators

1

35

24

Page 6: Loops

6Fall 2011“Advanced Compiler

Techniques”

Dominator TreeDominator Tree Immediate dominance: d idom n

d dom n, d n, no m s.t. d dom m and m dom n

Immediate dominance relationships form a tree

1

35

24

1

35

24

Page 7: Loops

7Fall 2011“Advanced Compiler

Techniques”

Finding DominatorsFinding Dominators A dataflow analysis problem: For A dataflow analysis problem: For

each node, find all of its dominators.each node, find all of its dominators. Direction: forwardDirection: forward Confluence: set intersectionConfluence: set intersection Boundary: OUT[Entry] = {Entry}Boundary: OUT[Entry] = {Entry} Initialization: OUT[B] = All nodesInitialization: OUT[B] = All nodes Equations:Equations:

OUT[B] = IN[B] U {B}OUT[B] = IN[B] U {B} IN[B] = IN[B] = p is a predecessor of Bp is a predecessor of B OUT[p] OUT[p]

Page 8: Loops

8Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Dominators: Dominators

1

35

24

{1,5}

{1,4}

{1,2,3}

{1,2}

{1}

Page 9: Loops

9Fall 2011“Advanced Compiler

Techniques”

Depth-First SearchDepth-First Search Start at entry.Start at entry. If you can follow an edge to an If you can follow an edge to an

unvisited node, do so.unvisited node, do so. If not, backtrack to your If not, backtrack to your parentparent

(node from which you were visited).(node from which you were visited).

Page 10: Loops

10Fall 2011“Advanced Compiler

Techniques”

Depth-First Spanning Depth-First Spanning TreeTree

Root = entry.Root = entry. Tree edges are the edges along Tree edges are the edges along

which we first visit the node at the which we first visit the node at the head.head.

1

53

42

Page 11: Loops

11Fall 2011“Advanced Compiler

Techniques”

Depth-First Node OrderDepth-First Node Order The reverse of the order in which a The reverse of the order in which a

DFS DFS retreatsretreats from the nodes. from the nodes. Alternatively, reverse of postorder Alternatively, reverse of postorder

traversal of the tree.traversal of the tree.

Page 12: Loops

12Fall 2011“Advanced Compiler

Techniques”

ExampleExample: DF Order: DF Order

1

35

24

Page 13: Loops

13Fall 2011“Advanced Compiler

Techniques”

Four Kinds of EdgesFour Kinds of Edges

1.1. Tree edges.Tree edges.

2.2. Advancing edgesAdvancing edges (node to proper (node to proper descendant).descendant).

3.3. Retreating edgesRetreating edges (node to (node to ancestor, including edges to self).ancestor, including edges to self).

4.4. Cross edgesCross edges (between two nodes, (between two nodes, neither of which is an ancestor of neither of which is an ancestor of the other.the other.

Page 14: Loops

14Fall 2011“Advanced Compiler

Techniques”

A Little MagicA Little Magic Of these edges, only retreating Of these edges, only retreating

edges go from high to low in DF edges go from high to low in DF order.order.

Most surprising: all cross edges go Most surprising: all cross edges go right to left in the DFST.right to left in the DFST. Assuming we add children of any node Assuming we add children of any node

from the left.from the left.

Page 15: Loops

15Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Non-Tree : Non-Tree EdgesEdges

1

35

24

Retreating

Forward

Cross

Page 16: Loops

16Fall 2011“Advanced Compiler

Techniques”

Back EdgesBack Edges An edge is a An edge is a back edgeback edge if its head if its head

dominates its tail.dominates its tail. TheoremTheorem: Every back edge is a : Every back edge is a

retreating edge in every DFST of retreating edge in every DFST of every flow graph.every flow graph. Converse almost always true, but not Converse almost always true, but not

always.always.

Page 17: Loops

17Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Back Edges: Back Edges

1

35

24

{1,5}

{1,4}

{1,2,3}

{1,2}

{1}

Page 18: Loops

18Fall 2011“Advanced Compiler

Techniques”

Reducible Flow GraphsReducible Flow Graphs A flow graph is A flow graph is reduciblereducible if every if every

retreating edge in any DFST for that retreating edge in any DFST for that flow graph is a back edge.flow graph is a back edge.

Testing reducibilityTesting reducibility: Take any DFST : Take any DFST for the flow graph, remove the back for the flow graph, remove the back edges, and check that the result is edges, and check that the result is acyclic.acyclic.

Page 19: Loops

19Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Remove Back : Remove Back EdgesEdges

1

35

24

Page 20: Loops

20Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Remove Back : Remove Back EdgesEdges

1

35

24

Remaining graph is acyclic.

Page 21: Loops

21Fall 2011“Advanced Compiler

Techniques”

Why Reducibility?Why Reducibility? Folk theoremFolk theorem: All flow graphs in : All flow graphs in

practice are reducible.practice are reducible.

FactFact: If you use only while-loops, for-: If you use only while-loops, for-loops, repeat-loops, if-then(-else), loops, repeat-loops, if-then(-else), break, and continue, then your flow break, and continue, then your flow graph graph isis reducible. reducible.

Page 22: Loops

22Fall 2011“Advanced Compiler

Techniques”

Example: Nonreducible Example: Nonreducible GraphGraph

A

CB

In any DFST, oneof these edges willbe a retreating edge.

A

B

C

A

B

C

Page 23: Loops

23Fall 2011“Advanced Compiler

Techniques”

Why Care About Why Care About Back/Retreating Edges?Back/Retreating Edges?

1.1. Proper ordering of nodes during Proper ordering of nodes during iterative algorithm assures number iterative algorithm assures number of passes limited by the number of of passes limited by the number of ““nestednested”” back edges. back edges.

2.2. Depth of nested loops upper-Depth of nested loops upper-bounds the number of nested back bounds the number of nested back edges.edges.

Page 24: Loops

24Fall 2011“Advanced Compiler

Techniques”

DF Order and Retreating DF Order and Retreating EdgesEdges

Suppose that for a Reaching Suppose that for a Reaching Definitions analysis, we visit nodes Definitions analysis, we visit nodes during each iteration in DF order.during each iteration in DF order.

The fact that a definition The fact that a definition dd reaches a reaches a block will propagate in one pass along block will propagate in one pass along any increasing sequence of blocks.any increasing sequence of blocks.

When When dd arrives along a retreating arrives along a retreating edge, it is too late to propagate edge, it is too late to propagate dd from from OUT to IN.OUT to IN.

Page 25: Loops

25Fall 2011“Advanced Compiler

Techniques”

ExampleExample: DF Order: DF Order

1

35

24

d d

d

d

d

d

d d

d

d

Suppose there is a definition of

d in Block 2.

Page 26: Loops

26Fall 2011“Advanced Compiler

Techniques”

Depth of a Flow GraphDepth of a Flow Graph The The depth depth of a flow graph is the of a flow graph is the

greatest number of retreating edges greatest number of retreating edges along any acyclic path.along any acyclic path.

For RD, if we use DF order to visit For RD, if we use DF order to visit nodes, we converge in depth+2 nodes, we converge in depth+2 passes.passes. Depth+1 passes to follow that number Depth+1 passes to follow that number

of increasing segments.of increasing segments. 1 more pass to realize we converged.1 more pass to realize we converged.

Page 27: Loops

27Fall 2011“Advanced Compiler

Techniques”

Example: Depth = 2Example: Depth = 2

increasing

retreating

increasingincreasing

retreating

1 -> 4 ->7 - - -> 3 -> 10 ->17 - - -> 6 -> 18 -> 20

Page 28: Loops

28Fall 2011“Advanced Compiler

Techniques”

Similarly . . .Similarly . . . AE also works in depth+2 passes.AE also works in depth+2 passes.

UnavailabilityUnavailability propagates along retreat- propagates along retreat-free node sequences in one pass.free node sequences in one pass.

So does LV if we use So does LV if we use reversereverse of DF of DF order.order. A use propagates backward along paths A use propagates backward along paths

that do not use a retreating edge in one that do not use a retreating edge in one pass.pass.

Page 29: Loops

29Fall 2011“Advanced Compiler

Techniques”

In General . . .In General . . . The depth+2 bound works for any The depth+2 bound works for any

monotone framework, as long as monotone framework, as long as information only needs to propagate information only needs to propagate along acyclic paths.along acyclic paths. ExampleExample: if a definition reaches a point, : if a definition reaches a point,

it does so along an acyclic path.it does so along an acyclic path.

Page 30: Loops

30Fall 2011“Advanced Compiler

Techniques”

However . . .However . . . Constant propagation does not have this Constant propagation does not have this

property. property.

a = b

b = c

c = 1

L: a = b

b = c

c = 1

goto L

Page 31: Loops

31Fall 2011“Advanced Compiler

Techniques”

Why Depth+2 is GoodWhy Depth+2 is Good Normal control-flow constructs Normal control-flow constructs

produce reducible flow graphs with produce reducible flow graphs with the number of back edges at most the number of back edges at most the nesting depth of loops.the nesting depth of loops. Nesting depth tends to be small.Nesting depth tends to be small.

A study by Knuth has shown that A study by Knuth has shown that average depth of typical flow graphs average depth of typical flow graphs =~2.75.=~2.75.

Page 32: Loops

32Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Nested Loops: Nested Loops

3 nested while-loops; depth = 3.

3 nested repeat-loops; depth = 1

Page 33: Loops

33Fall 2011“Advanced Compiler

Techniques”

Natural LoopsNatural Loops A A natural loop natural loop is defined by:is defined by:

A single entry-point called header a header dominates all nodes in the loop

A back edge that enters the loop header Otherwise, it is not possible for the flow of

control to return to the header directly from the "loop" ; i.e., there really is no loop.

Page 34: Loops

34Fall 2011“Advanced Compiler

Techniques”

Find Natural LoopsFind Natural Loops The The natural loopnatural loop of a back edge of a back edge aa--

>>bb is { is {bb} plus the set of nodes that } plus the set of nodes that can reach can reach aa without going through without going through bb..

Remove b from the flow graph, find all predecessors of a

TheoremTheorem: two natural loops are : two natural loops are either disjoint, identical, or nested.either disjoint, identical, or nested.

Page 35: Loops

35Fall 2011“Advanced Compiler

Techniques”

ExampleExample: Natural Loops: Natural Loops

1

35

24

Natural loopof 3 -> 2

Natural loopof 5 -> 1

Page 36: Loops

36Fall 2011“Advanced Compiler

Techniques”

Relationship b/w LoopsRelationship b/w Loops If two loops do not have the same

header they are either disjoint, or one is entirely contained (nested within) the

other innermost loop: one that contains no other

loop. If two loops share the same header

Hard to tell which is the inner loop Combine as one

1

2

3 4

Page 37: Loops

37Fall 2011“Advanced Compiler

Techniques”

Next TimeNext Time Single Static Assignment (SSA)Single Static Assignment (SSA)

Readings: Cytron'91, Chow'97 Readings: Cytron'91, Chow'97