Page 1
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Introduction to Optimization1
Kristoffer H. [email protected]
Compiler ConstructionCSCI-GA.2130-001/Fall 2013
NYU Courant Institute
December 5, 2013
1ALSU §§8.5,7Introduction to Optimization Kris Rose
Page 2
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Context
sourceprogram
FrontEnd// Code
OptimizerIR// Code
GeneratorIR// target
program//
Introduction to Optimization Kris Rose
Page 3
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
1 Basic Block DAG
2 Peephole Optimization
3 Thanks!
4 HACS Q&A
Introduction to Optimization Kris Rose
Page 4
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
DAG – Directed Acyclic Graph
I One node per initial value.I One node per statement, with an edge to last node
observing every parameter.I Node labeled by operator and list of variables not used
further.I Output nodes are those with live exit variables.
Introduction to Optimization Kris Rose
Page 5
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
DAG uses
I Local common subexpressions.I Dead code elimination.I Apply albegraic simplifications.I Reorder statements to reduce variable count.
Introduction to Optimization Kris Rose
Page 6
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Local Common Subexpressions
1 a = b + c2 b = a - d3 c = b + c4 d = a - d
b0 c0
+
�� ��
a d0
−
�� ��
b,d
+
��
qq
c
Introduction to Optimization Kris Rose
Page 7
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Local Common Subexpressions
1 a = b + c2 b = a - d3 c = b + c4 d = a - d
b0 c0
+
�� ��
a d0
−
�� ��
b,d
+
��
qq
c
Introduction to Optimization Kris Rose
Page 8
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Dead Code Elimination
Inputs: b,c,d1 a = b + c2 b = b - c3 c = c + d4 e = b + c
Outputs: a,bb0 c0 d0
+
�� ##
a −
{{ ##
b +
{{ ��
c
+
�� ��
e
Introduction to Optimization Kris Rose
Page 9
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Dead Code Elimination
Inputs: b,c,d1 a = b + c2 b = b - c3 c = c + d4 e = b + c
Outputs: a,bb0 c0 d0
+
�� ##
a −
{{ ##
b +
{{ ��
c
+
�� ��
e
Introduction to Optimization Kris Rose
Page 10
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Algebraic Identities
x + 0 = 0 + x = x x − 0 = xx × 1 = 1× x = x x/1 = x
EXPENSIVE CHEAPER
x2 = x × x2× x = x + x
x/2 = x × 0.5
Introduction to Optimization Kris Rose
Page 11
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Algebraic Identities
x + 0 = 0 + x = x x − 0 = xx × 1 = 1× x = x x/1 = x
EXPENSIVE CHEAPER
x2 = x × x2× x = x + x
x/2 = x × 0.5
Introduction to Optimization Kris Rose
Page 12
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Algebraic Identities
I Constant foldingI Commutativity with Local Common SubexpressionsI Associativity with composite expressions
1 a = c + b2 e = c + d + b
b0 c0
+
�� ��
a d0
+
�� ��
e
Introduction to Optimization Kris Rose
Page 13
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Algebraic Identities
I Constant foldingI Commutativity with Local Common SubexpressionsI Associativity with composite expressions
1 a = c + b2 e = c + d + b
b0 c0
+
�� ��
a d0
+
�� ��
e
Introduction to Optimization Kris Rose
Page 14
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Algebraic Identities
I Constant foldingI Commutativity with Local Common SubexpressionsI Associativity with composite expressions
1 a = c + b2 e = c + d + b
b0 c0
+
�� ��
a d0
+
�� ��
e
Introduction to Optimization Kris Rose
Page 15
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Array References
1 x = a[i]2 a[j] = y3 z = a[i]
a0 i0 j0 y0
=[]
�� ��
xKilled!
[]=
tt�� ��
=[]
�� ��
z
Introduction to Optimization Kris Rose
Page 16
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Array References
1 x = a[i]2 a[j] = y3 z = a[i]
a0 i0 j0 y0
=[]
�� ��
xKilled!
[]=
tt�� ��
=[]
�� ��
z
Introduction to Optimization Kris Rose
Page 17
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
No Pointing!
1 x = *p2 *q = y
Needs pointer (“points-to”) analysis!
Introduction to Optimization Kris Rose
Page 18
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
No Pointing!
1 x = *p2 *q = y
Needs pointer (“points-to”) analysis!
Introduction to Optimization Kris Rose
Page 19
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Back to Code
b0 c0
+
�� ��
a d0
−
�� ��
b,d
+
��
qq
c
1 a = b + c2 b = a - d3 c = b + c4 d = b
Respect ordering, pay special attention to overlapping sideeffects!
Introduction to Optimization Kris Rose
Page 20
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Back to Code
b0 c0
+
�� ��
a d0
−
�� ��
b,d
+
��
qq
c
1 a = b + c2 b = a - d3 c = b + c4 d = b
Respect ordering, pay special attention to overlapping sideeffects!
Introduction to Optimization Kris Rose
Page 21
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Back to Code
b0 c0
+
�� ��
a d0
−
�� ��
b,d
+
��
qq
c
1 a = b + c2 b = a - d3 c = b + c4 d = b
Respect ordering, pay special attention to overlapping sideeffects!
Introduction to Optimization Kris Rose
Page 22
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
1 Basic Block DAG
2 Peephole Optimization
3 Thanks!
4 HACS Q&A
Introduction to Optimization Kris Rose
Page 23
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Redundant Load&Store
1 LD R0, a2 ST a, R0
↓
1 LD R0, a
Introduction to Optimization Kris Rose
Page 24
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Redundant Load&Store
1 LD R0, a2 ST a, R0
↓
1 LD R0, a
Introduction to Optimization Kris Rose
Page 25
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Unreachable Code
1 if debug == 1 goto L12 goto L23 L1: compute-and-print-really-big-expensive-stuff4 L2:
↓
1 if debug != 1 goto L22 L1: compute-and-print-really-big-expensive-stuff3 L2:
With debug = 0,1 L2:
Introduction to Optimization Kris Rose
Page 26
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Unreachable Code
1 if debug == 1 goto L12 goto L23 L1: compute-and-print-really-big-expensive-stuff4 L2:
↓
1 if debug != 1 goto L22 L1: compute-and-print-really-big-expensive-stuff3 L2:
With debug = 0,1 L2:
Introduction to Optimization Kris Rose
Page 27
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Unreachable Code
1 if debug == 1 goto L12 goto L23 L1: compute-and-print-really-big-expensive-stuff4 L2:
↓
1 if debug != 1 goto L22 L1: compute-and-print-really-big-expensive-stuff3 L2:
With debug = 0,1 L2:
Introduction to Optimization Kris Rose
Page 28
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Flow of Control
1 goto L12 . . .3 L1: goto L2
↓
1 goto L22 . . .3 L1: goto L2
Introduction to Optimization Kris Rose
Page 29
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Flow of Control
1 goto L12 . . .3 L1: goto L2
↓
1 goto L22 . . .3 L1: goto L2
Introduction to Optimization Kris Rose
Page 30
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Flow of Control
1 goto L12 . . .3 L1: if a < b goto L24 L3:
↓
1 if a < b goto L22 goto L33 . . .4 L3:
Introduction to Optimization Kris Rose
Page 31
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Flow of Control
1 goto L12 . . .3 L1: if a < b goto L24 L3:
↓
1 if a < b goto L22 goto L33 . . .4 L3:
Introduction to Optimization Kris Rose
Page 32
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Just the Beginning. . .
I Peephole vs Good Code GeneratorI Everything above has better analysis-based solutions
Introduction to Optimization Kris Rose
Page 33
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
1 Basic Block DAG
2 Peephole Optimization
3 Thanks!
4 HACS Q&A
Introduction to Optimization Kris Rose
Page 34
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
Finally. . .
I Evaluations!I Project Milestone 3 on Sunday.I Exam:
I 5:10 pm–7:00 pm, December 12, 2013, Room WWH 312.I Closed book.I All ALSU sections quoted on class web page.
Introduction to Optimization Kris Rose
Page 35
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
1 Basic Block DAG
2 Peephole Optimization
3 Thanks!
4 HACS Q&A
Introduction to Optimization Kris Rose
Page 36
Basic Block DAG Peephole Optimization Thanks! HACS Q&A
The End
Introduction to Optimization Kris Rose