|
|||||||||
| 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 ignored| Method 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 block
private 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
DataflowAnalysisExceptionpublic 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 | ||||||||