diff options
author | Artyom Skrobov <Artyom.Skrobov@arm.com> | 2014-07-28 08:47:38 +0000 |
---|---|---|
committer | Artyom Skrobov <Artyom.Skrobov@arm.com> | 2014-07-28 08:47:38 +0000 |
commit | 12ce6d91a1b1acde9762c82e206343c1fef1d4a5 (patch) | |
tree | 15888f899179bdf9a8cac06c2534658cf380af9e /clang/lib/Analysis/LiveVariables.cpp | |
parent | 2d9e0b782ccde280a04594808b991c5b9c6d9e83 (diff) | |
download | bcm5719-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.cpp | 56 |
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; |