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.WorklistNested classes/interfaces inherited from interface org.checkerframework.dataflow.analysis.Analysis
Analysis.BeforeOrAfter, Analysis.Direction -
Field Summary
FieldsModifier 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
ConstructorsConstructorDescriptionConstruct 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 voidaddStoreAfter(Block pred, @Nullable Node node, S s, boolean addBlockToWorklist) Add a store after the basic blockpredby 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 givenBlockb.Returns the store corresponding to the location right after the basic blockb.protected voidInitialize fields of this object based on a given control flow graph.protected voidInitialize the transfer inputs of every basic block before performing the analysis.voidPerform the actual analysis.voidPerform the actual analysis on one block.protected voidpropagateStoresTo(Block pred, @Nullable Node node, TransferInput<V, S> currentInput, Store.FlowRule flowRule, boolean addToWorklistAgain) Propagate the stores incurrentInputto 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 ofnodeand 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, updateNodeValuesMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods 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:AnalysisPerform the actual analysis.- Specified by:
performAnalysisin 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:AnalysisPerform the actual analysis on one block.- Specified by:
performAnalysisBlockin 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:AnalysisGet the transfer input of a givenBlockb. -
getEntryStore
Description copied from interface:BackwardAnalysisGet 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:
getEntryStorein 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:AbstractAnalysisInitialize fields of this object based on a given control flow graph. Sub-class may override this method to initialize customized fields.- Overrides:
initFieldsin 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:AbstractAnalysisInitialize the transfer inputs of every basic block before performing the analysis.- Specified by:
initInitialInputsin 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:AbstractAnalysisPropagate the stores incurrentInputto the next block in the direction of analysis, according to theflowRule.- Specified by:
propagateStoresToin 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.worklistagain
-
addStoreAfter
Add a store after the basic blockpredby merging with the existing stores for that location.- Parameters:
pred- the basic blocknode- the node of the basic blockbs- the store being addedaddBlockToWorklist- whether the basic blockbshould 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:AnalysisRuns the analysis again within the block ofnodeand returns the store at the location ofnode. Ifbeforeis true, then the store immediately before theNodenodeis returned. Otherwise, the store immediately afternodeis returned. IfanalysisCachesis not null, this method uses a cache.analysisCachesis a map of a block of node to the cached analysis result. If the cache fortransferInputis 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:
runAnalysisForin 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 beforenodeor the store afternodeblockTransferInput- 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
-