Class ArrayRefBlockGraph

  • All Implemented Interfaces:
    Iterable<Block>, DirectedBodyGraph<Block>, DirectedGraph<Block>

    public class ArrayRefBlockGraph
    extends BlockGraph
    A CFG where the nodes are Block instances, and where Units which include array references start new blocks. Exceptional control flow is ignored, so the graph will be a forest where each exception handler constitutes a disjoint subgraph.
    • Constructor Detail

      • ArrayRefBlockGraph

        public ArrayRefBlockGraph​(Body body)

        Constructs an ArrayRefBlockGraph from the given Body.

        Note that this constructor builds a BriefUnitGraph internally when splitting body's Units into Blocks. Callers who need both a BriefUnitGraph and an ArrayRefBlockGraph should use the constructor taking the BriefUnitGraph as a parameter, as a minor optimization.

        Parameters:
        body - the Body instance from which the graph is built.
      • ArrayRefBlockGraph

        public ArrayRefBlockGraph​(BriefUnitGraph unitGraph)
        Constructs an ArrayRefBlockGraph corresponding to the Unit-level control flow represented by the passed BriefUnitGraph.
        Parameters:
        unitGraph - The BriefUnitGraph for which to build an ArrayRefBlockGraph.
    • Method Detail

      • computeLeaders

        protected Set<Unit> computeLeaders​(UnitGraph unitGraph)

        Utility method for computing the basic block leaders for a Body, given its UnitGraph (i.e., the instructions which begin new basic blocks).

        This implementation chooses as block leaders all the Units that {@link BlockGraph.computerLeaders()}, and adds:

        • All Units which contain an array reference, as defined by {@link Stmt.containsArrayRef()} and {@link Inst.containsArrayRef()}.
        • The first Unit not covered by each Trap (i.e., the Unit returned by {@link Trap.getLastUnit()}.

        Overrides:
        computeLeaders in class BlockGraph
        Parameters:
        unitGraph - is the Unit-level CFG which is to be split into basic blocks.
        Returns:
        the Set of Units in unitGraph which are block leaders.