Class BackwardAnalysisImpl<V extends AbstractValue<V>,S extends Store<S>,T extends BackwardTransferFunction<V,S>>
java.lang.Object
org.checkerframework.dataflow.analysis.AbstractAnalysis<V,S,T>
org.checkerframework.dataflow.analysis.BackwardAnalysisImpl<V,S,T>
- Type Parameters:
V
- the abstract value type to be tracked by the analysisS
- the store type used in the analysisT
- the transfer function type that is used to approximate runtime behavior
- All Implemented Interfaces:
Analysis<V,
,S, T> BackwardAnalysis<V,
S, T>
public class BackwardAnalysisImpl<V extends AbstractValue<V>,S extends Store<S>,T extends BackwardTransferFunction<V,S>>
extends AbstractAnalysis<V,S,T>
implements BackwardAnalysis<V,S,T>
An implementation of a backward analysis to solve a org.checkerframework.dataflow problem given a
control flow graph and a backward transfer function.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.checkerframework.dataflow.analysis.AbstractAnalysis
AbstractAnalysis.Worklist
Nested classes/interfaces inherited from interface org.checkerframework.dataflow.analysis.Analysis
Analysis.BeforeOrAfter, Analysis.Direction
-
Field Summary
Modifier and TypeFieldDescriptionprotected final IdentityHashMap<ExceptionBlock,
S> Exception store of an exception block, propagated by exceptional successors of its exception block, and merged with the normalTransferResult
.protected final IdentityHashMap<Block,
S> Out stores after every basic block (assumed to be 'no information' if not present).The store right before the entry block.Fields inherited from class org.checkerframework.dataflow.analysis.AbstractAnalysis
cfg, currentInput, currentNode, currentTree, direction, finalLocalValues, inputs, isRunning, nodeValues, transferFunction, worklist
-
Constructor Summary
ConstructorDescriptionConstruct an object that can perform a org.checkerframework.dataflow backward analysis over a control flow graph.BackwardAnalysisImpl
(@Nullable T transferFunction) Construct an object that can perform a org.checkerframework.dataflow backward analysis over a control flow graph given a transfer function. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addStoreAfter
(Block pred, @Nullable Node node, S s, boolean addBlockToWorklist) Add a store after the basic blockpred
by merging with the existing stores for that location.Get the output store at the entry block of a given control flow graph.Get the transfer input of a givenBlock
b.Returns the store corresponding to the location right after the basic blockb
.protected void
Initialize fields of this object based on a given control flow graph.protected void
Initialize the transfer inputs of every basic block before performing the analysis.void
Perform the actual analysis.void
Perform the actual analysis on one block.protected void
propagateStoresTo
(Block pred, @Nullable Node node, TransferInput<V, S> currentInput, Store.FlowRule flowRule, boolean addToWorklistAgain) Propagate the stores incurrentInput
to the next block in the direction of analysis, according to theflowRule
.runAnalysisFor
(Node node, Analysis.BeforeOrAfter preOrPost, TransferInput<V, S> blockTransferInput, IdentityHashMap<Node, V> nodeValues, Map<TransferInput<V, S>, IdentityHashMap<Node, TransferResult<V, S>>> analysisCaches) Runs the analysis again within the block ofnode
and returns the store at the location ofnode
.Methods inherited from class org.checkerframework.dataflow.analysis.AbstractAnalysis
addToWorklist, callTransferFunction, getContainingClass, getContainingMethod, getCurrentTree, getDirection, getExceptionalExitStore, getNodesForTree, getNodeValues, getRegularExitStore, getResult, getTransferFunction, getValue, getValue, init, isIgnoredExceptionType, isRunning, readFromStore, setCurrentNode, setCurrentTree, updateNodeValues
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.checkerframework.dataflow.analysis.Analysis
getDirection, getExceptionalExitStore, getRegularExitStore, getResult, getTransferFunction, getValue, getValue, isRunning
-
Field Details
-
outStores
Out stores after every basic block (assumed to be 'no information' if not present). -
exceptionStores
Exception store of an exception block, propagated by exceptional successors of its exception block, and merged with the normalTransferResult
. -
storeAtEntry
The store right before the entry block.
-
-
Constructor Details
-
BackwardAnalysisImpl
public BackwardAnalysisImpl()Construct an object that can perform a org.checkerframework.dataflow backward analysis over a control flow graph. When using this constructor, the transfer function is set later by the subclass, e.g.,org.checkerframework.framework.flow.CFAbstractAnalysis
. -
BackwardAnalysisImpl
Construct an object that can perform a org.checkerframework.dataflow backward analysis over a control flow graph given a transfer function.- Parameters:
transferFunction
- the transfer function
-
-
Method Details
-
performAnalysis
Description copied from interface:Analysis
Perform the actual analysis.- Specified by:
performAnalysis
in interfaceAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Parameters:
cfg
- the control flow graph
-
performAnalysisBlock
Description copied from interface:Analysis
Perform the actual analysis on one block.- Specified by:
performAnalysisBlock
in interfaceAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Parameters:
b
- the block to analyze
-
getInput
Description copied from interface:Analysis
Get the transfer input of a givenBlock
b. -
getEntryStore
Description copied from interface:BackwardAnalysis
Get the output store at the entry block of a given control flow graph. For a backward analysis, the output store contains the analyzed flow information from the exit block to the entry block.- Specified by:
getEntryStore
in interfaceBackwardAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Returns:
- the output store at the entry block of a given control flow graph
-
initFields
Description copied from class:AbstractAnalysis
Initialize fields of this object based on a given control flow graph. Sub-class may override this method to initialize customized fields.- Overrides:
initFields
in classAbstractAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Parameters:
cfg
- a given control flow graph
-
initInitialInputs
Description copied from class:AbstractAnalysis
Initialize the transfer inputs of every basic block before performing the analysis.- Specified by:
initInitialInputs
in classAbstractAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>>
-
propagateStoresTo
protected void propagateStoresTo(Block pred, @Nullable Node node, TransferInput<V, S> currentInput, Store.FlowRule flowRule, boolean addToWorklistAgain) Description copied from class:AbstractAnalysis
Propagate the stores incurrentInput
to the next block in the direction of analysis, according to theflowRule
.- Specified by:
propagateStoresTo
in classAbstractAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Parameters:
pred
- the target block to propagate the stores tonode
- the node of the target blockcurrentInput
- the current transfer inputflowRule
- the flow rule being usedaddToWorklistAgain
- whether the block should be added toAbstractAnalysis.worklist
again
-
addStoreAfter
Add a store after the basic blockpred
by merging with the existing stores for that location.- Parameters:
pred
- the basic blocknode
- the node of the basic blockb
s
- the store being addedaddBlockToWorklist
- whether the basic blockb
should be added back toWorklist
-
getStoreAfter
Returns the store corresponding to the location right after the basic blockb
.- Parameters:
b
- the given block- Returns:
- the store right after the given block
-
runAnalysisFor
public S runAnalysisFor(@FindDistinct Node node, Analysis.BeforeOrAfter preOrPost, TransferInput<V, S> blockTransferInput, IdentityHashMap<Node, V> nodeValues, Map<TransferInput<V, S>, IdentityHashMap<Node, TransferResult<V, S>>> analysisCaches) Description copied from interface:Analysis
Runs the analysis again within the block ofnode
and returns the store at the location ofnode
. Ifbefore
is true, then the store immediately before theNode
node
is returned. Otherwise, the store immediately afternode
is returned. IfanalysisCaches
is not null, this method uses a cache.analysisCaches
is a map of a block of node to the cached analysis result. If the cache fortransferInput
is not inanalysisCaches
, this method creates new cache and stores it inanalysisCaches
. The cache is a map of nodes to the analysis results of the nodes.- Specified by:
runAnalysisFor
in interfaceAnalysis<V extends AbstractValue<V>,
S extends Store<S>, T extends BackwardTransferFunction<V, S>> - Parameters:
node
- the node to analyzepreOrPost
- which store to return: the store immediately beforenode
or the store afternode
blockTransferInput
- the transfer input of the block of this nodenodeValues
- abstract values of nodesanalysisCaches
- caches of analysis results- Returns:
- the store before or after
node
(depends on the value ofbefore
) after running the analysis
-