Final Code Generation and Code Optimization.

28
Final Code Generation and Code Optimization
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    226
  • download

    2

Transcript of Final Code Generation and Code Optimization.

Page 1: Final Code Generation and Code Optimization.

Final Code Generation and Code Optimization

Page 2: Final Code Generation and Code Optimization.
Page 3: Final Code Generation and Code Optimization.
Page 4: Final Code Generation and Code Optimization.
Page 5: Final Code Generation and Code Optimization.
Page 6: Final Code Generation and Code Optimization.
Page 7: Final Code Generation and Code Optimization.

for ( i=0; i < N; i++) { base = &a[0]; crt = *(base + i);}

base = &a[0];for ( i=0; i < N; i++) { crt = *(base + i);}

original code optimized code

Page 8: Final Code Generation and Code Optimization.

e1 = *(&a[0]+offset +i);e2 = *(&a[0]+offset +j);

tmp = &a[0]+offset; e1 = *(tmp +i);e2 = *(tmp +j);

original code optimized code

Page 9: Final Code Generation and Code Optimization.

y = …x = y;b = x / 2;

y = …b = y / 2;

original code optimized code

Page 10: Final Code Generation and Code Optimization.

if (1) x = y;else x = z;

x = y;

original code optimized code

Page 11: Final Code Generation and Code Optimization.
Page 12: Final Code Generation and Code Optimization.
Page 13: Final Code Generation and Code Optimization.
Page 14: Final Code Generation and Code Optimization.
Page 15: Final Code Generation and Code Optimization.
Page 16: Final Code Generation and Code Optimization.
Page 17: Final Code Generation and Code Optimization.
Page 18: Final Code Generation and Code Optimization.
Page 19: Final Code Generation and Code Optimization.
Page 20: Final Code Generation and Code Optimization.

Exercise: at which points are these variables live ?

prod,i,t1,t2,t3,t4,t5,t6,t7

Page 21: Final Code Generation and Code Optimization.
Page 22: Final Code Generation and Code Optimization.

• Rationale– A value in a register can be accessed much more

efficiently than one in memory, so we should try to keep (frequently used) values in registers…

– …but CPUs have a very limited number of registers

• Techniques– Local register allocation– Global register allocation

Page 23: Final Code Generation and Code Optimization.
Page 24: Final Code Generation and Code Optimization.
Page 25: Final Code Generation and Code Optimization.

read A

D = A+1read BD = D+B

D = A+1read CD = D+C

print A,D

AA

BB CC

DD

Register Interference Graphnodes: symbolic registersedges: if nodes are simultaneously live R1R1 R2R2 R3R3

k-coloring, where k is the number of registers

Page 26: Final Code Generation and Code Optimization.

AA

BB CC

DD

R1R1 R2R2 R3R3

AA

DD

{empty graph}

AA

DD

{empty graph}

AA

BB CC

DD

R1

R2

R1

R2

R3R3

Page 27: Final Code Generation and Code Optimization.
Page 28: Final Code Generation and Code Optimization.