outline
play

Outline Unreachable-Code Elimination Straightening If and Loop - PDF document

Outline Unreachable-Code Elimination Straightening If and Loop Simplifications Loop Inversion and Unswitching Control-Flow and Low-Level Branch Optimizations Optimizations Tail Merging (Cross Jumping) Conditional


  1. Outline • Unreachable-Code Elimination • Straightening • If and Loop Simplifications • Loop Inversion and Unswitching Control-Flow and Low-Level • Branch Optimizations Optimizations • Tail Merging (Cross Jumping) • Conditional Moves • Dead-Code Elimination • Branch Prediction • Peephole Optimization • Machine Idioms & Instruction Combining Kostis Sagonas 2 Spring 2012 Unreachable-Code Elimination Unreachable-Code Elimination entry entry Unreachable code is code that cannot be executed, regardless of the input data c = a + b c = a + b – code that is never executable for any input data d = c d = c f = a + c e > c e > c – code that has become unreachable due to a previous g = e compiler transformation a = e +c f = c – g f = c – g b = c + 1 b = c + 1 Unreachable code elimination removes this code h = e + 1 d = 4 * a d = 4 * a e < a e = d – 7 e = d – 7 – reduces the code space f = e + 2 f = e + 2 – improves instruction-cache utilization – enables other control-flow transformations exit exit Kostis Sagonas 3 Spring 2012 Kostis Sagonas 4 Spring 2012 Outline Straightening • Unreachable-Code Elimination Straightening is applicable to pairs of basic blocks such • Straightening that the first has no successors other than the second • If and Loop Simplifications and the second has no predecessors other than the first. • Loop Inversion and Unswitching • Branch Optimizations • Tail Merging (Cross Jumping) … … a = b + c • Conditional Moves a = b + c • Dead-Code Elimination b = c * 2 b = c * 2 • Branch Prediction a = a + 1 a = a + 1 c < 0 • Peephole Optimization c < 0 • Machine Idioms & Instruction Combining Kostis Sagonas 5 Spring 2012 Kostis Sagonas 6 Spring 2012 1

  2. Straightening Example Outline • Unreachable-Code Elimination Straightening in the presence of fall-throughs is tricky... • Straightening • If and Loop Simplifications L1: … L1: … a = b + c a = b + c • Loop Inversion and Unswitching goto L2 b = c * 2 • Branch Optimizations a = a + 1 • Tail Merging (Cross Jumping) L6: … if c < 0 goto L3 • Conditional Moves goto L4 goto L5 • Dead-Code Elimination • Branch Prediction L2: b = c * 2 L6: … a = a + 1 goto L4 • Peephole Optimization if c < 0 goto L3 • Machine Idioms & Instruction Combining L5: … L5: … Kostis Sagonas 7 Spring 2012 Kostis Sagonas 8 Spring 2012 If Simplifications If Simplification Example a > d a > d If simplifications apply to conditional constructs Y Y N N one or both of whose branches are empty: b = a b = a – if either the then or the else part of an if -construct is c = 4 * b c = 4 * b (a >= d) or bool empty, the corresponding branch can be eliminated Y N – one branch of an if with a constant-valued condition d = b d = c d = b can also be eliminated – we can also simplify if s whose condition, C, occurs e = a + b e = a + b in the scope of a condition that implies C (and none of the condition’s operands has changed value) … … Kostis Sagonas 9 Spring 2012 Kostis Sagonas 10 Spring 2012 Loop Simplifications Loop Simplification Example • A loop whose body is empty can be eliminated s = 0 i = 0 if the iteration-control code has no side-effects s = 0 i = i + 1 i = 0 (Side-effects might be simple enough that they can be s = s + i i = 4 L1: if i >= 4 goto L2 replaced with non-looping code at compile time) i = i + 1 s = 10 i = i + 1 s = s + i L2: … s = s + i i = i + 1 goto L1 • If number of iterations is small enough, loops s = s + i L2: … can be unrolled into branchless code and the i = i + 1 s = s + i loop body can be executed at compile time L2: … Kostis Sagonas 11 Spring 2012 Kostis Sagonas 12 Spring 2012 2

  3. Outline Loop Inversion • Unreachable-Code Elimination Loop inversion transforms a while loop into a • Straightening repeat loop (i.e. moves the loop-closing test • If and Loop Simplifications from before the loop to after it). • Loop Inversion and Unswitching – Has the advantage that only one branch instruction • Branch Optimizations needs to be executed to close the loop. • Tail Merging (Cross Jumping) • Conditional Moves – Requires that we determine that the loop is entered • Dead-Code Elimination at least once! • Branch Prediction • Peephole Optimization • Machine Idioms & Instruction Combining Kostis Sagonas 13 Spring 2012 Kostis Sagonas 14 Spring 2012 Loop Inversion Example 1 Loop Inversion Example 2 for (i = 0; i < 100; i++) { Loop bounds are known a[i] = i + 1; } if (k >= n) goto L for (i = k; i < n; i++) { i = k; a[i] = i + 1; do { } a[i] = i + 1; i++; i = 0; i = 0; } while (i < n) Loop bounds while (i < 100) { do { L: are unknown a[i] = i + 1; a[i] = i + 1; i++; i++; } } while (i < 100) Kostis Sagonas 15 Spring 2012 Kostis Sagonas 16 Spring 2012 Unswitching Unswitching Example Unswitching is a control-flow transformation that moves loop-invariant conditional branches out if (k == 2) { of loops for (i = 1; i < 100; i++) { for (i = 1; i < 100; i++) { if (a[i] > 0) if (k == 2) { if (k == 2 && a[i] > 0) for (i = 1; i < 100; i++) { a[i] = a[i] + 1; for (i = 1; i < 100; i++) a[i] = a[i] + 1; if (k == 2) } a[i] = a[i] + 1; } a[i] = a[i] + 1; } else { } else { else i = 100; for (i = 1; i < 100; i++) a[i] = a[i] – 1; } a[i] = a[i] – 1; } } Kostis Sagonas 17 Spring 2012 Kostis Sagonas 18 Spring 2012 3

  4. Outline Branch Optimizations • Unreachable-Code Elimination Branches to branches are remarkably common! • Straightening – An unconditional branch to an unconditional branch can be • If and Loop Simplifications replaced by a branch to the latter’s target • Loop Inversion and Unswitching – A conditional branch to an unconditional branch can be • Branch Optimizations replaced by the corresponding conditional branch to the latter branch’s target • Tail Merging (Cross Jumping) – An unconditional branch to a conditional branch can be • Conditional Moves replaced by a copy of the conditional branch • Dead-Code Elimination – A conditional branch to a conditional branch can be replaced • Branch Prediction by a conditional branch with the former’s test and the latter’s • Peephole Optimization target as long as the latter condition is true whenever the • Machine Idioms & Instruction Combining former one is Kostis Sagonas 19 Spring 2012 Kostis Sagonas 20 Spring 2012 Branch Optimization Examples Eliminating Useless Control-Flow The Problem: if a == 0 goto L1 if a == 0 goto L2 … … – After optimization, the CFG can contain empty blocks L1: if a >= 0 goto L2 L1: if a >= 0 goto L2 – “Empty” blocks still end with either a branch or jump … … – Produces jump to jump, which wastes time and space L2: … L2: … The Algorithm: ( Clean ) goto L1 L1: … L1: … – Use four distinct transformations – Apply them in a carefully selected order if a == 0 goto L1 if a != 0 goto L2 goto L2 – Iterate until done L1: … L1: … Kostis Sagonas 21 Spring 2012 Kostis Sagonas 22 Spring 2012 Eliminating Useless Control-Flow Eliminating Useless Control-Flow Transformation 1 Transformation 2 Merging an empty block Both sides of branch target B2 – Empty B1 ends with a jump – Neither block must be empty B1 B1 empty – Coalesce B1 and B2 – Replace it with a jump to B1 B1 – Move B1’s incoming edges – Simple rewrite of the last – Eliminates extraneous jump operation in B1 B2 – Faster, smaller code B2 B2 B2 Branch, not a jump How does this happen? How does this happen? Eliminating redundant branches – By rewriting other branches Eliminating empty blocks – By eliminating operations in B1 How do we recognize it? How do we recognize it? – Check each branch – Test for empty block Kostis Sagonas 23 Spring 2012 Kostis Sagonas 24 Spring 2012 4

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend