SlideServe
Menu
Préférences
© SlideServe · v2026

Global optimizations

aaralyn avatar
67 diapositives · 853 Views · Jul 17, 2014

Global optimizations. Local analysis framework. Define an analysis of a basic block as a quadruple ( D , V , F , I ) where D is a direction (forwards or backwards) V is a set of values the program can have at any point

Global optimizations - slide 1
01 / 67Global optimizations
1 / 17

Télécharger la présentation

Global optimizations
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Global optimizations

  2. Local analysis framework • Define an analysis of a basic block as a quadruple (D, V, F, I) where • D is a direction (forwards or backwards) • V is a set of values the program can have at any point • F is a family of transfer functions defining the meaning of any expression as a function f : VV • I is the initial information at the top (or bottom) of a basic block

  3. Available Expressions • Direction: Forward • Values: Sets of expressions assigned to variables • Transfer functions: Given a set of variable assignments V and statement a = b + c: • Remove from V any expression containing a as a subexpression • Add to V the expression a = b + c • Formally: Vout = (Vin \ {e | e contains a})  {a = b + c} • Initial value: Empty set of expressions

  4. Available expressions analysis IN[s] s OUT[s] entry: {} Initial value a = b; {a=b} {a=b, c=b} c = b; {a=b, c=b, d=a+b} d = a + b; {a=b, c=b, d=a+b, e=a+b} e = a + b; {a=b, c=b, d=b, e=a+b} d = b; f = a + b; {a=b, c=b, d=b, e=a+b, f=a+b}

  5. Optimizing from available expressions • Common sub-expression elimination • If {… t = y op z … } x = y op z • Can transform statement into x = t • Copy propagation • If {… y = t … } x = y op z • Can transform statement into x = t op z • Note: same for x=y and x=op y

  6. Common sub-expression elimination entry: {} a = b; {a=b} {a=b, c=b} c = b; {a=b, c=b, d=a+b} d = a + b; {a=b, c=b, d=a+b, e=a+b} e = d; e = a + b; {a=b, c=b, d=b, e=a+b} d = b; f = e; f = a + b; {a=b, c=b, d=b, e=a+b, f=a+b}

  7. Liveness Analysis • Direction: Backward • Values: Sets of variables • Transfer functions: Given a set of variable assignments V and statement a = b + c: • Remove a from V (any previous value of a is now dead) • Add b and c to V (any previous value of b or c is now live) • Formally: Vin = (Vout \ {a})  {b,c} • Initial value: Depends on semantics of language • E.g., function arguments and return values (pushes) • Result of local analysis of other blocks as part of a global analysis

  8. Liveness analysis IN[s] s OUT[s] { b } a = b; c = a; { a, b } d = a + b; { a, b } e = d; { a, b, d } d = a; { a, b, e } { b, d, e } f = e; Initial value { b, d } exit:

  9. Optimizing from liveness analysis • Dead code elimination • If x = y op z {v1,…,vk} • And x  {v1,…,vk} • We can eliminate x = y op z • Note: same for x=y and x=op y

  10. Dead code elimination { b } a = b; c = a; d = a + b; e = d; d = a; { a, b} f = e; { b, d } exit:

  11. Zero value Analysis • Direction: Forward • Values: Sets of valuations (values assigned to variables) • Transfer functions: • Given a set of variable assignments V and statement a = b op c: update valuation of a at V according to values of b, c and operator op. • Formally: Vout = (Vin \ {a = value’})  {a = value} • Initial value: Depends on semantics of language • E.g., function arguments and return values (pushes) • Result of local analysis of other blocks as part of a global analysis

  12. Zero value Analysis IN[s] s OUT[s] entry: {b=} Initial value a = b; {b=, a=} {b=, a=, c=} c = a + b; {b=, a=, c=, d=} d = a / c; {b=, a=, c=0, d=} c = b - b; {b=, a=?, c=0, d=} a = d - b; f = d / c; {b=, a=?, c=0, d=, f=?}

  13. Optimizing from zero value analysis • Safe division • If x = y / z {v1,…,vk} • And z  {v1,…,z=0,…,vk} or {v1,…,z=?,…,vk} • We can update x = y safe div z

  14. Safe division entry: {b=} a = b; {b=, a=} {b=, a=, c=} c = a + b; {b=, a=, c=, d=} d = a / c; {b=, a=, c=0, d=} c = b - b; {b=, a=?, c=0, d=} a = d - b; f = d safe div c; f = d / c; {b=, a=?, c=0, d=, f=?}

  15. Global Optimizations

  16. Global dead code elimination • Local dead code elimination needed to know what variables were live on exit from a basic block • This information can only be computed as part of a global analysis • How do we modify our liveness analysis to handle a CFG?

  17. CFGs without loops b = c + d;e = c + d; Entry x = c + d;a = b + c; y = a + b; x = a + b;y = c + d; Exit

  18. CFGs without loops {a, c, d} b = c + d;e = c + d; Which variables may be live on some execution path? Entry {a, b, c, d} ? {b, c, d} x = c + d;a = b + c; {a, b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} x = a + b;y = c + d; {a, b, c, d} {x, y} {x, y} Exit

  19. CFGs without loops {c, d} b = c + d;e = c + d; Need to combine currently-computed value with new value Need to combine currently-computed value with new value Entry {b, c, d} x = c + d;a = b + c; {b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} {a, b, c, d} x = a + b;y = c + d; {a, b, c, d} {x, y} {x, y} Exit

  20. CFGs without loops {a, c, d} b = c + d;e = c + d; Entry {a, b, c, d} x = c + d;a = b + c; {b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} {a, b, c, d} x = a + b;y = c + d; {a, b, c, d} {x, y} {x, y} Exit

  21. CFGs without loops b = c + d; Entry a = b + c; x = a + b;y = c + d; Exit

  22. CFGs without loops b = c + d; Entry a = b + c; x = a + b;y = c + d; Exit

  23. CFGs with loops b = c + d;c = c + d;IfZ ... Entry a = b + c;d = a + c; c = a + b; a = a + b;d = b + c; ? Exit {a}

  24. CFGs with loops - initialization b = c + d;c = c + d; {} Entry a = b + c;d = a + c; {} c = a + b; {} a = a + b;d = b + c; {} Exit {a}

  25. CFGs with loops - iteration b = c + d;c = c + d; {} Entry a = b + c;d = a + c; {} c = a + b; {} a = a + b;d = b + c; {} {a} Exit {a}

  26. CFGs with loops - iteration b = c + d;c = c + d; {} Entry a = b + c;d = a + c; {} c = a + b; {} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  27. CFGs with loops - iteration b = c + d;c = c + d; {} Entry a = b + c;d = a + c; {} c = a + b; {} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  28. CFGs with loops - iteration b = c + d;c = c + d; {} Entry a = b + c;d = a + c; {b, c} c = a + b; {} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  29. CFGs with loops - iteration b = c + d;c = c + d; {} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  30. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  31. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  32. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a} Exit {a}

  33. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  34. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  35. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  36. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  37. CFGs with loops - iteration b = c + d;c = c + d; {c, d} Entry {a, b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  38. CFGs with loops - iteration b = c + d;c = c + d; {a, c, d} Entry {a, b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  39. CFGs with loops - iteration b = c + d;c = c + d; {a, c, d} Entry {a, b, c} a = b + c;d = a + c; {b, c} c = a + b; {a, b} {a, b, c} {a, b, c} a = a + b;d = b + c; {a, b, c} {a, c, d} Exit {a}

  40. Join semilattices • A join semilattice is a ordering defined on a set of elements • Any two elements have some join that is the smallest element larger than both elements • There is a unique bottom element, which is smaller than all other elements • Intuitively: • The join of two elements represents combining information from two elements by an overapproximation • The bottom element represents “no information yet” or “the least conservative possible answer”

  41. Formal definitions • A join semilattice is a pair (V, ), where • V is a domain of elements •  is a join operator that is • commutative: x  y = y  x • associative: (x  y)  z = x  (y  z) • idempotent: x  x = x • If x  y = z, we say that z is the joinor (least upper bound) of x and y • Every join semilattice has a bottom element denoted  such that   x = x for all x

  42. A general framework • A global analysis is a tuple (D, V, , F, I), where • D is a direction (forward or backward) • The order to visit statements within a basic block, not the order in which to visit the basic blocks • V is a set of values •  is a join operator over those values • F is a set of transfer functions f : VV • I is an initial value • The only difference from local analysis is the introduction of the join operator

  43. A semilattice for zero value analysis • One possible semilattice for this analysis is shown here (for each variable): ? 0 Undefined

  44. Global constant propagation x = 6;Undefined entryUndefined y = x;Undefined z = y;Undefined x=Undefinedy=Undefined z=Undefined w=Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  45. Global constant propagation x = 6;Undefined entryUndefined y = x;Undefined z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  46. Global constant propagation Undefined x = 6;Undefined entryUndefined y = x;Undefined z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  47. Global constant propagation Undefined x = 6;x = entryUndefined y = x;Undefined z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  48. Global constant propagation Undefined x = 6;x = entryUndefined y = x;Undefined z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  49. Global constant propagation Undefined x = 6;x = entryUndefined x=y = x;Undefined z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit

  50. Global constant propagation Undefined x = 6;x = entryUndefined x=y = x;x=,y= z = y;Undefined w = x;Undefined z = y / x;Undefined x = -5;Undefined exit