Class CFGTranslationPhaseThree

java.lang.Object
org.checkerframework.dataflow.cfg.builder.CFGTranslationPhaseThree

public final class CFGTranslationPhaseThree extends Object
Class that performs phase three of the translation process. In particular, the following degenerate cases of basic blocks are removed:
  1. Empty regular basic blocks: These blocks will be removed and their predecessors linked directly to the successor.
  2. Conditional basic blocks that have the same basic block as the 'then' and 'else' successor: The conditional basic block will be removed in this case.
  3. Two consecutive, non-empty, regular basic blocks where the second block has exactly one predecessor (namely the other of the two blocks): In this case, the two blocks are merged.
  4. Some basic blocks might not be reachable from the entryBlock. These basic blocks are removed, and the list of predecessors (in the doubly-linked structure of basic blocks) are adapted correctly.
Eliminating the second type of degenerate cases might introduce cases of the third problem. These are also removed.
  • Method Details

    • process

      public static ControlFlowGraph process(ControlFlowGraph cfg)
      Perform phase three on the control flow graph cfg.
      Parameters:
      cfg - the control flow graph. Ownership is transferred to this method and the caller is not allowed to read or modify cfg after the call to process any more.
      Returns:
      the resulting control flow graph