|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.umd.cs.findbugs.ba.AbstractDominatorsAnalysis
public abstract class AbstractDominatorsAnalysis
A dataflow analysis to compute dominator relationships between
basic blocks. Use the getResultFact(edu.umd.cs.findbugs.ba.BasicBlock)
method to get the dominator
set for a given basic block. The dominator sets are represented using
the BitSet
class, with the individual bits
corresponding to the IDs of basic blocks.
Subclasses extend this class to compute either dominators or postdominators.
Exception edges may be ignored, in which case the domination results only take non-exception control flow into account.
DataflowAnalysis
,
CFG
,
BasicBlock
Field Summary | |
---|---|
private CFG |
cfg
|
private boolean |
ignoreExceptionEdges
|
private java.util.IdentityHashMap<BasicBlock,java.util.BitSet> |
resultFactMap
|
private java.util.IdentityHashMap<BasicBlock,java.util.BitSet> |
startFactMap
|
Constructor Summary | |
---|---|
AbstractDominatorsAnalysis(CFG cfg,
boolean ignoreExceptionEdges)
Constructor. |
Method Summary | |
---|---|
void |
copy(java.util.BitSet source,
java.util.BitSet dest)
Copy dataflow facts. |
java.util.BitSet |
createFact()
Create empty (uninitialized) dataflow facts for one program point. |
java.util.BitSet |
getAllDominatedBy(BasicBlock dominator)
Get all blocks in CFG dominated (or postdominated, depending on how the analysis was done) by given block. |
java.util.BitSet |
getResultFact(BasicBlock block)
Get the result fact for given basic block. |
java.util.BitSet |
getStartFact(BasicBlock block)
Get the start fact for given basic block. |
void |
initEntryFact(java.util.BitSet result)
Initialize the "entry" fact for the graph. |
void |
initResultFact(java.util.BitSet result)
Initialize result fact for block. |
boolean |
isTop(java.util.BitSet fact)
|
private java.util.BitSet |
lookupOrCreateFact(java.util.Map<BasicBlock,java.util.BitSet> map,
BasicBlock block)
|
void |
makeFactTop(java.util.BitSet fact)
Make given fact the top value. |
void |
meetInto(java.util.BitSet fact,
Edge edge,
java.util.BitSet result)
Meet a dataflow fact associated with an incoming edge into another fact. |
boolean |
same(java.util.BitSet fact1,
java.util.BitSet fact2)
Are given dataflow facts the same? |
void |
transfer(BasicBlock basicBlock,
org.apache.bcel.generic.InstructionHandle end,
java.util.BitSet start,
java.util.BitSet result)
Transfer function for the analysis. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface edu.umd.cs.findbugs.ba.DataflowAnalysis |
---|
getBlockOrder, isForwards |
Field Detail |
---|
private final CFG cfg
private final boolean ignoreExceptionEdges
private final java.util.IdentityHashMap<BasicBlock,java.util.BitSet> startFactMap
private final java.util.IdentityHashMap<BasicBlock,java.util.BitSet> resultFactMap
Constructor Detail |
---|
public AbstractDominatorsAnalysis(CFG cfg, boolean ignoreExceptionEdges)
cfg
- the CFG to compute dominator relationships forignoreExceptionEdges
- true if exception edges should be ignoredMethod Detail |
---|
public java.util.BitSet createFact()
DataflowAnalysis
createFact
in interface DataflowAnalysis<java.util.BitSet>
public java.util.BitSet getStartFact(BasicBlock block)
DataflowAnalysis
getStartFact
in interface DataflowAnalysis<java.util.BitSet>
block
- the basic blockpublic java.util.BitSet getResultFact(BasicBlock block)
DataflowAnalysis
getResultFact
in interface DataflowAnalysis<java.util.BitSet>
block
- the basic blockprivate java.util.BitSet lookupOrCreateFact(java.util.Map<BasicBlock,java.util.BitSet> map, BasicBlock block)
public void copy(java.util.BitSet source, java.util.BitSet dest)
DataflowAnalysis
copy
in interface DataflowAnalysis<java.util.BitSet>
public void initEntryFact(java.util.BitSet result)
DataflowAnalysis
initEntryFact
in interface DataflowAnalysis<java.util.BitSet>
public void initResultFact(java.util.BitSet result)
DataflowAnalysis
initResultFact
in interface DataflowAnalysis<java.util.BitSet>
public boolean isTop(java.util.BitSet fact)
public void makeFactTop(java.util.BitSet fact)
DataflowAnalysis
makeFactTop
in interface DataflowAnalysis<java.util.BitSet>
public boolean same(java.util.BitSet fact1, java.util.BitSet fact2)
DataflowAnalysis
same
in interface DataflowAnalysis<java.util.BitSet>
public void transfer(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle end, java.util.BitSet start, java.util.BitSet result) throws DataflowAnalysisException
DataflowAnalysis
transfer
in interface DataflowAnalysis<java.util.BitSet>
basicBlock
- the basic blockend
- if nonnull, stop before considering this instruction;
otherwise, consider all of the instructions in the basic blockstart
- dataflow facts at beginning of block (if forward analysis)
or end of block (if backwards analysis)result
- resulting dataflow facts at other end of block
DataflowAnalysisException
public void meetInto(java.util.BitSet fact, Edge edge, java.util.BitSet result) throws DataflowAnalysisException
DataflowAnalysis
meetInto
in interface DataflowAnalysis<java.util.BitSet>
fact
- the predecessor fact (incoming edge)edge
- the edge from the predecessorresult
- the result fact
DataflowAnalysisException
public java.util.BitSet getAllDominatedBy(BasicBlock dominator)
dominator
- we want to get all blocks dominated (or postdominated)
by this block
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |