Faculty of Computer Science Floating Point Representation 2

  • Slides: 44
Download presentation
Faculty of Computer Science Floating Point Representation 2 An Assembly Example Add footer here

Faculty of Computer Science Floating Point Representation 2 An Assembly Example Add footer here 10/30/2021 © 2006

Department of Computing Science Floating Point (example) Parameter Passed on Stack void mm (

Department of Computing Science Floating Point (example) Parameter Passed on Stack void mm ( double *x, double *y, double *z, int n) { int i, j, k; for( i=0 ; i != n ; i=i+1 ) for( j=0 ; j != n ; j=j+1 ) { x[i*n+j] = 0. 0; for( k=0 ; k != n ; k=k+1 ) x[i*n+j] = x[i*n+j] + y[i*n+k] * z[k*n+j]; } } CMPUT 229 Hen/Patt, pp. 294 © 2006

i 0 i n return j 0 j n void mm ( double *x,

i 0 i n return j 0 j n void mm ( double *x, double *y, double *z, int n) { int i, j, k; for( i=0 ; i != n ; i=i+1 ) for( j=0 ; j != n ; j=j+1 ) { x[i*n+j] = 0. 0; for( k=0 ; k != n ; k=k+1 ) x[i*n+j] = x[i*n+j] + y[i*n+k] * z[k*n+j]; } } x[i*n+j] 0. 0 k n FP 0 x[i*n+j] FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 x[i*n+j] FP 0 i i+1 j j+1 k k+1 CMPUT 229 Do we need to load and store x[i][j] in every iteration of loop k?

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n i 0 i n return j 0 j n FP 0 0. 0 k n i i+1 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 k k+1 CMPUT 229 x[i*n+j] FP 0 j j+1 Parameter Passing A 6 Ret addr x y z n

i 0 i n return j 0 j n FP 0 0. 0 k

i 0 i n return j 0 j n FP 0 0. 0 k n i i+1 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 k k+1 CMPUT 229 x[i*n+j] FP 0 j j+1 mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n <i LOOP BODY> add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts Parameter Passing A 6 Ret addr x y z n

i 0 i n return j 0 j n FP 0 0. 0 k

i 0 i n return j 0 j n FP 0 0. 0 k n i i+1 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 k k+1 x[i*n+j] FP 0 j j+1 mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n <j LOOP BODY> addq. l #1, Dj j = j+1 # x[I*n+j] = FPO bra Parameter Loopj Passing Nexti: add. q #1, Di i = i+1 A 6 Loopi bra done: movm. l (%sp)+, #0 x 3 cfc Ret addr unlk %a 6 x rts y z n CMPUT 229

i 0 i n return j 0 j n FP 0 0. 0 k

i 0 i n return j 0 j n FP 0 0. 0 k n i i+1 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 k k+1 CMPUT 229 x[i*n+j] FP 0 j j+1 mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 clr. l Dk k=0 Loopk: cmp. l Dk, Dn beq Nextj if k=n <k LOOP BODY> Passing Parameter addq. l #1, Dk k = k+1 bra A 6 Loopk Nextj: addq. l #1, Ret Dj addr j = j+1 # x[I*n+j] = FPO x bra Loopj y i = i+1 Nexti: add. q #1, Di z bra Loopi n done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj if k = n <k LOOP BODY> clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 clr. l Dk k=0 addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 # x[I*n+j] = FPO bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 in mul. l Di, D 8 in = i*n lsl. l #3, D 8 in = i*n*8 clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty=&(y[i*n]) clr. l Dk k=0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 if k = n FP 2 = y[i*n+k]; <k LOOP BODY> addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 # x[I*n+j] = FPO bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 in mul. l Di, D 8 in = i*n lsl. l #3, D 8 in = i*n*8 clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty=&(y[i*n]) clr. l Dk k=0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 if k = n FP 2 = y[i*n+k]; <k LOOP BODY> Matrix y: 0 1 2 addq. l #1, Dk k = k+1 0 a b c 1 brad Loopk e f Nextj: 2 addq. l j = j+1 g #1, h Dj i # x[I*n+j] = FPO Matrix ybra in memory: Loopj y y+8 Nexti: add. q #1, y+16 Di y+24 y+32 i =y+40 i+1 y+48 y+56 y+64 a b c d e f g h i bra Loopi done: movm. l i=0(%sp)+, #0 x 3 cfci=1 i=2 unlk %a 6 Aty = (0+k)*8 Aty = (2+k)*8 Aty = (1+k)*8 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 n = n lsl. l #3, D 8 n = n*8 move. l D 8 n, D 8 in mul. l Di, D 8 in = i*n clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty= &(y[i*n]) move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz = &(z[j]) clr. l Dk k=0 clr. l Dkn = 0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj if k = n fmove. d (Aty)+, FP 2 = y[i*n+k]; fmul. d (Atz, Dkn), FP 2 = y[i*n+k] * z[k*n+j] <k LOOP BODY> add. l Dn 8, Dkn = Dkn + n*8 addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 # x[I*n+j] = FPO bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 n = n lsl. l #3, D 8 n = n*8 move. l D 8 n, D 8 in mul. l Di, D 8 in = i*n clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty= &(y[i*n]) move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz = &(z[j]) clr. l Dk k=0 clr. l Dkn = 0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj if k = n fmove. d (Aty)+, FP 2 = y[i*n+k]; fmul. d (Az, Dkn), FP 2 = y[i*n+k] * z[k*n+j] fadd. d FP 2, FP 0 = FP 0 + FP 2 add. l Dn 8, Dkn = Dkn + n*8 addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 # x[I*n+j] = FPO bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 n = n lsl. l #3, D 8 n = n*8 move. l D 8 n, D 8 in mul. l Di, D 8 in = i*n move. l D 8 in, Dinj = i*n*8 clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty= &(y[i*n]) move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz = &(z[j]) clr. l Dk k=0 clr. l Dkn = 0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj if k=n fmove. d (Aty)+, FP 2 = y[i*n+k]; fmul. d (Atz, Dkn), FP 2 = y[i*n+k] * z[k*n+j] fadd. d FP 2, FP 0 = FP 0 + FP 2 add. l Dn 8, Dkn = Dkn + n*8 addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 fmove. l FP 0, (Ax, Dinj) x[i*n+j] = FP 0 addq. l #8 Dinj = i*n*8 + j*8 bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax Ax = &x move. l 12(A 6), Ay Ay = &y move. l 16(A 6), Az Az = &z move. l 20(A 6), Dn Dn = n clr. l Di i=0 Loopi: cmp. l Di, Dn beq done if i = n move. l Dn, D 8 n = n lsl. l #3, D 8 n = n*8 move. l D 8 n, D 8 in mul. l Di, D 8 in = i*n move. l D 8 in, Dinj = i*n*8 clr. l Dj j=0 Loopj: cmp. l Dj, Dn beq Nexti if j = n fsub. d FP 0, FP 0 = 0 lea (Ay, D 8 in), Aty= &(y[i*n]) move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz = &(z[j]) clr. l Dk k=0 clr. l Dkn = 0 FP 2 y[i*n+k] FP 2 *z[k*n+j] FP 0+FP 2 Loopk: cmp. l Dk, Dn beq Nextj if k=n fmove. d (Aty)+, FP 2 = y[i*n+k]; fmul. d (Atz, Dkn), FP 2 = y[i*n+k] * z[k*n+j] fadd. d FP 2, FP 0 = FP 0 + FP 2 add. l Dn 8, Dkn = Dkn + n*8 addq. l #1, Dk k = k+1 bra Loopk Nextj: addq. l #1, Dj j = j+1 fmove. l FP 0, (Ax, Dinj) x[i*n+j] = FP 0 addq. l #8 Dinj = I*n*8 + j*8 bra Loopj Nexti: add. q #1, Di i = i+1 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229

Department of Computing Science Clock Cycles CMPUT 229 © 2006

Department of Computing Science Clock Cycles CMPUT 229 © 2006

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn Cycles = (CCMP + CBEQ + • • • + CBRA)*n 3 + Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 CMP BEQ FMOVE FMUL FADD ADD(Reg) ADDQ BRA

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in lea (Ay, D 8 in), Aty move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn Cycles = (CCMP + CBEQ + • • • + CBRA)*n 3 + (CCMP + CBEQ + • • • + CBRA)*n 2 CMP BEQ FSUB LEA MOVE(Reg) LSL LEA CLR Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 CMP BEQ FMOVE FMUL FADD ADD(Reg) ADDQ BRA ADDQ FMOVE ADDQ BRA

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn Cycles = (CCMP + CBEQ + • • • + CBRA)*n 3 + (CCMP + CBEQ + • • • + CBRA)*n 2 � CMP BEQ MOVE LSL MOVE MUL MOVE CLR CMP BEQ FSUB LEA MOVE(Reg) LSL LEA CLR Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 CMP BEQ FMOVE FMUL FADD ADD(Reg) ADDQ BRA ADDQ FMOVE ADDQ BRA

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn Cycles = (CCMP + CBEQ + • • • + CBRA)*n 3 + (CCMP + CBEQ + • • • + CBRA)*n 2 + (CCMP + CBEQ + • • • + CBRA)*n�+ (CLINK + CMOVM + • • • + CRTS) CMP BEQ MOVE LSL MOVE MUL MOVE CLR CMP BEQ FSUB LEA MOVE(Reg) LSL LEA CLR Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 CMP BEQ FMOVE FMUL FADD ADD(Reg) ADDQ BRA ADDQ FMOVE ADDQ BRA

Department of Computing Science From Clock Cycles to Time In an in-order processor, each

Department of Computing Science From Clock Cycles to Time In an in-order processor, each instruction takes a fix number of clocks to execute. Thus the compiler can access a table containing the number of clocks for each instruction type. Cycles = (CCMP + CBEQ + • • • + CBRA)*n 3 + (CCMP + CBEQ + • • • + CBRA)*n 2 + (CCMP + CBEQ + • • • + CBRA)*n�+ (CLINK + CMOVM + • • • + CRTS) CMPUT 229 © 2006

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn FLOW ANALYSIS: Given an assembly code for a function, divide the code into basic blocks. Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 A basic block is a sequence of consecutive statement in which flow can only enter at the beginning and leave at the end. Two instructions i 1 and i 2 are in the same basic block if and only if whenever i 1 executed i 2 is also executed and vice-versa.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader (iii) Any statement that immediately follow a branch is a leader.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader (iii) Any statement that immediately follow a branch is a leader.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader (iii) Any statement that immediately follow a branch is a leader. 2. Form basic blocks: (i) A basic block consists of the leader plus all statements that follow the leader up to but not including the next leader.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj bra Loopj Nexti: add. q #1, Di bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader (iii) Any statement that immediately follow a branch is a leader. 2. Form basic blocks: (i) A basic block consists of the leader plus all statements that follow the leader up to but not including the next leader.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn BASIC BLOCK PARTITIONING ALGORITHM Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj Nexti: add. q #1, Di B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 1. Identify basic block leaders: (i) The first statement is a leader (ii) Any statement that is the target of a branch is also a leader (iii) Any statement that immediately follow a branch is a leader. 2. Form basic blocks: (i) A basic block consists of the leader plus all statements that follow the leader up to but not including the next leader.

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn CONTROL FLOW GRAPH B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj Nexti: add. q #1, Di B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn Definition of a Register: An instruction that writes a value into the register. Use of a Register: An instruction that reads a value from the register. B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj Nexti: add. q #1, Di B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn Definition of a Register: An instruction that writes a value into the register. Use of a Register: An instruction that reads a value from the register. B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) D 8 in Di addq. l #8 Dinj Uses bra Di and D 8 in B 7 Loopj Defines Nexti: add. q D 8 in #1, Di B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn Definition of a Register: An instruction that writes a value into the register. Use of a Register: An instruction that reads a value from the register. B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) Atz Az + D 8 j addq. l #8 Dinj B 7 Uses bra Az and Loopj. D 8 j Defines Atz. Di Nexti: add. q #1, B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn Definition of a Register: An instruction that writes a value into the register. Use of a Register: An instruction that reads a value from the register. B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) Cond. Code Dn - Dkj addq. l #8 Dinj B 7 Usesbra Dn and Loopj. Dk Defines Nexti: add. qnothing #1, Di B 8 bra Loopi done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c,

mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di Loopi: cmp. l Di, Dn B 1 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in B 2 move. l D 8 in, Dinj clr. l Dj Loopj: cmp. l Dj, Dn B 3 beq Nexti fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j B 4 lea (Az, D 8 j), Atz clr. l Dkn Definition of a Register: An instruction that writes a value into the register. Use of a Register: An instruction that reads a value from the register. B 0 Loopk: cmp. l Dk, Dn B 5 beq Nextj fmove. d (Aty)+, FP 2 fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn B 6 addq. l #1, Dk bra Loopk Nextj: addq. l #1, Dj FP 2 fmove. l (Aty) FP 0, (Ax, Dinj) addq. l Aty#8+Dinj 8 B 7 bra Loopj Uses Aty Nexti: add. q #1, Di Definesbra. Aty. Loopi and FP 2 B 8 done: movm. l (%sp)+, #0 x 3 cfc unlk %a 6 B 9 rts CMPUT 229 B 1 B 9 B 2 B 3 B 8 B 4 B 5 B 7 B 6

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 B 8

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 B 8 B 4 B 5 Live. In = {A 6} Live. Out = { } done: movm. l (%sp)+, #0 x 3 cfc unlk %A 6 B 9 rts CMPUT 229 B 7 B 6

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 Live. In

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 Live. In = {A 6, Di, Dn} Live. Out = {A 6} B 8 Loopi: cmp. l Di, Dn beq done B 4 B 1 B 5 Live. In = {A 6} Live. Out = { } done: movm. l (%sp)+, #0 x 3 cfc unlk %A 6 B 9 rts CMPUT 229 B 7 B 6

Live. In = {A 6} mm: link. w A 6, #0 movm. l #0

Live. In = {A 6} mm: link. w A 6, #0 movm. l #0 x 3 f 3 c, -(sp) move. l 8(A 6), Ax B 0 move. l 12(A 6), Ay � move. l 16(A 6), Az move. l 20(A 6), Dn clr. l Di LIVENESS ANALYSIS B 0 B 1 Live. In = {A 6, Di, Dn} Nexti: add. q #1, Di bra Loopi B 8 B 9 B 2 Live. Out = {A 6, Di, Dn} B 3 Live. In = {A 6, Di, Dn} Live. Out = {A 6} B 8 Loopi: cmp. l Di, Dn beq done B 4 B 1 B 5 Live. In = {A 6} Live. Out = { } done: movm. l (%sp)+, #0 x 3 cfc unlk %A 6 B 9 rts CMPUT 229 B 7 B 6

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 B 8

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 B 3 B 8 Loopj: cmp. l Dj, Dn beq Nexti B 4 Live. In = {a 6, Di, Dj, Dn} B 3 B 5 Live. Out = {a 6, Di, Dn} Nexti: add. q #1, Di bra Loopi B 8 Live. In = {a 6, Di, Dn} CMPUT 229 B 7 B 6

LIVENESS ANALYSIS B 0 Live. In = {a 6, Di, Dn, Dinj, Dn} Loopi:

LIVENESS ANALYSIS B 0 Live. In = {a 6, Di, Dn, Dinj, Dn} Loopi: cmp. l Di, Dn B 2 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj Live. Out = {a 6, Di, Dj, Dn} B 1 Live. In = {a 6, Ax, Di, Dj, Dinj, Dn} B 2 Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj B 3 Loopj: cmp. l Dj, Dn beq Nexti B 8 B 9 B 4 Live. Out = {a 6, Di, Dj, Dn} Live. In = {a 6, Di, Dj, Dn} B 3 B 5 Live. Out = {a 6, Di, Dn} Nexti: add. q #1, Di bra Loopi B 8 Live. In = {a 6, Di, Dn} CMPUT 229 B 7 B 6

LIVENESS ANALYSIS B 0 Last time we saw B 1 we had: Loopi: cmp.

LIVENESS ANALYSIS B 0 Last time we saw B 1 we had: Loopi: cmp. l Di, Dn beq done Live. In = {A 6, Di, Dn} B 1 Live. Out = {A 6} B 2 B 9 B 1 Live. In = {A 6, Di, Dn, Dinj, Dn} Loopi: cmp. l Di, Dn B 2 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj B 3 Live. In = {A 6} done: movm. l (%sp)+, #0 x 3 cfc unlk %A 6 B 9 rts B 8 B 4 Live. Out = { } B 5 B 7 Live. Out = {A 6, Di, Dn} CMPUT 229 B 6

LIVENESS ANALYSIS B 0 B 1 Live. Out = {A 6, Di, Dn, Dinj,

LIVENESS ANALYSIS B 0 B 1 Live. Out = {A 6, Di, Dn, Dinj, Dn} Loopi: cmp. l Di, Dn beq done B 9 B 1 Live. In = {A 6, Di, Dn, Dinj, Dn} Loopi: cmp. l Di, Dn B 2 beq done move. l Dn, D 8 n lsl. l #3, D 8 n move. l D 8 n, D 8 in mul. l Di, D 8 in move. l D 8 in, Dinj clr. l Dj B 2 Live. Out = {A 6, Di, Dn, Dinj, Dn} B 3 Live. In = {A 6} done: movm. l (%sp)+, #0 x 3 cfc unlk %A 6 B 9 rts B 8 B 4 Live. Out = { } B 5 B 7 Live. Out = {A 6, Di, Dn} CMPUT 229 B 6

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 Live. In = {A

LIVENESS ANALYSIS B 0 B 1 B 9 B 2 Live. In = {A 6, Ax, Di, Dj, Dk, Dinj, Dn} Loopk: cmp. l Dk, Dn beq Nextj B 3 B 5 B 8 Live. Out = {A 6, Ax, Di, Dj, Dinj, Dn} B 4 Live. In = {A 6, Ax, Di, Dj, Dinj, Dn} B 5 Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj B 7 Live. Out = {A 6, Di, Dn} CMPUT 229 B 6

Live. In = {A 6, Ax, Ay, Az, Di, Dj, Dinj, Dn}} fsub. d

Live. In = {A 6, Ax, Ay, Az, Di, Dj, Dinj, Dn}} fsub. d FP 0, FP 0 lea (Ay, D 8 in), Aty move. l Dj, D 8 j lsl. l #3, D 8 j lea (Az, D 8 j), Atz clr. l Dk B 4 clr. l Dkn LIVENESS ANALYSIS B 0 B 1 B 9 Live. Out = {A 6, Ax, Di, Dj, Dk, Dinj, Dn} B 2 Live. In = {A 6, Ax, Di, Dj, Dk, Dinj, Dn} Loopk: cmp. l Dk, Dn beq Nextj B 3 B 5 B 8 Live. Out = {A 6, Ax, Di, Dj, Dinj, Dn} Live. In = {A 6, Ax, Di, Dj, Dinj, Dn} Nextj: addq. l #1, Dj fmove. l FP 0, (Ax, Dinj) addq. l #8 Dinj B 7 bra Loopj Live. Out = {A 6, Di, Dn} Live. In = {A 6, Ax, Aty, FP 0, FP 2, Di, Dj, Dk, Dinj, fmove. d (Aty)+, FP 2 Dn, Dn 8, Dkn} fmul. d (Atz, Dkn), FP 2 fadd. d FP 2, FP 0 add. l Dn 8, Dkn addq. l #1, Dk B 6 bra Loopk B 4 B 5 B 7 Live. Out = {A 6, Ax, Di, Dj, Dk, Dinj, Dn} CMPUT 229 B 6