• No results found

GCC Resource Center

N/A
N/A
Protected

Academic year: 2022

Share "GCC Resource Center"

Copied!
206
0
0

Loading.... (view fulltext now)

Full text

(1)

GCC Resource Center

(www.cse.iitb.ac.in/grc)

Department of Computer Science and Engineering, Indian Institute of Technology, Bombay

1 July 2012

(2)

Outline

• Motivation

• Live Variables Analysis

• Available Expressions Analysis

• Pointer Analysis

(3)

Motivation

(4)

Dead Code Elimination

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

• No uses for variables a 3 , b 4 ,

c 5 , and n 6

(5)

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

• No uses for variables a 3 , b 4 ,

c 5 , and n 6

(6)

Dead Code Elimination

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

• No uses for variables a 3 , b 4 , c 5 , and n 6

• Assignments to these variables can be deleted

How can we conclude

this systematically?

(7)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T

F

(8)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(9)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(10)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(11)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

(12)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

What about a 2?

(13)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(14)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

(15)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(16)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1 }

(17)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(18)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

(19)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(20)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

(21)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(22)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

∅ (Conservative assumption)

(23)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(24)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1 }

(25)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(26)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 1, a 9 }

(27)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(28)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 7, a 9 }

(29)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used

beyond this point?

(30)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Which variables are used beyond this point?

{ a 7, a 9 }

(31)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 7, a 9 }

(32)

Liveness Analysis of Variables

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 }

∅ (Conservative assumption) { a 1, a 9 }

{ a 7, a 9 }

{ a 7, a 9 }

(33)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 }

∅ (Conservative assumption) { a 1, a 9 }

{ a 7, a 9 }

{ a 7, a 9 }

(34)

Liveness Analysis of Variables: Iteration 2

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 }

{ a 1, a 9 }

{ a 7, a 9 }

{ a 1, a 9 }

{ a 7, a 9 }

{ a 7, a 9 }

(35)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 }

{ a 1, a 9 }

{ a 7, a 9 }

{ a 1, a 9 }

{ a 7, a 9 }

{ a 7, a 9 }

(36)

Using Liveness Analysis for Dead Code Elimination

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 } { a 7, a 9 } { a 1, a 9 } { a 7, a 9 } { a 7, a 9 }

• Values of a 3, a 4, c 5, and n 6 are

guaranteed not to be used

(37)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 } { a 7, a 9 } { a 1, a 9 } { a 7, a 9 } { a 7, a 9 }

• Values of a 3, a 4, c 5, and n 6 are

guaranteed not to be used

(38)

Using Liveness Analysis for Dead Code Elimination

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 } { a 7, a 9 } { a 1, a 9 } { a 7, a 9 } { a 7, a 9 }

• Values of a 3, a 4, c 5, and n 6 are guaranteed not to be used

• Why are the values of a 7 and a 9

meaningful at the exit of B2?

(39)

Find out at each program point p, the variables that are used beyond p

B2 a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

B4 a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 B5 if a 1 ≤ 11

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

{ a 1, a 9 } { a 1, a 9 } { a 7, a 9 } { a 1, a 9 } { a 7, a 9 } { a 7, a 9 }

• Values of a 3, a 4, c 5, and n 6 are guaranteed not to be used

• Why are the values of a 7 and a 9 meaningful at the exit of B2?

• We have assumed a φ function to be

an ordinary expression in which

operands are computed along every

path reaching the computation

(40)

Part 3

Live Variables Analysis

(41)

A variable v is live at a program point p, if some path from p to program exit contains an r-value oc- currence of v which is not preceded by an l-value occurrence of v .

v = a∗b

a = v +2 End

p

Start

v = a∗b

v = a+2 End

p

Start

v=v+ 2

v = v +2 End

p

Start

(42)

Defining Live Variables Analysis

A variable v is live at a program point p, if some path from p to program exit contains an r-value oc- currence of v which is not preceded by an l-value occurrence of v .

v is live at p

v = a∗b

a = v +2 End

p

Start

v = a∗b

v = a+2 End

p

Start

v=v+ 2

v = v +2 End

p

Start

(43)

A variable v is live at a program point p, if some path from p to program exit contains an r-value oc- currence of v which is not preceded by an l-value occurrence of v .

v is live at p v is not live at p

v = a∗b

a = v +2 End

p

Start

v = a∗b

v = a+2 End

p

Start

v=v+ 2

v = v +2 End

p

Start

(44)

Defining Live Variables Analysis

A variable v is live at a program point p, if some path from p to program exit contains an r-value oc- currence of v which is not preceded by an l-value occurrence of v .

v is live at p v is not live at p v is live at p

v = a∗b

a = v +2 End

p

Start

v = a∗b

v = a+2 End

p

Start

v=v+ 2

v = v +2 End

p

Start

(45)

A variable v is live at a program point p, if some path from p to program exit contains an r-value oc- currence of v which is not preceded by an l-value occurrence of v .

Path based specification

v is live at p v is not live at p v is live at p

v = a∗b

a = v +2 End

p

Start

v = a∗b

v = a+2 End

p

Start

v=v+ 2

v = v +2 End

p

Start

(46)

Defining Data Flow Analysis for Live Variables Analysis

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

(47)

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

Basic Blocks ≡ Single statements or Maximal groups

of sequentially executed statements

(48)

Defining Data Flow Analysis for Live Variables Analysis

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

Basic Blocks ≡ Single statements or Maximal groups of sequentially executed statements

Control Transfer

(49)

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

(50)

Defining Data Flow Analysis for Live Variables Analysis

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

Local Data Flow Properties

(51)

Gen

n

= { v | variable v is used in basic block n and

is not preceded by a definition of v }

Kill

n

= { v | basic block n contains a definition of v }

(52)

Local Data Flow Properties for Live Variables Analysis

Gen

n

= { v | variable v is used in basic block n and is not preceded by a definition of v } Kill

n

= { v | basic block n contains a definition of v } r-value occurrence

Value is only read, e.g. x,y,z in

x.sum = y.data + z.data

(53)

Gen

n

= { v | variable v is used in basic block n and is not preceded by a definition of v } Kill

n

= { v | basic block n contains a definition of v } r-value occurrence

Value is only read, e.g. x,y,z in x.sum = y.data + z.data

l-value occurrence Value is modified e.g. y in

y = x.lptr

(54)

Local Data Flow Properties for Live Variables Analysis

Gen

n

= { v | variable v is used in basic block n and is not preceded by a definition of v } Kill

n

= { v | basic block n contains a definition of v } r-value occurrence

Value is only read, e.g. x,y,z in x.sum = y.data + z.data

l-value occurrence Value is modified e.g. y in

y = x.lptr

within n

(55)

Gen

n

= { v | variable v is used in basic block n and is not preceded by a definition of v } Kill

n

= { v | basic block n contains a definition of v } r-value occurrence

Value is only read, e.g. x,y,z in x.sum = y.data + z.data

l-value occurrence Value is modified e.g. y in

y = x.lptr

within n

anywhere in n

(56)

Local Data Flow Properties for Live Variables Analysis

• Gen

n

: Use not preceded by definition

• Kill

n

: Definition anywhere in a block

(57)

• Gen

n

: Use not preceded by definition Upwards exposed use

• Kill

n

: Definition anywhere in a block

Stop the effect from being propagated across a block

(58)

Defining Data Flow Analysis for Live Variables Analysis

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

(59)

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

Global Data Flow Properties

(60)

Defining Data Flow Analysis for Live Variables Analysis

In

i

Gen

i

, Kill

i

Out

i

In

j

Gen

j

, Kill

j

Out

j

In

k

= Gen

k

∪ (Out

k

− Kill

k

) Gen

k

, Kill

k

Out

k

= In

i

∪ In

j

Global Data Flow Properties Edge based

specifications

(61)

In

n

= (Out

n

− Kill

n

) ∪ Gen

n

Out

n

=

BI n is End block [

s∈succ(n)

In

s

otherwise

(62)

Data Flow Equations For Live Variables Analysis

In

n

= (Out

n

− Kill

n

) ∪ Gen

n

Out

n

=

BI n is End block [

s∈succ(n)

In

s

otherwise

In

n

and Out

n

are sets of variables.

(63)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(64)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(65)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(66)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(67)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(68)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(69)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(70)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(71)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

∅ { a 1}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(72)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

∅ { a 1}

{a 1, a 9} Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(73)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

∅ { a 1}

{a 1, a 9}

{a 7, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(74)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

∅ { a 1}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(75)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

∅ { a 1}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{ a 7, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(76)

Performing Live Variables Analysis

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

{ a 1}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{ a 7, a 9}

{a 7, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(77)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6 D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 B6

B7 a 2 = φ (a 1, a 9) return a 2

T F

T F

∅ {a 1, a 9}

{ a 1, a 9}

{a 1}

{ a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{ a 7, a 9}

{a 7, a 9}

{ a 1, a 9}

Gen Kill

B2 ∅ {a 3, b 4,

c 5, n 6}

B4 {a 7} {a 1}

B3 {a 1} {a 7}

B5 {a 1} ∅

B6 {a 1} {a 9}

B7 {a 1, a 9} {a 2}

(78)

Strongly Live Variables Analysis

A variable v is strongly live if it is used in

• in statement other than assignment statement, or (this case is same as simple liveness analysis)

• in defining other strongly live variables in an assignment statement

(this case is different from simple liveness analysis)

(79)

y = x

print (x )

y = x

print (y )

y = x

print (z)

(80)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

y = x

print (y )

y = x

print (z)

(81)

y = x

print (x ) Strong Liveness

y = x

print (y )

y = x

print (z)

(82)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

y = x

print (y )

y = x

print (z)

(83)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

y = x

print (y )

y = x

print (z)

(84)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y )

y = x

print (z)

(85)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

y = x

print (z)

(86)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

y = x

print (z)

(87)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

y = x

print (z)

(88)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

y = x

print (z)

(89)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z)

(90)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z)

Strong

Liveness

(91)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

(92)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

{z }

(93)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

{z }

{z }

(94)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

∅ {z } {z } Simple

Liveness

{z }

{z , x }

(95)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

∅ {z } {z } Simple

Liveness

∅ {z } {z , x }

Same

(96)

Understanding Strong Liveness

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

∅ {z } {z } Simple

Liveness

∅ {z } {z , x }

Same Same

(97)

y = x

print (x ) Strong Liveness

∅ {x}

{x}

Simple Liveness

∅ {x}

{x}

y = x

print (y ) Strong Liveness

∅ {y}

{x}

Simple Liveness

∅ {x}

{y}

y = x

print (z) Strong Liveness

∅ {z } {z } Simple

Liveness

∅ {z } {z , x }

Same Same Different

(98)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T

F

(99)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

(100)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

(101)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

(102)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

(103)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

(104)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

{a 1}

(105)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

(106)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

(107)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

{a 1}

(108)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

∅ {a 1}

{a 7}

(109)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

∅ {a 1}

{a 7}

{a 7}

(110)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

∅ {a 1}

{a 7}

{a 7}

{a 7}

(111)

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

∅ {a 1}

{a 7}

{a 7}

{a 7}

{ a 7}

(112)

Comparision of Simple and Strong Liveness for our Example

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Simple Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1, a 9}

{a 1, a 9}

{a 1}

{a 1, a 9}

{a 1, a 9}

{a 1, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 7, a 9}

{a 1, a 9}

a 3 = 1; b 4 = 2 c 5 = 3; n 6 = 6 B2

Strong Liveness

a 1 = φ (1, a 7) if a 1 ≤ 6 B4

B3 a 7 = a 1 + 1 if a 1 ≤ 11 B5

B6

D.1200 8 = a 1 + 2 a 9 = D.1200 8 + 3 print ”Hello”

B6

B7 a 2 = φ (a 1, a 9) print ”Hi”

T F

T F

∅ {a 1}

{a 1}

{a 7}

{a 7}

{a 7}

{ a 7}

{a 1}

(113)

• Used for register allocation.

If variable x is live in a basic block b, it is a potential candidate for

register allocation.

(114)

Using Data Flow Information of Live Variables Analysis

• Used for register allocation.

If variable x is live in a basic block b, it is a potential candidate for register allocation.

• Used for dead code elimination.

If variable x is not live after an assignment x = . . ., then the assginment is

redundant and can be deleted as dead code.

(115)

Available Expressions Analysis

(116)

Defining Available Expressions Analysis

An expression e is available at a program point p, if

every path from program entry to p contains an evaluation of e which is not followed by a definition of any operand of e.

Start

p

End a∗b

a∗b a∗b

Start Start

p

End a∗b

a∗b a∗b

a=

Start Start

p

End a∗b

a∗b Start

(117)

An expression e is available at a program point p, if

every path from program entry to p contains an evaluation of e which is not followed by a definition of any operand of e.

a ∗ b is available at p

Start

p

End a∗b

a∗b a∗b

Start Start

p

End a∗b

a∗b a∗b

a=

Start Start

p

End a∗b

a∗b Start

References

Related documents

• Specification : what the function is supposed to do Typical form: If the arguments satisfy certain properties, then a certain value will be returned, or a certain action will

• A pointer to a variable can be created in the main program and dereferenced during a function call. • This way a function can be allowed to modify variables in the main program,

July 09 GDFA: Common Abstractions in Data Flow Analysis 15/37. Common Form of Data

Safe approximation of flow-sensitive point-specific information for any point, for any given execution order A statement can not “override” information computed by another

function is defined at a fixed set of sample points on the shape. Levy

July 2010 Introduction to DFA: Live Variables Analysis 8/20. Local Data Flow Properties for Live

Essential Abstractions in GCC GCC Resource Center, IIT Bombay...

When the same location is accessed across different iter- ations, the order of reads and writes must be preserved. Nature of accesses in our example Iteration i Iteration i +