summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-09-18 18:17:19 +0000
committerTed Kremenek <kremenek@apple.com>2007-09-18 18:17:19 +0000
commitdf9a2a9f8b058ea91930cd44784d5fa572d5e18a (patch)
tree616bb0cb3e4b145298c3301d9ede4ab94611419d
parentdc88c06732b7b85c619caf0b7e29f8f4f86a9227 (diff)
downloadbcm5719-llvm-df9a2a9f8b058ea91930cd44784d5fa572d5e18a.tar.gz
bcm5719-llvm-df9a2a9f8b058ea91930cd44784d5fa572d5e18a.zip
Moved TransferFunction object within DataflowSolver to be a instance
variable instead of a temporary. llvm-svn: 42102
-rw-r--r--clang/Analysis/DataflowSolver.h28
1 files changed, 10 insertions, 18 deletions
diff --git a/clang/Analysis/DataflowSolver.h b/clang/Analysis/DataflowSolver.h
index e2c4f16a519..724b4a4fbb9 100644
--- a/clang/Analysis/DataflowSolver.h
+++ b/clang/Analysis/DataflowSolver.h
@@ -68,7 +68,7 @@ public:
//===--------------------------------------------------------------------===//
public:
- DataflowSolver(DFValuesTy& d) : D(d) {}
+ DataflowSolver(DFValuesTy& d) : D(d), TF(d.getAnalysisData()) {}
~DataflowSolver() {}
/// runOnCFG - Computes dataflow values for all blocks in a CFG.
@@ -86,11 +86,8 @@ public:
/// only be used for querying the dataflow values within a block with
/// and Observer object.
void runOnBlock(const CFGBlock* B) {
- if (!hasData(B,AnalysisDirTag()))
- return;
-
- TransferFuncsTy TF (D.getAnalysisData());
- ProcessBlock(B,TF,AnalysisDirTag());
+ if (hasData(B,AnalysisDirTag()))
+ ProcessBlock(B,AnalysisDirTag());
}
//===--------------------------------------------------------------------===//
@@ -105,16 +102,13 @@ private:
EnqueueFirstBlock(cfg,AnalysisDirTag());
- // Create the state for transfer functions.
- TransferFuncsTy TF(D.getAnalysisData());
-
// Process the worklist until it is empty.
while (!WorkList.isEmpty()) {
const CFGBlock* B = WorkList.dequeue();
// If the dataflow values at the block's entry have changed,
// enqueue all predecessor blocks onto the worklist to have
// their values updated.
- ProcessBlock(B,TF,AnalysisDirTag());
+ ProcessBlock(B,AnalysisDirTag());
UpdateEdges(B,TF.getVal(),AnalysisDirTag());
}
}
@@ -129,12 +123,10 @@ private:
/// ProcessBlock (FORWARD ANALYSIS) - Process the transfer functions
/// for a given block based on a forward analysis.
- void ProcessBlock(const CFGBlock* B, TransferFuncsTy& TF,
- dataflow::forward_analysis_tag) {
-
- ValTy& V = TF.getVal();
-
+ void ProcessBlock(const CFGBlock* B, dataflow::forward_analysis_tag) {
+
// Merge dataflow values from all predecessors of this block.
+ ValTy& V = TF.getVal();
V.resetValues(D.getAnalysisData());
MergeOperatorTy Merge;
@@ -163,10 +155,9 @@ private:
/// for a given block based on a forward analysis.
void ProcessBlock(const CFGBlock* B, TransferFuncsTy& TF,
dataflow::backward_analysis_tag) {
-
- ValTy& V = TF.getVal();
-
+
// Merge dataflow values from all predecessors of this block.
+ ValTy& V = TF.getVal();
V.resetValues(D.getAnalysisData());
MergeOperatorTy Merge;
@@ -263,6 +254,7 @@ private:
private:
DFValuesTy& D;
DataflowWorkListTy WorkList;
+ TransferFuncsTy TF;
};
OpenPOWER on IntegriCloud