Documente Academic
Documente Profesional
Documente Cultură
Announcements
No late submissions.
Where We Are
Source
Code
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
Machine
Code
Where We Are
Source
Code
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
Fan-TAC-stic!
Machine
Code
Where We Are
Source
Code
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
Machine
Code
Overview
How to do so efficienty?
Memory Tradeoffs
As of 2012, you can buy a 2TB hard drive for about $100
As of 2012, good disk seek times are measured in ms
(about two to four million times slower than a processor
cycle!)
Registers
L1 Cache
L2 Cache
Main Memory
Hard Disk
Network
Registers
256B - 8KB
L1 Cache
16KB 64KB
L2 Cache
1MB - 4MB
Main Memory
4GB 256GB
Hard Disk
500GB+
Network
HUGE
Registers
256B - 8KB
0.25 1ns
L1 Cache
16KB 64KB
1ns 5ns
L2 Cache
1MB - 4MB
5ns 25ns
Main Memory
Hard Disk
500GB+
3 10ms
Network
HUGE
10 2000ms
Registers
Register Allocation
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
$t0, -12(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
$t0, -12(fp)
$t1, -16(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw $t0, -12(fp)
lw $t1, -16(fp)
add $t2, $t0, $t1
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
$t0,
-8(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
lw
$t0,
-8(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
lw
lw
$t0, -8(fp)
$t1, -20(fp)
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
lw $t0, -8(fp)
lw $t1, -20(fp)
add $t2, $t0, $t1
fp + 4N
...
...
Param 1
fp + 4
Stored fp
fp + 0
Stored ra
fp - 4
a
b
c
d
fp - 8
fp - 12
fp - 16
fp - 20
lw
lw
add
sw
$t0, -12(fp)
$t1, -16(fp)
$t2, $t0, $t1
$t2, -8(fp)
lw
sw
$t0, -8(fp)
$t0, -20(fp)
lw
lw
add
sw
$t0, -8(fp)
$t1, -20(fp)
$t2, $t0, $t1
$t2, -16(fp)
Advantage: Simplicity.
Register Consistency
a = b + c
d = a
d = b
e = d
Register Consistency
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
d = e + f
_L1:
d = e f
g = d
g = d
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
d = e + f
_L1:
d = e f
g = d
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
d = e + f
_L1:
d = e f
g = d
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
_L1:
g = d
d = e + f
{ d }
d = e f
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
_L1:
g = d
{ e, f }
d = e + f
{ d }
d = e f
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
_L1:
g = d
{ e, f }
d = e + f
{ d }
d = e f
{ d }
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
Goto _L1;
_L0:
d = e - f
_L1:
g = d
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
f = f + b
{ e, f }
Goto _L1;
_L0:
d = e - f
_L1:
g = d
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
f = b + c
f = f + b
IfZ e Goto _L0
d = e + f
Goto _L1;
_L0:
d = e - f
_L1:
g = d
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ a, b, c, d }
e = d + a
{ b, c, e }
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
b d
b e f
b g
b
a b c
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R23
Free Registers
R0
R1
R2
R23
Free Registers
R0
R1
R2
R23
Free Registers
R0
R1
R2
R23
Free Registers
R0
R1
R2
R23
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Free Registers
R0
R1
R2
R32
Another Example
Another Example
b b c d
b e
b f
b g
b
a
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
What do we do
now?
Register Spilling
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
What do we do
now?
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Another Example
b b c d
b e
b f
b g
b
a
Free Registers
R0
R1
R2
Disadvantages:
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
Free Registers
R0
R1
R2
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
R0
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
Registers
R1
R2
R3
b
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
R0
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
Registers
R1
R2
R3
b
d
g
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
e
f
Battling NP-Hardness
Chaitin's Algorithm
Intuition:
Algorithm:
Chaitin's Algorithm
Chaitin's Algorithm
b
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
g
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
f
g
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
g
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
g
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
a
e
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
d
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
b
c
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
Chaitin's Algorithm
b
R0
Registers
R1
R2
R3
One Problem
d
g
e
f
Registers
R0
R1
R2
d
g
e
f
Registers
R0
R1
R2
d
g
e
f
Registers
R0
R1
R2
f
g
d
g
e
f
Registers
R0
R1
R2
e
f
g
d
g
e
f
Registers
R0
R1
R2
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
b
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
a
b
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
b
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
b
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
c
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
d
e
f
g
d
g
e
f
Registers
R0
R1
R2
e
f
g
d
g
e
f
Registers
R0
R1
R2
e
f
g
d
g
(spilled)
e
f
Registers
R0
R1
R2
e
f
g
d
g
(spilled)
e
f
Registers
R0
R1
R2
f
g
d
g
(spilled)
e
f
Registers
R0
R1
R2
f
g
d
g
(spilled)
e
f
Registers
R0
R1
R2
d
g
(spilled)
e
f
Registers
R0
R1
R2
d
g
(spilled)
e
f
Registers
R0
R1
R2
d
g
(spilled)
e
f
Registers
R0
R1
R2
A Smarter Algorithm
{ a, b, c, d }
e = d + a
{ b, c, e }
Registers
R0
R1
R2
{ b, c, e }
f = b + c
{ b, e, f}
a
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
d
g
e
f
(spilled)
A Smarter Algorithm
{ a, b, c, d }
e = d + a
{ b, c, e }
Registers
R0
R1
R2
{ b, c, e }
f = b + c
{ b, e, f}
a
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d = e + f
{ d }
{ e, f }
d = e f
{ d }
{ d }
g = d
{ g }
d
g
e
f
(spilled)
A Smarter Algorithm
{ a, b, c, d }
e = d + a
{ b, c, e }
Registers
R0
R1
R2
{ b, c, e }
f = b + c
{ b, e, f}
a
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d' = e + f
{ d' }
{ e, f }
d' = e f
{ d' }
{ d' }
g = d'
{ g }
d
g
e
f
(spilled)
A Smarter Algorithm
{ a, b, c, d }
e = d + a
{ b, c, e }
Registers
R0
R1
R2
{ b, c, e }
f = b + c
{ b, e, f}
{ b, e, f }
f = f + b
{ e, f }
{ e, f }
d' = e + f
{ d' }
{ e, f }
d' = e f
{ d' }
{ d' }
g = d'
{ g }
d'
f
(spilled)
Another Example
Another Example
b
d
f
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
d
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
d
f
Registers
R0
R1
R2
d
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
f
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
e
b
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
c
a
Another Example
b
d
f
Registers
R0
R1
R2
Another Example
b
(spilled)
d
f
Registers
R0
R1
R2
Another Example
b
(spilled)
d
f
Registers
R0
R1
R2
Another Example
b
(spilled)
(spilled)
d
f
Registers
R0
R1
R2
Chaitin's Algorithm
Advantages:
Disadvantages:
Next Time
Garbage Collection
Reference Counting
Mark-and-Sweep
Stop-and-Copy
Incremental Collectors