6. Intermediate language
quadruples
store jumps
a ← b ⊕ c L:
a ← b goto L
if a ⊗ b
memory access
goto L1
a ← M[b]
else
M[a] ← b
goto L2
functions
f(a1, …, an)
b ← f(a1, …, an)
Dataflow Analysis 4
7. Control-flow graphs
example
a ← 0
L1: b ← a + 1
c ← c + b
a ← 2 * b
if a < N
goto L1
else
goto L2
L2: return c
Dataflow Analysis 5
8. Control-flow graphs
example
a ← 0 a ← 0
L1: b ← a + 1
b ← a + 1
c ← c + b
a ← 2 * b c ← c + b
if a < N
goto L1 a ← 2 * b
else
if a < N
goto L2
L2: return c return c
Dataflow Analysis 5
24. Liveness analysis
terminology
definition a ← 0
live-in
usage b ← a + 1
c ← c + b
definition a ← 2 * b
live-out
live-in
usage if a < N
return c
Dataflow Analysis 8
25. Liveness analysis
terminology
definition a ← 0
live-in
usage b ← a + 1
c ← c + b
definition a ← 2 * b
live-out
live-in
usage if a < N
live-out
return c
Dataflow Analysis 8
26. Liveness analysis
terminology
definition a ← 0 live-out
live-in
usage b ← a + 1
c ← c + b
definition a ← 2 * b
live-out
live-in
usage if a < N
live-out
return c
Dataflow Analysis 8
38. Liveness analysis
formalisation
in[n] = use[n] ∪ (out[n] - def[n])
out[n] = ∪ s∈succ[n] in[s]
1. If a variable is used at node n, then it is live-in at n.
2. If a variable is live-out but not defined at node n, it is live-in at n.
3. If a variable is live-in at node n, then it is live-out at its predecessors.
Dataflow Analysis 10
39. Liveness analysis
algorithm
for each n
in[n] ← {} ; out[n] ← {}
repeat
for each n
in'[n] = in[n] ; out'[n] = out[n]
in[n] = use[n] ∪ (out[n] - def[n])
for each s in succ[n]
out[n] = out[n] ∪ in[s]
until
for all n: in[n] = in'[n] and out[n] = out'[n]
Dataflow Analysis 11
40. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
41. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
42. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
43. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
44. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
45. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
46. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
47. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
48. Liveness analysis
example
1a ← 0 1 2 3 4 5 6 7
u d i o i o i o i o i o i o i o
2b ← a + 1
1 a a a ac c ac c ac c ac
3c ← c + b 2 a b a a bc ac bc ac bc ac bc ac bc ac bc
3 bc c bc bc b bc b bc b bc b bc bc bc bc
4a ← 2 * b
4 b a b b a b a b ac bc ac bc ac bc ac
5 if a < N 5 a a a a ac ac ac ac ac ac ac ac ac ac ac
6 c c c c c c c c
6 return c
Dataflow Analysis 12
49. Liveness analysis
optimisation
1a ← 0 1 2 3
u d o i o i o i
2b ← a + 1
6 c c c c
3c ← c + b 5 a c ac ac ac ac ac
4 b a ac bc ac bc ac bc
4a ← 2 * b
3 bc c bc bc bc bc bc bc
5 if a < N 2 a b bc ac bc ac bc ac
1 a ac a ac c ac c
6 return c
Dataflow Analysis 13
50. Liveness analysis
optimisation
1a ← 0 1 2 3
u d o i o i o i
2b ← a + 1
6 c c c c
3c ← c + b 5 a c ac ac ac ac ac
4 b a ac bc ac bc ac bc
4a ← 2 * b
3 bc c bc bc bc bc bc bc
5 if a < N 2 a b bc ac bc ac bc ac
1 a ac a ac c ac c
6 return c
Dataflow Analysis 13
51. Liveness analysis
optimisation
1a ← 0 1 2 3
u d o i o i o i
2b ← a + 1
6 c c c c
3c ← c + b 5 a c ac ac ac ac ac
4 b a ac bc ac bc ac bc
4a ← 2 * b
3 bc c bc bc bc bc bc bc
5 if a < N 2 a b bc ac bc ac bc ac
1 a ac a ac c ac c
6 return c
Dataflow Analysis 13
52. Liveness analysis
optimisation
1a ← 0 1 2 3
u d o i o i o i
2b ← a + 1
6 c c c c
3c ← c + b 5 a c ac ac ac ac ac
4 b a ac bc ac bc ac bc
4a ← 2 * b
3 bc c bc bc bc bc bc bc
5 if a < N 2 a b bc ac bc ac bc ac
1 a ac a ac c ac c
6 return c
Dataflow Analysis 13
53. Liveness analysis
optimisation
1a ← 0 1 2 3
u d o i o i o i
2b ← a + 1
6 c c c c
3c ← c + b 5 a c ac ac ac ac ac
4 b a ac bc ac bc ac bc
4a ← 2 * b
3 bc c bc bc bc bc bc bc
5 if a < N 2 a b bc ac bc ac bc ac
1 a ac a ac c ac c
6 return c
Dataflow Analysis 13
64. Liveness analysis
gen & kill
gen kill
a ← b ⊕ c {b,c} {a}
a ← b {b} {a}
a ← M[b] {b} {a}
M[a] ← b {a,b}
f(a1, …, an) {a1,…,an}
a ← f(a1, …, an) {a1,…,an} {a}
goto L
if a ⊗ b {a,b}
Dataflow Analysis 15
65. Liveness analysis
gen & kill
gen kill
a ← b ⊕ c {b,c} {a}
a ← b {b} {a}
a ← M[b] {b} {a}
M[a] ← b {a,b}
f(a1, …, an) {a1,…,an}
a ← f(a1, …, an) {a1,…,an} {a}
goto L
if a ⊗ b {a,b}
Dataflow Analysis 15
70. Reaching definitions
gen & kill
gen kill
d: a ← b ⊕ c {d} defs(a)-{d}
d: a ← b {d} defs(a)-{d}
d: a ← M[b] {d} defs(a)-{d}
M[a] ← b
f(a1, …, an)
d: a ← f(a1, …, an) {d} defs(a)-{d}
goto L
if a ⊗ b
Dataflow Analysis 20
71. Reaching definitions
gen & kill
gen kill
d: a ← b ⊕ c {d} defs(a)-{d}
d: a ← b {d} defs(a)-{d}
d: a ← M[b] {d} defs(a)-{d}
M[a] ← b
f(a1, …, an)
d: a ← f(a1, …, an) {d} defs(a)-{d}
goto L
if a ⊗ b
Dataflow Analysis 20
74. Available expressions
gen & kill
gen kill
d: a ← b ⊕ c {b⊕c}-kill exps(a)
d: a ← b
d: a ← M[b] {M[b]}-kill exps(a)
M[a] ← b exps(M[_])
f(a1, …, an) exps(M[_])
d: a ← f(a1, …, an) exps(M[_]) ∪ exps(a)
goto L
if a ⊗ b
Dataflow Analysis 23
75. Available expressions
gen & kill
gen kill
d: a ← b ⊕ c {b⊕c}-kill exps(a)
d: a ← b
d: a ← M[b] {M[b]}-kill exps(a)
M[a] ← b exps(M[_])
f(a1, …, an) exps(M[_])
d: a ← f(a1, …, an) exps(M[_]) ∪ exps(a)
goto L
if a ⊗ b
Dataflow Analysis 23
87. Pictures
copyrights
Slide 1:
ink swirl by Graham Richardson, some rights reserved
Slide 25:
Seattle's Best Coffee by Dominica Williamson, some rights reserved
Slide 32:
Animal Ark Reno by Joel Riley, some rights reserved
Dataflow Analysis 35
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
round-up on every lecture\n\nwhat to take with you\n\ncheck yourself, pre- and post-paration\n