Topics Advanced Compilers „ Last time CMPSCI 710 Spring 2003 „ Dynamic storage allocation, garbage collection Common Subexpression Elimination „ This time „ Common subexpression elimination Emery Berger „ „ Global CSE University of Massachusetts, Amherst

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 2

Determining Equivalence Common Subexpression Elimination

„ Goal: eliminate redundant computations „ Recognizes textually identical (or „ Sparse conditional constant propagation: commutative) redundant computations „ Eliminates multiple computations „ Replaces second computation „ Eliminates unnecessary branches by result of the first

„ Can we eliminate equivalent expressions without constants? „ How do we do this efficiently?

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 3 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 4

Value Numbering Computing Value Numbers

„ Each variable, expression, and constant: „ Assign values to variables unique value number „ a = 3 ⇒ value(a) = 3 „ Map expressions to values „ Same number ⇒ computes same value „ a = b + 2 ⇒ value(a) = hash(+,value(b),2) „ Based on information from within block „ Use appropriate hash function „ Use hash functions to compute these „ Plus: commutative

„ hashc(+,value(b),2) = hashc(+,2,value(b))

„ Minus: not commutative

„ hash(-,value(b),2) ≠ hash(-,2,value(b))

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 5 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 6

1 Value Numbering Summary Map Usage

„ Forward symbolic execution of basic block „ Var to Val „ Each new value assigned to temporary „ Used to compute symbolic value of y and z when processing „ Preserves value for later use even if original variable statement of form x = y + z rewritten „ Exp to Tmp „ a = x+y; a = a+z; b = x+y ⇒ a = x+y; t = a; a = a+z; b = t; „ Used to determine which temp to use if value(y) + value(z) „ Maps previously computed when processing statement of form x = y + z „ Var to Val „ specifies symbolic value for each variable „ Exp to Val „ Exp to Val „ Used to update Var to Val when „ specifies value of each evaluated expression „ processing statement of the form x = y + z, and „ Exp to Tmp „ value(y) + value(z) previously computed „ specifies tmp that holds value of each evaluated expression UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 7 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 8

Computing Value Numbers, Example Interesting Properties

Original Basic Block New Basic Block „ Finds common subexpressions even if they use a = x+y a = x+y different variables in expressions t1 = a b = a+z „ y = a+b; x = b; z = a+x b = a+z b = b+y ⇒ y = a+b; t = y; x = b; z = t c = a+z t2 = b Var→Val Exp→Val Exp→Tmp b = b+y t3 = b „ Finds common subexpressions even if variable that → → → x v1 v1+v2 v3 v1+v2 t1 c = t2 originally held the value was overwritten y → v2 v3+v4 → v5 v3+v4 → t2 a → v3 v5+v2 → v6 v5+v2 → t3 „ y = a+b; x = b; y = 1; z = a+x z → v4 ⇒ y = a+b; t = y; x = b; y = 1; z = t b → v5v6 c → v5

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 9 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 10

Problems Global CSE

„ Algorithm has a temporary for each new value „ Value numbering eliminates some subexpressions „ a = x+y; t1 = a; but not all „ Introduces

„ lots of temporaries

„ lots of copy statements to temporaries „ In many cases, temporaries and copy statements are unnecessary

„ Eliminate with copy propagation and „ l’s value is not always equal to j’s or k’s value

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 11 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 12

2 Available Expressions: Available Expressions Dataflow Equations

„ Global CSE requires „ For a block b: computation of available expressions „ AEin(b) = expressions available on entry to b for blocks b: „ KILL(b) = expressions killed in b „ Expressions on every path in cfg from entry „ EVAL(b) = expressions defined in b and not to b subsequently killed in b „ No operand in expression redefined „ Then use appropriate temp variable for used available expressions

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 13 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 14

Available Expressions, Example Next Time

„ Build control-flow graph „ Partial Redundancy Elimination „ Solve dataflow problem „ Read ACDI:

„ Initialize AEin(i) = universal „ Ch. 13 set of expressions

„ AEin(b) = ∩j ∈ Pred(i)AEout(j) „ AEout(b) = EVAL(i) ∪ (AEin(i) – KILL(i))

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 15 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 16

Value Numbering Example Value Numbering Example

„ Step 2: „ Step 1: insert temps for conditionals „ Add entries for each rhs „ Remove entries when dependent variable changes

UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 17 UNIVERSITY OF MASSACHUSETTS, AMHERST • Department of Computer Science 18

3