2. Construction of
the
Representation
1. Partition the intermediate code
into basic blocks
2. The basic blocks become the
nodes of a flow graph and the
edges indicate the flow (which
blocks follow which)
3. Basic Blocks
*a piece of straight line code
i.e. there are no jumps in or out
of the middle of a block
1. the flow of control can only
enter the basic block through
the first instruction
2. control will leave the block
without halting or branching,
except possibly, at the last
instruction in the block
4. Constructing
Basic Blocks
1) Determine a set of leaders,
the first instruction of blocks
2) A basic block consists of a
leader and all the following
instructions until the next
leader
5. Constructing
Basic Blocks
Determine a set of leaders
1) The first instruction is a leader
2) Instruction L is a leader if there is
an instruction a
or a
3) Instruction L is a leader if it
immediately follows an
instruction a
or a
if … goto L
goto L
if … goto B
goto B
goto B
6. Flow Graph
Once an intermediate-code
program is partitioned into basic
blocks, we represent the flow of
control between them by a flow
graph.
7. Constructing
the Flow
Graph
There is an edge from block B to
block C iff it is possible for the first
instruction in block C to
immediately follow the last
instruction in block B
1. There is a conditional or unconditional jump from the
end of B to the beginning of C
8. Constructing
the Flow
Graph
There is an edge from block B to
block C iff it is possible for the first
instruction in block C to
immediately follow the last
instruction in block B
2. C immediately follows B in the original order of the
three-address instructions, and B does not end in an
unconditional jump
10. Constructing
the Flow
Graph
Often we add two nodes, called
the entry and exit.
2. There is an edge to the exit from any basic block that
contains an instruction that could bet eh last
executed instruction of the program
13. Loops
We say that a set of nodes L in a
flow graph is a loop if
1. There is a node in L called the loop entry with the
property that no other node in L has a predecessor
outside L.That is , every path from the entry of the entire
flow graph to any node in L goes through the loop entry.
14. Loops
We say that a set of nodes L in a
flow graph is a loop if
2. Every node in L has a nonempty path, completely
within L, to the entry of L.
This section introduces a graph presentation of intermediate code (although not constructed by a code-generation algo) which is is helpful for discussing code generation
Better register allocation, if we know how values are defined and used
The nodes of the flow graph are the basic blocks
We say that B is a predecessor of C , and C is a successor of B .
If the final instruction of the program is not an unconditional jump, then the block containing the final instruction of the program is one predecessor of the exit, but so is any basic block that has a jump to code that is not part of the program.
Note from that in the flow graph, it is normal to replace the jumps to instruction numbers or labels by jumps to basic blocks
If the final instruction of the program is not an unconditional jump, then the block containing the final instruction of the program is one predecessor of the exit, but so is any basic block that has a jump to code that is not part of the program.
If the final instruction of the program is not an unconditional jump, then the block containing the final instruction of the program is one predecessor of the exit, but so is any basic block that has a jump to code that is not part of the program.