EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao...

49
EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Transcript of EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao...

Page 1: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

EECS483 D11:Dataflow Analysis: Example

Chun-Hung Hsiao

March 29, 2013

1

Friday, March 29, 2013

Page 2: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Announcements

• PP4 due date extended to 4/3

• PP5 will ask you to implement optimizations based on your PP4

2

Friday, March 29, 2013

Page 3: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example Decaf

int sum_positive(int[] a, int n){ int pos; int neg; int i; pos = 0; neg = 0; for (i = 0; i < n; i = i + 1) { if (a[i] > 0) { pos = pos + a[i]; } else { neg = neg + a[i]; } } return pos;}

3

Friday, March 29, 2013

Page 4: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example TAC_sum_positive: BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ; _tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ; _tmp10 = 4 ; _tmp11 = _tmp10 * i ;

_tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;_L1: Return pos ; EndFunc ;

4

Friday, March 29, 2013

Page 5: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example TAC_sum_positive: BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ; _tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ; _tmp10 = 4 ; _tmp11 = _tmp10 * i ;

_tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;_L1: Return pos ; EndFunc ;

5

Friday, March 29, 2013

Page 6: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example CFG

6

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

Friday, March 29, 2013

Page 7: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expression Analysis

7

• Input- Basic block BB- IN = {available expressions before entering BB}

• Algorithm OUT = IN for each TAC s in BB in forward order: G = expressions generated by s K = expressions destroyed by s OUT = OUT + G - K

• Output- OUT = {available expressions after executing BB}

Friday, March 29, 2013

Page 8: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example CFG

8

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

Friday, March 29, 2013

Page 9: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

Friday, March 29, 2013

Page 10: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

Friday, March 29, 2013

Page 11: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

Friday, March 29, 2013

Page 12: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

Friday, March 29, 2013

Page 13: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5}

Friday, March 29, 2013

Page 14: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6)}

Friday, March 29, 2013

Page 15: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6)}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0}

Friday, March 29, 2013

Page 16: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6)}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

Friday, March 29, 2013

Page 17: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

9

_tmp4 = 4 ;

_tmp5 = _tmp4 * i ;

_tmp6 = a + _tmp5 ;

_tmp7 = *(_tmp6) ;

_tmp8 = 0 ;

_tmp9 = _tmp8 < _tmp7 ;

IfZ _tmp9 Goto _L2 ;

OUT = IN = {}

OUT = {_tmp4 = 4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6)}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

Friday, March 29, 2013

Page 18: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Example CFG

10

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

Friday, March 29, 2013

Page 19: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

Friday, March 29, 2013

Page 20: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

OUT = IN = {}

Friday, March 29, 2013

Page 21: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

OUT = IN = {}

OUT = {_tmp20 = 1}

Friday, March 29, 2013

Page 22: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

OUT = IN = {}

OUT = {_tmp20 = 1}

OUT = {_tmp20 = 1,_tmp21 = i + _tmp20}

Friday, March 29, 2013

Page 23: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

OUT = IN = {}

OUT = {_tmp20 = 1}

OUT = {_tmp20 = 1,_tmp21 = i + _tmp20}

OUT = {_tmp20 = 1,i = _tmp21}

Friday, March 29, 2013

Page 24: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Available Expressions

11

_tmp20 = 1 ;

_tmp21 = i + _tmp20 ;

i = _tmp21 ;

Goto _L0 ;

OUT = IN = {}

OUT = {_tmp20 = 1}

OUT = {_tmp20 = 1,_tmp21 = i + _tmp20}

OUT = {_tmp20 = 1,i = _tmp21}

OUT = {_tmp20 = 1,i = _tmp21}

Friday, March 29, 2013

Page 25: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

CFG w/ Local Available Expressions

12

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

IN = {}OUT = { _tmp15 = 4, _tmp16 = _tmp15 * i, _tmp17 = a + _tmp16, _tmp18 = *(_tmp17), neg = _tmp19}

IN = {}OUT = { _tmp4 = 4, _tmp5 = _tmp4 * i, _tmp6 = a + _tmp5, _tmp7 = *(_tmp6), _tmp8 = 0, _tmp9 = _tmp8 < _tmp7}

IN = {}OUT = { _tmp10 = 4, _tmp11 = _tmp10 * i, _tmp12 = a + _tmp11, _tmp13 = *(_tmp12), pos = _tmp14}

IN = {}OUT = {_tmp20 = 1, i = _tmp21}

IN = {}OUT = {}

IN = {}OUT = {_tmp3 = i < n}

IN = {}OUT = { _tmp0 = 0,pos = _tmp0,_tmp1 = 0, neg = _tmp1,_tmp2 = 0,i = _tmp2}

Friday, March 29, 2013

Page 26: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Global Available Expression Analysis

13

• Input- Control flow graph CFG

• Algorithm for each basic block BB in CFG: OUT(BB) = {} change = true while(change): for each basic block BB in CFG: IN(BB) = Intersection(OUT(predecessors of BB)) OUT(BB) = LocalAvailableExpr(BB, IN(BB)) if any changes: change = true

• Output- IN(BB) = {available expressions before entering BB}- OUT(BB) = {available expressions after executing BB}

Friday, March 29, 2013

Page 27: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

CFG w/ Available Expressions

14

OUT = { _tmp4 = 4, _tmp5 = _tmp4 * i, _tmp6 = a + _tmp5, _tmp7 = *(_tmp6), _tmp8 = 0, _tmp9 = _tmp8 < _tmp7}

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = 4 ; _tmp16 = _tmp15 * i ; _tmp17 = a + _tmp16 ; _tmp18 = *(_tmp17) ; _tmp19 = neg + _tmp18 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

Friday, March 29, 2013

Page 28: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Copy Propagation &Common Subexpression Elimination

15

_tmp15 = 4 ;

_tmp16 = _tmp15 * i ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Friday, March 29, 2013

Page 29: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Copy Propagation &Common Subexpression Elimination

15

_tmp15 = 4 ;

_tmp16 = _tmp15 * i ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

Friday, March 29, 2013

Page 30: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp15 * i ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

16

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

Friday, March 29, 2013

Page 31: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp15 * i ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

16

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

Friday, March 29, 2013

Page 32: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp4 * i ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

17

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

Friday, March 29, 2013

Page 33: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

18

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

Friday, March 29, 2013

Page 34: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = a + _tmp16 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

18

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

Friday, March 29, 2013

Page 35: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = a + _tmp5 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

19

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

Friday, March 29, 2013

Page 36: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

20

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

Friday, March 29, 2013

Page 37: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = *(_tmp17) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

20

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

Friday, March 29, 2013

Page 38: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = *(_tmp6) ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

21

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

Friday, March 29, 2013

Page 39: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = _tmp7 ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

22

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

Friday, March 29, 2013

Page 40: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = _tmp7 ;

_tmp19 = neg + _tmp18 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

22

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7}

Friday, March 29, 2013

Page 41: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = _tmp7 ;

_tmp19 = neg + _tmp7 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

23

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7}

Friday, March 29, 2013

Page 42: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = _tmp7 ;

_tmp19 = neg + _tmp7 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

23

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7,_tmp19 = neg + _tmp7}

Friday, March 29, 2013

Page 43: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

_tmp15 = _tmp4 ;

_tmp16 = _tmp5 ;

_tmp17 = _tmp6 ;

_tmp18 = _tmp7 ;

_tmp19 = neg + _tmp7 ;

neg = _tmp19 ;

Copy Propagation &Common Subexpression Elimination

24

IN = Intersection(OUT(predecessors of BB)) = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}OUT = IN = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7,_tmp19 = neg + _tmp7}

OUT = {_tmp4 = 4,_tmp5 = _tmp4 * i,_tmp6 = a + _tmp5,_tmp7 = *(_tmp6),_tmp8 = 0,_tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4,_tmp16 = _tmp5,_tmp17 = _tmp6,_tmp18 = _tmp7,neg = _tmp19}

Friday, March 29, 2013

Page 44: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

CFG w/ Available Expressions

25

OUT = { _tmp4 = 4, _tmp5 = _tmp4 * i, _tmp6 = a + _tmp5, _tmp7 = *(_tmp6), _tmp8 = 0, _tmp9 = _tmp8 < _tmp7}

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = 0 ; neg = _tmp1 ; _tmp2 = 0 ; i = _tmp2 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = 4 ; _tmp11 = _tmp10 * i ; _tmp12 = a + _tmp11 ; _tmp13 = *(_tmp12) ; _tmp14 = pos + _tmp13 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = _tmp4 ; _tmp16 = _tmp5 ; _tmp17 = _tmp6 ; _tmp18 = _tmp7 ; _tmp19 = neg + _tmp7 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

OUT = { _tmp4 = 4, _tmp5 = _tmp4 * i, _tmp6 = a + _tmp5, _tmp7 = *(_tmp6), _tmp8 = 0, _tmp9 = _tmp8 < _tmp7, _tmp15 = _tmp4, _tmp16 = _tmp5, _tmp17 = _tmp6, _tmp18 = _tmp7, neg = _tmp19}Friday, March 29, 2013

Page 45: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Improved CFG

26

BeginFunc 100 ; _tmp0 = 0 ; pos = _tmp0 ; _tmp1 = _tmp0 ; neg = _tmp0 ; _tmp2 = _tmp0 ; i = _tmp0 ;

_L0: _tmp3 = i < n ; IfZ _tmp3 Goto _L1 ;

_tmp4 = 4 ; _tmp5 = _tmp4 * i ; _tmp6 = a + _tmp5 ; _tmp7 = *(_tmp6) ; _tmp8 = 0 ; _tmp9 = _tmp8 < _tmp7 ; IfZ _tmp9 Goto _L2 ;

_tmp10 = _tmp4 ; _tmp11 = _tmp5 ; _tmp12 = _tmp6 ; _tmp13 = _tmp7 ; _tmp14 = pos + _tmp7 ; pos = _tmp14 ; Goto _L3 ;

_L2: _tmp15 = _tmp4 ; _tmp16 = _tmp5 ; _tmp17 = _tmp6 ; _tmp18 = _tmp7 ; _tmp19 = neg + _tmp7 ; neg = _tmp19 ;

_L3: _tmp20 = 1 ; _tmp21 = i + _tmp20 ; i = _tmp21 ; Goto _L0 ;

_L1: Return pos ; EndFunc ;

Friday, March 29, 2013

Page 46: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Local Liveness Analysis

27

• Input- Basic block BB- OUT = {live variables after executing BB}

• Algorithm IN = OUT for each TAC s in BB in backward order: G = variables consumed by s K = variables destroyed by s IN = IN - K + G

• Output- IN = {live variables required before entering BB}

Friday, March 29, 2013

Page 47: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Global Liveness Analysis

28

• Input- Control flow graph CFG

• Algorithm for each basic block BB in CFG: IN(BB) = {} change = true while(change): for each basic block BB in CFG: OUT(BB) = Union(IN(successors of BB)) IN(BB) = LocalLiveVar(BB, OUT(BB)) if any changes: change = true

• Output- IN(BB) = {live variables required before entering BB}- OUT(BB) = {live variables after executing BB}

Friday, March 29, 2013

Page 48: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Comparison

29

Available Expression Analysis Liveness Analysis

Direction Forward Backward

Transfer Function OUT = OUT + G - K IN = IN - K + G

Meet Operator IN(BB) = Intersection( OUT(predecessors of BB))

OUT(BB) = Union( IN(successors of BB))

Friday, March 29, 2013

Page 49: EECS483 D11: Dataflow Analysis: Example · EECS483 D11: Dataflow Analysis: Example Chun-Hung Hsiao March 29, 2013 1 Friday, March 29, 2013

Thanks & all the best!

30

Friday, March 29, 2013