|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.umd.cs.findbugs.ba.AbstractDataflowAnalysis<Fact>
edu.umd.cs.findbugs.ba.ForwardDataflowAnalysis<FrameType>
edu.umd.cs.findbugs.ba.FrameDataflowAnalysis<ValueNumber,ValueNumberFrame>
edu.umd.cs.findbugs.ba.ValueNumberAnalysis
public class ValueNumberAnalysis
A dataflow analysis to track the production and flow of values in the Java
stack frame. See the ValueNumber
class for an explanation
of what the value numbers mean, and when they can be compared.
This class is still experimental.
ValueNumber
,
DominatorsAnalysis
Nested Class Summary | |
---|---|
private static class |
ValueNumberAnalysis.ValueCompacter
|
Field Summary | |
---|---|
private ValueNumberCache |
cache
|
private static boolean |
DEBUG
|
private ValueNumber[] |
entryLocalValueList
|
private java.util.IdentityHashMap<BasicBlock,ValueNumber> |
exceptionHandlerValueNumberMap
|
private java.util.HashMap<Location,ValueNumberFrame> |
factAfterLocationMap
|
private java.util.HashMap<Location,ValueNumberFrame> |
factAtLocationMap
|
private ValueNumberFactory |
factory
|
private org.apache.bcel.generic.MethodGen |
methodGen
|
private ValueNumber |
thisValue
|
private ValueNumberFrameModelingVisitor |
visitor
|
Constructor Summary | |
---|---|
ValueNumberAnalysis(org.apache.bcel.generic.MethodGen methodGen,
DepthFirstSearch dfs,
LoadedFieldSet loadedFieldSet,
RepositoryLookupFailureCallback lookupFailureCallback)
|
Method Summary | |
---|---|
void |
compactValueNumbers(Dataflow<ValueNumberFrame,ValueNumberAnalysis> dataflow)
Compact the value numbers assigned. |
ValueNumberFrame |
createFact()
Create empty (uninitialized) dataflow facts for one program point. |
java.util.Iterator<ValueNumberFrame> |
factIterator()
Get an Iterator over all dataflow facts that we've recorded for the Locations in the CFG. |
ValueNumber |
getEntryValue(int local)
|
private ValueNumber |
getExceptionValueNumber(BasicBlock handlerBlock)
|
ValueNumberFrame |
getFactAfterLocation(Location location)
Get the dataflow fact representing the point just after given Location. |
ValueNumberFrame |
getFactAtLocation(Location location)
Get the dataflow fact representing the point just before given Location. |
ValueNumberFactory |
getFactory()
|
int |
getNumValuesAllocated()
|
ValueNumber |
getThisValue()
|
void |
initEntryFact(ValueNumberFrame result)
Initialize the "entry" fact for the graph. |
boolean |
isThisValue(ValueNumber value)
|
static void |
main(java.lang.String[] argv)
Test driver. |
private static void |
markFrameValues(ValueNumberFrame frame,
ValueNumberAnalysis.ValueCompacter compacter)
Mark value numbers in a value number frame for compaction. |
void |
meetInto(ValueNumberFrame fact,
Edge edge,
ValueNumberFrame result)
Meet a dataflow fact associated with an incoming edge into another fact. |
protected void |
mergeInto(ValueNumberFrame frame,
ValueNumberFrame result)
Merge one frame into another. |
protected ValueNumber |
mergeValues(ValueNumberFrame frame,
int slot,
ValueNumber mine,
ValueNumber other)
Merge two values in a particular slot of a Frame. |
void |
transferInstruction(org.apache.bcel.generic.InstructionHandle handle,
BasicBlock basicBlock,
ValueNumberFrame fact)
Transfer function for a single instruction. |
Methods inherited from class edu.umd.cs.findbugs.ba.FrameDataflowAnalysis |
---|
copy, initResultFact, isFactValid, makeFactTop, modifyFrame, same |
Methods inherited from class edu.umd.cs.findbugs.ba.ForwardDataflowAnalysis |
---|
getBlockOrder, getDepthFirstSearch, isForwards |
Methods inherited from class edu.umd.cs.findbugs.ba.AbstractDataflowAnalysis |
---|
endTransfer, factToString, getResultFact, getStartFact, resultFactIterator, startTransfer, transfer |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static final boolean DEBUG
private org.apache.bcel.generic.MethodGen methodGen
private ValueNumberFactory factory
private ValueNumberCache cache
private ValueNumberFrameModelingVisitor visitor
private ValueNumber[] entryLocalValueList
private java.util.IdentityHashMap<BasicBlock,ValueNumber> exceptionHandlerValueNumberMap
private ValueNumber thisValue
private java.util.HashMap<Location,ValueNumberFrame> factAtLocationMap
private java.util.HashMap<Location,ValueNumberFrame> factAfterLocationMap
Constructor Detail |
---|
public ValueNumberAnalysis(org.apache.bcel.generic.MethodGen methodGen, DepthFirstSearch dfs, LoadedFieldSet loadedFieldSet, RepositoryLookupFailureCallback lookupFailureCallback)
Method Detail |
---|
public ValueNumberFactory getFactory()
public int getNumValuesAllocated()
public boolean isThisValue(ValueNumber value)
public ValueNumber getThisValue()
public ValueNumber getEntryValue(int local)
public ValueNumberFrame createFact()
DataflowAnalysis
public void initEntryFact(ValueNumberFrame result)
DataflowAnalysis
public void transferInstruction(org.apache.bcel.generic.InstructionHandle handle, BasicBlock basicBlock, ValueNumberFrame fact) throws DataflowAnalysisException
AbstractDataflowAnalysis
transferInstruction
in class AbstractDataflowAnalysis<ValueNumberFrame>
handle
- the instructionbasicBlock
- the BasicBlock containing the instruction; needed to disambiguate
instructions in inlined JSR subroutinesfact
- which should be modified based on the instruction
DataflowAnalysisException
public void meetInto(ValueNumberFrame fact, Edge edge, ValueNumberFrame result) throws DataflowAnalysisException
DataflowAnalysis
fact
- the predecessor fact (incoming edge)edge
- the edge from the predecessorresult
- the result fact
DataflowAnalysisException
protected void mergeInto(ValueNumberFrame frame, ValueNumberFrame result) throws DataflowAnalysisException
FrameDataflowAnalysis
mergeInto
in class FrameDataflowAnalysis<ValueNumber,ValueNumberFrame>
frame
- the frame to merge with the resultresult
- the result frame, which is modified to be the
merge of the two frames
DataflowAnalysisException
protected ValueNumber mergeValues(ValueNumberFrame frame, int slot, ValueNumber mine, ValueNumber other) throws DataflowAnalysisException
FrameDataflowAnalysis
mergeValues
in class FrameDataflowAnalysis<ValueNumber,ValueNumberFrame>
frame
- the Frameslot
- the slot of the Framemine
- a valueother
- another value
DataflowAnalysisException
public ValueNumberFrame getFactAtLocation(Location location)
AbstractDataflowAnalysis
getFactAtLocation
in class AbstractDataflowAnalysis<ValueNumberFrame>
location
- the location
public ValueNumberFrame getFactAfterLocation(Location location)
AbstractDataflowAnalysis
getFactAfterLocation
in class AbstractDataflowAnalysis<ValueNumberFrame>
public java.util.Iterator<ValueNumberFrame> factIterator()
public void compactValueNumbers(Dataflow<ValueNumberFrame,ValueNumberAnalysis> dataflow)
This method should be called at most once.
dataflow
- the Dataflow object which executed this analysis
(and has all of the block result values)private static void markFrameValues(ValueNumberFrame frame, ValueNumberAnalysis.ValueCompacter compacter)
public static void main(java.lang.String[] argv)
private ValueNumber getExceptionValueNumber(BasicBlock handlerBlock)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |