1 cs 201 compiler construction lecture 7 code optimizations: partial redundancy elimination

18
1 CS 201 Compiler Construction Lecture 7 Code Optimizations: Partial Redundancy Elimination

Upload: nelson-mcbride

Post on 17-Dec-2015

259 views

Category:

Documents


0 download

TRANSCRIPT

1

CS 201Compiler Construction

Lecture 7Code Optimizations:

Partial Redundancy Elimination

Redundancy Elimination

The goal of redundancy elimination is to eliminate unnecessary reevaluations of the same computation.

• Global Common Sub-expression Elimination

• Loop Invariant Code Motion• Partial Redundancy Elimination – this is

the most general and thus it subsumes the above two optimizations.

2

3

Global Common Sub-expression Elimination

Analysis Required1. Available Expressions2. Reaching Definitions

Transformation Algorithm

For each statement S: A = B op C st B op C is available at entry of S’s basic block and neither B or C are redefined prior to S do the following:

1.Find definitions that reach S’s block that have B op C on the right hand side.

2.Create a new name T.3.Replace each statement D = B op C

found in step 1 by: T = B op C; D = T;4.Replace statement S by A = T.

4

Loop Invariant Code Motion

Loop Invariant: A statement that performs the same computation over and over again during multiple iterations of a loop’s execution.To detect invariant statements in a loop L:1.Mark invariant statements whose operands are either constants or variables with ALL reaching definitions outside the loop.2.Mark invariant statements whose operands satisfy conditions in step 1 or have exactly one reaching definition that is from inside the loop and has already been marked invariant.3.Repeat step 2 till no more invariants are identified.

5

Transformation

For each statement S (A=B, A=op B, A=B op C) that is marked invariant wrt L, check the following:1.S is in a block that dominates all exits of L;2.A is not defined elsewhere in L; and.3.All uses of A in L can only be reached by the definition of A in S.

Move in the order identified as invariant, each invariant statement S found to satisfy the above conditions to a newly created pre-header.

6

Why Conditions are Needed?

7

Limitations of…

8

X+Y is notAvailable here

Global Common Sub-expression Elim.

Loop Invariant Code Motion

Partial Redundancy Elimination

9Use code motion Move expressions

Algorithm for PRE

Before performing PRE, split critical edges to create suitable placement points.

10

Algorithm for PRE

Key Idea: Move expression evaluations back through the control flow graph and place them at the earliest possible points in the control flow graph. This process eliminates full and partial redundancy.

11

Algorithm for PRE

12

Algorithm Steps

1. Down-Safety Analysis backward analysis that determines to where all expressions can be “safely” moved.

2. Earliestness Analysis forward analysis that determines the earliest points to where an expression can be safely moved.

3. Perform transformation by placing expression evaluations at earliest points and eliminating them from other points.

13

Down-Safety Analysis

• Used(n) is tre if n evaluates the expression.

• Transp(n) is true if n does not modify any operands of the expression (i.e., n is transparent, it does not kill the expression) 14

Earliestness Analysis

• Forward analysis that finds the earliest nodes that are down-safe. A node n is an earliest node if there is a path from start node to n such that along this path n is the first node that is down-safe for the current value of the expression.

15

Transformation Step

1. Introduce a new auxiliary variable h for expression exp.

2. Insert at the entry of every node n for which D-Safe(n) ∧ Earliest(n) is true, the assignment: h = exp.

3. Replace every original computation of exp by h.

16

Example

17

Optional Step

• Suppressing unnecessary code motion using Delayability Analaysis - reduces register usage.

18