public static class CFGBuilder.CFGTranslationPhaseThree extends Object
Modifier and Type | Class and Description |
---|---|
protected static interface |
CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder
A simple wrapper object that holds a basic block and allows to set
one of its successors.
|
Constructor and Description |
---|
CFGTranslationPhaseThree() |
Modifier and Type | Method and Description |
---|---|
protected static BlockImpl |
computeNeighborhoodOfEmptyBlock(RegularBlockImpl start,
Set<RegularBlockImpl> empty,
Set<CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder> predecessors)
Compute the set of empty regular basic blocks
empty , starting
at start and going both forward and backwards. |
protected static void |
computeNeighborhoodOfEmptyBlockBackwards(RegularBlockImpl start,
Set<RegularBlockImpl> empty,
Set<CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder> predecessors)
Compute the set of empty regular basic blocks
empty , starting
at start and looking only backwards in the control flow
graph. |
protected static CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder |
getPredecessorHolder(BlockImpl pred,
BlockImpl cur)
Return a predecessor holder that can be used to set the successor of
pred in the place where previously the edge pointed to
cur . |
static ControlFlowGraph |
process(ControlFlowGraph cfg)
Perform phase three on the control flow graph
cfg . |
protected static CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder |
singleSuccessorHolder(SingleSuccessorBlockImpl s,
BlockImpl old) |
public static ControlFlowGraph process(ControlFlowGraph cfg)
cfg
.cfg
- The control flow graph. Ownership is transfered to this
method and the caller is not allowed to read or modify
cfg
after the call to process
any more.protected static BlockImpl computeNeighborhoodOfEmptyBlock(RegularBlockImpl start, Set<RegularBlockImpl> empty, Set<CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder> predecessors)
empty
, starting
at start
and going both forward and backwards. Furthermore,
compute the predecessors of these empty blocks (predecessors
), and their single successor (return value).start
- The starting point of the search (an empty, regular basic
block).empty
- An empty set to be filled by this method with all empty
basic blocks found (including start
).predecessors
- An empty set to be filled by this method with all
predecessors.protected static void computeNeighborhoodOfEmptyBlockBackwards(RegularBlockImpl start, Set<RegularBlockImpl> empty, Set<CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder> predecessors)
empty
, starting
at start
and looking only backwards in the control flow
graph. Furthermore, compute the predecessors of these empty blocks (
predecessors
).start
- The starting point of the search (an empty, regular basic
block).empty
- A set to be filled by this method with all empty basic
blocks found (including start
).predecessors
- A set to be filled by this method with all predecessors.protected static CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder getPredecessorHolder(BlockImpl pred, BlockImpl cur)
pred
in the place where previously the edge pointed to
cur
. Additionally, the predecessor holder also takes care of
unlinking (i.e., removing the pred
from cur's
predecessors).protected static CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder singleSuccessorHolder(SingleSuccessorBlockImpl s, BlockImpl old)
CFGBuilder.CFGTranslationPhaseThree.PredecessorHolder
that sets the successor of a
single successor block s
.