Code Generation from DAG
S 1= 4 * i
|
S 1 = 4 * i
|
S2 = addr(A)-4
|
S 2 = addr(A)-4
|
S3 = S 2 [S 1 ]
|
S 3 = S2 [S 1 ]
|
S 4 = 4 * i
|
|
S5 = addr(B)-4
|
S 5= addr(B)-4
|
S 6 = S 5 [S4 ] |
S6 = S5 [S 4 ] |
S7 = S 3 * S6
|
S 7 = S3 * S 6
|
S8 = prod+S7
|
|
prod = S8
|
prod = prod + S 7
|
S9 = I+1
|
|
I = S9
|
I = I + 1
|
If I <= 20 goto (1)
|
If I <= 20 goto (1)
|
We see how to generate code for a basic block from its DAG representation. The advantage of doing so is that from a DAG we can more easily see how to rearrange the order of the final computation sequence than we can starting from a linear sequence of three-address statements or quadruples. If the DAG is a tree, we can generate code that we can prove is optimal under such criteria as program length or the fewest number of temporaries used. The algorithm for optimal code generation from a tree is also useful when the intermediate code is a parse tree.
|