Class UnitGraph

    • Constructor Detail

      • UnitGraph

        protected UnitGraph​(Body body)
        Performs the work that is required to construct any sort of UnitGraph.
        Parameters:
        body - The body of the method for which to construct a control flow graph.
    • Method Detail

      • buildUnexceptionalEdges

        protected void buildUnexceptionalEdges​(Map<Unit,​List<Unit>> unitToSuccs,
                                               Map<Unit,​List<Unit>> unitToPreds)
        Utility method for UnitGraph constructors. It computes the edges corresponding to unexceptional control flow.
        Parameters:
        unitToSuccs - A Map from Units to Lists of Units. This is an ``out parameter''; callers must pass an empty Map. buildUnexceptionalEdges will add a mapping for every Unit in the body to a list of its unexceptional successors.
        unitToPreds - A Map from Units to Lists of Units. This is an ``out parameter''; callers must pass an empty Map. buildUnexceptionalEdges will add a mapping for every Unit in the body to a list of its unexceptional predecessors.
      • buildHeadsAndTails

        protected void buildHeadsAndTails()

        Utility method used in the construction of UnitGraphs, to be called only after the unitToPreds and unitToSuccs maps have been built.

        UnitGraph provides an implementation of buildHeadsAndTails() which defines the graph's set of heads to include the first Unit in the graph's body, together with any other Unit which has no predecessors. It defines the graph's set of tails to include all Units with no successors. Subclasses of UnitGraph may override this method to change the criteria for classifying a node as a head or tail.

      • combineMapValues

        protected Map<Unit,​List<Unit>> combineMapValues​(Map<Unit,​List<Unit>> mapA,
                                                              Map<Unit,​List<Unit>> mapB)
        Utility method that produces a new map from the Units of this graph's body to the union of the values stored in the two argument Maps, used to combine the maps of exceptional and unexceptional predecessors and successors into maps of all predecessors and successors. The values stored in both argument maps must be Lists of Units, which are assumed not to contain any duplicate Units.
        Parameters:
        mapA - The first map to be combined.
        mapB - The second map to be combined.
      • addEdge

        protected void addEdge​(Map<Unit,​List<Unit>> unitToSuccs,
                               Map<Unit,​List<Unit>> unitToPreds,
                               Unit head,
                               Unit tail)
        Utility method for adding an edge to maps representing the CFG.
        Parameters:
        unitToSuccs - The Map from Units to Lists of their successors.
        unitToPreds - The Map from Units to Lists of their successors.
        head - The Unit from which the edge starts.
        tail - The Unit to which the edge flows.
      • getExtendedBasicBlockPathBetween

        public List<Unit> getExtendedBasicBlockPathBetween​(Unit from,
                                                           Unit to)
        Look for a path in graph, from def to use. This path has to lie inside an extended basic block (and this property implies uniqueness.). The path returned includes from and to.
        Parameters:
        from - start point for the path.
        to - end point for the path.
        Returns:
        null if there is no such path.