public class ValueNumberAnalysis extends FrameDataflowAnalysis<ValueNumber,ValueNumberFrame>
ValueNumber
class for an explanation
of what the value numbers mean, and when they can be compared.
This class is still experimental.
ValueNumber
,
DominatorsAnalysis
Modifier and Type | Field and Description |
---|---|
static boolean |
DEBUG |
Constructor and Description |
---|
ValueNumberAnalysis(org.apache.bcel.generic.MethodGen methodGen,
DepthFirstSearch dfs,
LoadedFieldSet loadedFieldSet,
RepositoryLookupFailureCallback lookupFailureCallback) |
Modifier and Type | Method and Description |
---|---|
void |
compactValueNumbers(Dataflow<ValueNumberFrame,ValueNumberAnalysis> dataflow)
Deprecated.
|
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.
|
java.lang.String |
getClassName(ValueNumber v) |
ValueNumber |
getClassObjectValue(java.lang.String className) |
ValueNumber |
getEntryValue(int local)
Get the value number assigned to the given local variable upon entry to
the method.
|
ValueNumber |
getEntryValueForParameter(int param)
Get the value number assigned to the given parameter upon entry to the
method.
|
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() |
MergeTree |
getMergeTree() |
int |
getNumValuesAllocated() |
ValueNumber |
getThisValue() |
void |
initEntryFact(ValueNumberFrame result)
Initialize the "entry" fact for the graph.
|
boolean |
isThisValue(ValueNumber value) |
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 void |
mergeValues(ValueNumberFrame otherFrame,
ValueNumberFrame resultFrame,
int slot)
Merge the values contained in a given slot of two Frames.
|
void |
setMergeTree(MergeTree mergeTree) |
void |
transfer(BasicBlock basicBlock,
org.apache.bcel.generic.InstructionHandle end,
ValueNumberFrame start,
ValueNumberFrame result)
Transfer function for the analysis.
|
void |
transferInstruction(org.apache.bcel.generic.InstructionHandle handle,
BasicBlock basicBlock,
ValueNumberFrame fact)
Transfer function for a single instruction.
|
copy, getFactAtPC, getFactBeforeExceptionCheck, getLastUpdateTimestamp, isFactValid, isTop, makeFactTop, modifyFrame, same, setLastUpdateTimestamp
getBlockOrder, getDepthFirstSearch, isForwards
edgeTransfer, factToString, finishIteration, getFactOnEdge, getResultFact, getStartFact, resultFactIterator, startIteration
public ValueNumberAnalysis(org.apache.bcel.generic.MethodGen methodGen, DepthFirstSearch dfs, LoadedFieldSet loadedFieldSet, RepositoryLookupFailureCallback lookupFailureCallback)
public ValueNumber getClassObjectValue(java.lang.String className)
public void setMergeTree(MergeTree mergeTree)
public MergeTree getMergeTree()
public ValueNumberFactory getFactory()
public int getNumValuesAllocated()
public boolean isThisValue(ValueNumber value)
public ValueNumber getThisValue()
public ValueNumber getEntryValue(int local)
local
- local variable numberpublic ValueNumber getEntryValueForParameter(int param)
param
- a parameter (0 == first parameter)public ValueNumberFrame createFact()
DataflowAnalysis
public void initEntryFact(ValueNumberFrame result)
DataflowAnalysis
public void transfer(BasicBlock basicBlock, org.apache.bcel.generic.InstructionHandle end, ValueNumberFrame start, ValueNumberFrame result) throws DataflowAnalysisException
DataflowAnalysis
transfer
in interface DataflowAnalysis<ValueNumberFrame>
transfer
in class AbstractDataflowAnalysis<ValueNumberFrame>
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 blockDataflowAnalysisException
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 instructionDataflowAnalysisException
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 factDataflowAnalysisException
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
framesDataflowAnalysisException
protected void mergeValues(ValueNumberFrame otherFrame, ValueNumberFrame resultFrame, int slot) throws DataflowAnalysisException
FrameDataflowAnalysis
mergeValues
in class FrameDataflowAnalysis<ValueNumber,ValueNumberFrame>
otherFrame
- a FrameresultFrame
- a Frame which will contain the resulting merged valueslot
- a slot in both framesDataflowAnalysisException
public ValueNumberFrame getFactAtLocation(Location location)
AbstractDataflowAnalysis
getFactAtLocation
in interface DataflowAnalysis<ValueNumberFrame>
getFactAtLocation
in class AbstractDataflowAnalysis<ValueNumberFrame>
location
- the locationpublic ValueNumberFrame getFactAfterLocation(Location location)
AbstractDataflowAnalysis
getFactAfterLocation
in interface DataflowAnalysis<ValueNumberFrame>
getFactAfterLocation
in class AbstractDataflowAnalysis<ValueNumberFrame>
location
- the locationpublic java.util.Iterator<ValueNumberFrame> factIterator()
@Deprecated 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)@CheckForNull @DottedClassName public java.lang.String getClassName(ValueNumber v)
FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.