public class CFG
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
static class |
CFG.EdgeType |
| Modifier and Type | Field and Description |
|---|---|
private java.util.Map<Label,BasicBlock> |
bbMap |
private java.util.Map<BasicBlock,BasicBlock> |
ensurerMap |
private BasicBlock |
entryBB
Entry BB
|
private BasicBlock |
exitBB
Exit BB
|
private BasicBlock |
globalEnsureBB
BB that traps all exception-edges out of the cfg where we could add any cleanup/ensure code (ex: pop frames, etc.)
|
private DirectedGraph<BasicBlock> |
graph
The graph itself
|
private static Logger |
LOG |
private int |
nextBBId |
private java.util.List<ExceptionRegion> |
outermostERs |
(package private) java.util.LinkedList<BasicBlock> |
postOrderList |
private java.util.Map<BasicBlock,BasicBlock> |
rescuerMap |
private IRScope |
scope |
private static final Logger LOG
private IRScope scope
private java.util.Map<Label,BasicBlock> bbMap
private java.util.Map<BasicBlock,BasicBlock> rescuerMap
private java.util.Map<BasicBlock,BasicBlock> ensurerMap
private java.util.List<ExceptionRegion> outermostERs
private BasicBlock entryBB
private BasicBlock exitBB
private BasicBlock globalEnsureBB
private DirectedGraph<BasicBlock> graph
private int nextBBId
java.util.LinkedList<BasicBlock> postOrderList
public CFG(IRScope scope)
public int getNextBBID()
public int getMaxNodeID()
public boolean bbIsProtected(BasicBlock b)
public BasicBlock getBBForLabel(Label label)
public BasicBlock getEnsurerBBFor(BasicBlock block)
public BasicBlock getEntryBB()
public BasicBlock getExitBB()
public BasicBlock getGlobalEnsureBB()
public java.util.List<ExceptionRegion> getOutermostExceptionRegions()
public java.util.LinkedList<BasicBlock> postOrderList()
public java.util.ListIterator<BasicBlock> getPostOrderTraverser()
public java.util.ListIterator<BasicBlock> getReversePostOrderTraverser()
public void resetState()
public IRScope getScope()
public int size()
public java.util.Collection<BasicBlock> getBasicBlocks()
public java.util.Collection<BasicBlock> getSortedBasicBlocks()
public void addEdge(BasicBlock source, BasicBlock destination, java.lang.Object type)
public int inDegree(BasicBlock b)
public int outDegree(BasicBlock b)
public java.lang.Iterable<BasicBlock> getIncomingSources(BasicBlock block)
public java.lang.Iterable<Edge<BasicBlock>> getIncomingEdges(BasicBlock block)
public BasicBlock getIncomingSource(BasicBlock block)
public BasicBlock getIncomingSourceOfType(BasicBlock block, java.lang.Object type)
public Edge<BasicBlock> getIncomingEdgeOfType(BasicBlock block, java.lang.Object type)
public Edge<BasicBlock> getOutgoingEdgeOfType(BasicBlock block, java.lang.Object type)
public BasicBlock getOutgoingDestination(BasicBlock block)
public BasicBlock getOutgoingDestinationOfType(BasicBlock block, java.lang.Object type)
public java.lang.Iterable<BasicBlock> getOutgoingDestinations(BasicBlock block)
public java.lang.Iterable<BasicBlock> getOutgoingDestinationsOfType(BasicBlock block, java.lang.Object type)
public java.lang.Iterable<BasicBlock> getOutgoingDestinationsNotOfType(BasicBlock block, java.lang.Object type)
public java.util.Set<Edge<BasicBlock>> getOutgoingEdges(BasicBlock block)
public java.lang.Iterable<Edge<BasicBlock>> getOutgoingEdgesNotOfType(BasicBlock block, java.lang.Object type)
public BasicBlock getRescuerBBFor(BasicBlock block)
public void addGlobalEnsureBB(BasicBlock geb)
public void setEnsurerBB(BasicBlock block, BasicBlock ensureBlock)
public void setRescuerBB(BasicBlock block, BasicBlock rescuerBlock)
public DirectedGraph<BasicBlock> build(java.util.List<Instr> instrs)
private void addEdge(BasicBlock src, Label targetLabel, java.util.Map<Label,java.util.List<BasicBlock>> forwardRefs)
private BasicBlock buildExitBasicBlock(java.util.Stack<ExceptionRegion> nestedExceptionRegions, BasicBlock firstBB, java.util.List<BasicBlock> returnBBs, java.util.List<BasicBlock> exceptionBBs, boolean nextIsFallThrough, BasicBlock currBB, BasicBlock entryBB)
private BasicBlock createBB(Label label, java.util.Stack<ExceptionRegion> nestedExceptionRegions)
private BasicBlock createBB(java.util.Stack<ExceptionRegion> nestedExceptionRegions)
public void addBasicBlock(BasicBlock bb)
public void removeEdge(Edge edge)
public void removeAllOutgoingEdgesForBB(BasicBlock b)
private void deleteOrphanedBlocks(DirectedGraph<BasicBlock> graph)
private boolean mergeBBs(BasicBlock a, BasicBlock b)
public void removeBB(BasicBlock b)
public void collapseStraightLineBBs()
private void optimize()
public java.lang.String toStringGraph()
public java.lang.String toStringInstrs()
public void removeEdge(BasicBlock a, BasicBlock b)
private java.util.LinkedList<BasicBlock> buildPostOrderList()
public CFG cloneForCloningClosure(IRScope scope, InlinerInfo ii)
private void printError(java.lang.String message)