public static class CFGBuilder.CFGTranslationPhaseThree
extends java.lang.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,
java.util.Set<RegularBlockImpl> empty,
java.util.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,
java.util.Set<RegularBlockImpl> empty,
java.util.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, java.util.Set<RegularBlockImpl> empty, java.util.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 predecessorsprotected static void computeNeighborhoodOfEmptyBlockBackwards(RegularBlockImpl start, java.util.Set<RegularBlockImpl> empty, java.util.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 predecessorsprotected 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
.