public class CFGTranslationPhaseThree extends Object
| Modifier and Type | Class and Description | 
|---|---|
| protected static interface  | CFGTranslationPhaseThree.PredecessorHolderA 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> emptyBlocks,
                               Set<CFGTranslationPhaseThree.PredecessorHolder> predecessors)Compute the set of empty regular basic blocks  emptyBlocks, starting atstartand going both forward and backwards. | 
| protected static void | computeNeighborhoodOfEmptyBlockBackwards(RegularBlockImpl start,
                                        Set<RegularBlockImpl> emptyBlocks,
                                        Set<CFGTranslationPhaseThree.PredecessorHolder> predecessors)Compute the set of empty regular basic blocks  emptyBlocks, starting atstartand looking only backwards in the control flow graph. | 
| protected static CFGTranslationPhaseThree.PredecessorHolder | getPredecessorHolder(BlockImpl pred,
                    BlockImpl cur)Return a predecessor holder that can be used to set the successor of  predin the place
 where previously the edge pointed tocur. | 
| static ControlFlowGraph | process(ControlFlowGraph cfg)Perform phase three on the control flow graph  cfg. | 
| protected static CFGTranslationPhaseThree.PredecessorHolder | singleSuccessorHolder(SingleSuccessorBlockImpl s,
                     BlockImpl old)Returns a  CFGTranslationPhaseThree.PredecessorHolderthat sets the successor of a single successor blocks. | 
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> emptyBlocks, Set<CFGTranslationPhaseThree.PredecessorHolder> predecessors)
emptyBlocks, 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)emptyBlocks - 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 void computeNeighborhoodOfEmptyBlockBackwards(RegularBlockImpl start, Set<RegularBlockImpl> emptyBlocks, Set<CFGTranslationPhaseThree.PredecessorHolder> predecessors)
emptyBlocks, 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)emptyBlocks - 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 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).pred - a block whose successor should be setcur - the previous successor of predpredprotected static CFGTranslationPhaseThree.PredecessorHolder singleSuccessorHolder(SingleSuccessorBlockImpl s, BlockImpl old)
CFGTranslationPhaseThree.PredecessorHolder that sets the successor of a single successor block s.CFGTranslationPhaseThree.PredecessorHolder that sets the successor of a single successor block s