constant propagation on ssa form
play

Constant Propagation on SSA form Advanced Compiler Techniques 2005 - PowerPoint PPT Presentation

Constant Propagation on SSA form Advanced Compiler Techniques 2005 Erik Stenman Virtutech Constant Propagation Safety Proves that name always has known value Constant Propagation Specializes code around that value Moves some


  1. Constant Propagation on SSA form Advanced Compiler Techniques 2005 Erik Stenman Virtutech

  2. Constant Propagation Safety ♦ Proves that name always has known value Constant Propagation ♦ Specializes code around that value ♦ Moves some computations to compile time ( ⇒ code motion ) ♦ Exposes some unreachable blocks ( ⇒ dead code ) Opportunity ♦ Value ≠ ⊥ signifies an opportunity Profitability ♦ Compile-time evaluation is cheaper than run-time evaluation ♦ Branch removal may lead to block coalescing ♦ If not, it still avoids the test & makes branch predictable Advanced Compiler Techniques 4/8/2005 2 http://lamp.epfl.ch/teaching/advancedCompiler/

  3. Sparse Constant Propagation Using SSA { TOP if its value is unknown (or set by Φ -node) ∀ expression, e Value(e) ← if its value is known (the constant c i ) c i WorkList ← Ø BOT if its value is known to vary ∀ SSA edge s = < u,v > Constant Propagation i.e. , o is “a ← b op v” or “a ← v op b” if Value(u) ≠ TOP then add s to WorkList while (WorkList ≠ Ø) remove s = < u,v > from WorkList let o be the operation that uses v Evaluating a Φ -node: Φ (x 1 ,x 2 ,x 3 , … x n ) is if Value(o) ≠ BOT then t ← result of evaluating o Value(x 1 ) ∧ Value(x 2 ) < ∧ Value(x 3 ) if t ≠ Value(o) then ∧ ... ∧ Value(x n ) ∀ SSA edge < o,x > Where add < o,x > to WorkList TOP ∧ x = x ∀ x c i ∧ c j = c i if c i = c j Same result, fewer ∧ operations c i ∧ c j = BOT if c i ≠ c j Performs ∧ only at Φ nodes BOT ∧ x = BOT ∀ x Advanced Compiler Techniques 4/8/2005 3 http://lamp.epfl.ch/teaching/advancedCompiler/

  4. Sparse Constant Propagation Using SSA TOP ... ... c i c j c k c l c m c n How long does this algorithm take to halt? Constant Propagation ♦ Initialization is two passes BOT ♦ |ops| + 2 x |ops| edges ♦ Value(x) can take on 3 values ♦ TOP, c i , BOT ♦ Each use can be on WorkList twice ♦ 2 x |args| => 4 x |ops| evaluations, WorkList pushes & pops This is an optimistic algorithm: ♦ Initialize all values to TOP , unless they are known constants ♦ Every value becomes BOT or c i , unless its use is uninitialized Advanced Compiler Techniques 4/8/2005 4 http://lamp.epfl.ch/teaching/advancedCompiler/

  5. Sparse Constant Propagation Optimism Constant Propagation: Optimism • This version of the algorithm is an i 0 ← 12 optimistic formulation while ( … ) while i 1 ← Φ (i 0 ,i 3 ) • Initializes values to TOP x ← i 1 * 17 j ← i 1 • Prior version used ⊥ ( implicit ) i 2 ← … … i 3 ← j Advanced Compiler Techniques 4/8/2005 5 http://lamp.epfl.ch/teaching/advancedCompiler/

  6. Sparse Constant Propagation Optimism Constant Propagation: Optimism • This version of the algorithm is an i 0 ← 12 optimistic formulation while while ( … ) i 1 ← Φ (i 0 ,i 3 ) • Initializes values to TOP x ← i 1 * 17 j ← i 1 • Prior version used ⊥ ( implicit ) i 2 ← … … i 3 ← j Advanced Compiler Techniques 4/8/2005 6 http://lamp.epfl.ch/teaching/advancedCompiler/

  7. Sparse Constant Propagation Optimism Constant Propagation: Optimism • This version of the algorithm is an i 0 ← 12 Clear optimistic formulation while ( … ) while that i is i 1 ← Φ (i 0 ,i 3 ) • Initializes values to TOP always x ← i 1 * 17 12 at def j ← i 1 • Prior version used ⊥ ( implicit ) of x i 2 ← … … i 3 ← j Advanced Compiler Techniques 4/8/2005 7 http://lamp.epfl.ch/teaching/advancedCompiler/

  8. Sparse Constant Propagation Optimism Constant Propagation: Optimism • This version of the algorithm is an 12 i 0 ← 12 Pessimistic optimistic formulation while ( … ) while initializations i 1 ← Φ (i 0 ,i 3 ) • Initializes values to TOP ⊥ Leads to: x ← i 1 * 17 ⊥ i 1 ≡ 12 ∧ ⊥ ≡ ⊥ j ← i 1 • Prior version used ⊥ ( implicit ) ⊥ x ≡ ⊥ * 17 ≡ ⊥ i 2 ← … j ≡ ⊥ ⊥ … i 3 ≡ ⊥ i 3 ← j ⊥ Advanced Compiler Techniques 4/8/2005 8 http://lamp.epfl.ch/teaching/advancedCompiler/

  9. Sparse Constant Propagation Optimism Constant Propagation: Optimism • This version of the algorithm is an 12 i 0 ← 12 Optimistic optimistic formulation while ( … ) while initializations i 1 ← Φ (i 0 ,i 3 ) TOP • Initializes values to TOP Leads to: x ← i 1 * 17 TOP i 1 ≡ 12 ∧ TOP ≡ 12 j ← i 1 • Prior version used ⊥ ( implicit ) TOP x ≡ 12 * 17 ≡ 204 i 2 ← … TOP j ≡ 12 … i 3 ≡ 12 i 3 ← j TOP i 1 ≡ 12 ∧ 12 ≡ 12 In general, optimism helps inside loops. M.N. Wegman & F.K. Zadeck, Constant propagation with conditional branches, ACM TOPLAS, 13(2), April 1991, pages 181–210. Advanced Compiler Techniques 4/8/2005 9 http://lamp.epfl.ch/teaching/advancedCompiler/

  10. Sparse Conditional Constant Propagation Conditional Constant Propagation What happens when it propagates a value into a branch? } ♦ TOP ⇒ we gain no knowledge. But, the algorithm ♦ BOT ⇒ either path can execute. does not use this ... ♦ TRUE or FALSE ⇒ only one path can execute. Working this into the algorithm. ♦ Use two worklists: SSAWorkList & CFGWorkList: ♦ SSAWorkList determines values. ♦ CFGWorkList governs reachability. ♦ Don’t propagate into operation until its block is reachable. Advanced Compiler Techniques 4/8/2005 10 http://lamp.epfl.ch/teaching/advancedCompiler/

  11. Sparse Conditional Constant Propagation SSAWorkList ← Ø while ((CFGWorkList ∪ SSAWorkList) ≠ Ø) CFGWorkList ← n 0 Conditional Constant Propagation while(CFGWorkList ≠ Ø) remove b from CFGWorkList ∀ block b clear b’s mark mark b evaluate each Φ -function in b ∀ expression e in b evaluate each op in b, in order Value(e) ← TOP while(SSAWorkList ≠ Ø) Initialization Step remove s = < u,v > from SSAWorkList let o be the operation that contains v To evaluate a branch t ← result of evaluating o if arg is BOT then if t ≠ Value(o) then put both targets on CFGWorklist Value(o) ← t else if arg is TRUE then ∀ SSA edge < o,x > put TRUE target on CFGWorkList if x is marked, then else if arg is FALSE then add < o,x > to SSAWorkList put FALSE target on CFGWorkList To evaluate a jump Propagation Step place its target on CFGWorkList Advanced Compiler Techniques 4/8/2005 11 http://lamp.epfl.ch/teaching/advancedCompiler/

  12. Sparse Conditional Constant Propagation Conditional Constant Propagation There are some subtle points: ♦ Branch conditions should not be TOP when evaluated. ♦ Indicates an upwards-exposed use. ( no initial value - undefined ) ♦ Hard to envision compiler producing such code. ♦ Initialize all operations to TOP. ♦ Block processing will fill in the non-top initial values. ♦ Unreachable paths contribute TOP to Φ -functions. ♦ Code shows CFG edges first, then SSA edges. ♦ Can intermix them in arbitrary order. ( correctness ) ♦ Taking CFG edges first may help with speed. ( minor effect ) Advanced Compiler Techniques 4/8/2005 12 http://lamp.epfl.ch/teaching/advancedCompiler/

  13. Sparse Conditional Constant Propagation Conditional Constant Propagation More subtle points: ♦ TOP * BOT → TOP ♦ If TOP becomes 0, then 0 * BOT → 0. ♦ This prevents non-monotonic behavior for the result value. ♦ Uses of the result value might go irretrievably to 0. ♦ Similar effects with any operation that has a “zero”. ♦ Some values reveal simplifications, rather than constants BOT * c i → BOT , but might turn into shifts & adds ( c i = 2, BOT ≥ 0 ) ♦ BOT **2 → BOT * BOT . ( vs. series or call to library ) ♦ ♦ cbr TRUE → L 1 ,L 2 becomes br → L 1 ♦ Method discovers this; it must rewrite the code, too! Advanced Compiler Techniques 4/8/2005 13 http://lamp.epfl.ch/teaching/advancedCompiler/

  14. Sparse Conditional Constant Propagation Unreachable Code Optimism Conditional Constant Propagation • Initialization to TOP is still i ← 17 if (i>0) then if then important. j 1 ← 10 • Unreachable code keeps TOP. else else j 2 ← 20 • ∧ with TOP has desired result. j 3 ←Φ (j 1 , j 2 ) k ← j 3 *17 Advanced Compiler Techniques 4/8/2005 14 http://lamp.epfl.ch/teaching/advancedCompiler/

  15. Sparse Conditional Constant Propagation Unreachable Code Optimism Conditional Constant Propagation All paths • Initialization to TOP is still i ← 17 17 execute if if (i>0) then then important. j 1 ← 10 10 • Unreachable code keeps TOP. else else j 2 ← 20 20 • ∧ with TOP has desired result. j 3 ←Φ (j 1 , j 2 ) ⊥ k ← j 3 *17 ⊥ Advanced Compiler Techniques 4/8/2005 15 http://lamp.epfl.ch/teaching/advancedCompiler/

  16. Sparse Conditional Constant Propagation Unreachable Code Optimism Conditional Constant Propagation With SCC • Initialization to TOP is still i ← 17 17 marking if if (i>0) then then important. blocks j 1 ← 10 TOP • Unreachable code keeps TOP. else else j 2 ← 20 TOP • ∧ with TOP has desired result. j 3 ←Φ (j 1 , j 2 ) TOP 170 k ← j 3 *17 Advanced Compiler Techniques 4/8/2005 16 http://lamp.epfl.ch/teaching/advancedCompiler/

Recommend


More recommend