summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/LiveVariables.cpp
diff options
context:
space:
mode:
authorArtyom Skrobov <Artyom.Skrobov@arm.com>2014-07-28 08:47:38 +0000
committerArtyom Skrobov <Artyom.Skrobov@arm.com>2014-07-28 08:47:38 +0000
commit12ce6d91a1b1acde9762c82e206343c1fef1d4a5 (patch)
tree15888f899179bdf9a8cac06c2534658cf380af9e /clang/lib/Analysis/LiveVariables.cpp
parent2d9e0b782ccde280a04594808b991c5b9c6d9e83 (diff)
downloadbcm5719-llvm-12ce6d91a1b1acde9762c82e206343c1fef1d4a5.tar.gz
bcm5719-llvm-12ce6d91a1b1acde9762c82e206343c1fef1d4a5.zip
Factoring DataflowWorklist out of LiveVariables and UninitializedValues analyses
llvm-svn: 214064
Diffstat (limited to 'clang/lib/Analysis/LiveVariables.cpp')
-rw-r--r--clang/lib/Analysis/LiveVariables.cpp56
1 files changed, 1 insertions, 55 deletions
diff --git a/clang/lib/Analysis/LiveVariables.cpp b/clang/lib/Analysis/LiveVariables.cpp
index 3d6fc039fd7..dcde5e7619f 100644
--- a/clang/lib/Analysis/LiveVariables.cpp
+++ b/clang/lib/Analysis/LiveVariables.cpp
@@ -14,11 +14,10 @@
#include "clang/Analysis/Analyses/LiveVariables.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtVisitor.h"
-#include "clang/Analysis/Analyses/PostOrderCFGView.h"
+#include "clang/Analysis/Analyses/DataflowWorklist.h"
#include "clang/Analysis/AnalysisContext.h"
#include "clang/Analysis/CFG.h"
#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <vector>
@@ -26,59 +25,6 @@
using namespace clang;
namespace {
-
-class DataflowWorklist {
- SmallVector<const CFGBlock *, 20> worklist;
- llvm::BitVector enqueuedBlocks;
- PostOrderCFGView *POV;
-public:
- DataflowWorklist(const CFG &cfg, AnalysisDeclContext &Ctx)
- : enqueuedBlocks(cfg.getNumBlockIDs()),
- POV(Ctx.getAnalysis<PostOrderCFGView>()) {}
-
- void enqueueBlock(const CFGBlock *block);
- void enqueuePredecessors(const CFGBlock *block);
-
- const CFGBlock *dequeue();
-
- void sortWorklist();
-};
-
-}
-
-void DataflowWorklist::enqueueBlock(const clang::CFGBlock *block) {
- if (block && !enqueuedBlocks[block->getBlockID()]) {
- enqueuedBlocks[block->getBlockID()] = true;
- worklist.push_back(block);
- }
-}
-
-void DataflowWorklist::enqueuePredecessors(const clang::CFGBlock *block) {
- const unsigned OldWorklistSize = worklist.size();
- for (CFGBlock::const_pred_iterator I = block->pred_begin(),
- E = block->pred_end(); I != E; ++I) {
- enqueueBlock(*I);
- }
-
- if (OldWorklistSize == 0 || OldWorklistSize == worklist.size())
- return;
-
- sortWorklist();
-}
-
-void DataflowWorklist::sortWorklist() {
- std::sort(worklist.begin(), worklist.end(), POV->getComparator());
-}
-
-const CFGBlock *DataflowWorklist::dequeue() {
- if (worklist.empty())
- return nullptr;
- const CFGBlock *b = worklist.pop_back_val();
- enqueuedBlocks[b->getBlockID()] = false;
- return b;
-}
-
-namespace {
class LiveVariablesImpl {
public:
AnalysisDeclContext &analysisContext;
OpenPOWER on IntegriCloud