diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp | 67 |
1 files changed, 23 insertions, 44 deletions
diff --git a/contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp b/contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp index 9e5ec55..3d6fc03 100644 --- a/contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp +++ b/contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp @@ -37,7 +37,6 @@ public: POV(Ctx.getAnalysis<PostOrderCFGView>()) {} void enqueueBlock(const CFGBlock *block); - void enqueueSuccessors(const CFGBlock *block); void enqueuePredecessors(const CFGBlock *block); const CFGBlock *dequeue(); @@ -53,19 +52,6 @@ void DataflowWorklist::enqueueBlock(const clang::CFGBlock *block) { worklist.push_back(block); } } - -void DataflowWorklist::enqueueSuccessors(const clang::CFGBlock *block) { - const unsigned OldWorklistSize = worklist.size(); - for (CFGBlock::const_succ_iterator I = block->succ_begin(), - E = block->succ_end(); I != E; ++I) { - enqueueBlock(*I); - } - - if (OldWorklistSize == 0 || OldWorklistSize == worklist.size()) - return; - - sortWorklist(); -} void DataflowWorklist::enqueuePredecessors(const clang::CFGBlock *block) { const unsigned OldWorklistSize = worklist.size(); @@ -86,7 +72,7 @@ void DataflowWorklist::sortWorklist() { const CFGBlock *DataflowWorklist::dequeue() { if (worklist.empty()) - return 0; + return nullptr; const CFGBlock *b = worklist.pop_back_val(); enqueuedBlocks[b->getBlockID()] = false; return b; @@ -108,10 +94,10 @@ public: LiveVariables::LivenessValues merge(LiveVariables::LivenessValues valsA, LiveVariables::LivenessValues valsB); - - LiveVariables::LivenessValues runOnBlock(const CFGBlock *block, - LiveVariables::LivenessValues val, - LiveVariables::Observer *obs = 0); + + LiveVariables::LivenessValues + runOnBlock(const CFGBlock *block, LiveVariables::LivenessValues val, + LiveVariables::Observer *obs = nullptr); void dumpBlockLiveness(const SourceManager& M); @@ -238,8 +224,8 @@ static const VariableArrayType *FindVA(QualType Ty) { ty = VT->getElementType().getTypePtr(); } - - return 0; + + return nullptr; } static const Stmt *LookThroughStmt(const Stmt *S) { @@ -305,7 +291,7 @@ void TransferFunctions::Visit(Stmt *S) { const DeclStmt *DS = cast<DeclStmt>(S); if (const VarDecl *VD = dyn_cast<VarDecl>(DS->getSingleDecl())) { for (const VariableArrayType* VA = FindVA(VD->getType()); - VA != 0; VA = FindVA(VA->getElementType())) { + VA != nullptr; VA = FindVA(VA->getElementType())) { AddLiveStmt(val.liveStmts, LV.SSetFact, VA->getSizeExpr()); } } @@ -372,7 +358,7 @@ void TransferFunctions::VisitBinaryOperator(BinaryOperator *B) { void TransferFunctions::VisitBlockExpr(BlockExpr *BE) { AnalysisDeclContext::referenced_decls_iterator I, E; - llvm::tie(I, E) = + std::tie(I, E) = LV.analysisContext.getReferencedBlockVars(BE->getBlockDecl()); for ( ; I != E ; ++I) { const VarDecl *VD = *I; @@ -389,9 +375,8 @@ void TransferFunctions::VisitDeclRefExpr(DeclRefExpr *DR) { } void TransferFunctions::VisitDeclStmt(DeclStmt *DS) { - for (DeclStmt::decl_iterator DI=DS->decl_begin(), DE = DS->decl_end(); - DI != DE; ++DI) - if (VarDecl *VD = dyn_cast<VarDecl>(*DI)) { + for (const auto *DI : DS->decls()) + if (const auto *VD = dyn_cast<VarDecl>(DI)) { if (!isAlwaysAlive(VD)) val.liveDecls = LV.DSetFact.remove(val.liveDecls, VD); } @@ -399,8 +384,8 @@ void TransferFunctions::VisitDeclStmt(DeclStmt *DS) { void TransferFunctions::VisitObjCForCollectionStmt(ObjCForCollectionStmt *OS) { // Kill the iteration variable. - DeclRefExpr *DR = 0; - const VarDecl *VD = 0; + DeclRefExpr *DR = nullptr; + const VarDecl *VD = nullptr; Stmt *element = OS->getElement(); if (DeclStmt *DS = dyn_cast<DeclStmt>(element)) { @@ -508,12 +493,12 @@ LiveVariables::computeLiveness(AnalysisDeclContext &AC, // No CFG? Bail out. CFG *cfg = AC.getCFG(); if (!cfg) - return 0; + return nullptr; // The analysis currently has scalability issues for very large CFGs. // Bail out if it looks too large. if (cfg->getNumBlockIDs() > 300000) - return 0; + return nullptr; LiveVariablesImpl *LV = new LiveVariablesImpl(AC, killAtAssign); @@ -581,16 +566,6 @@ LiveVariables::computeLiveness(AnalysisDeclContext &AC, return new LiveVariables(LV); } -static bool compare_entries(const CFGBlock *A, const CFGBlock *B) { - return A->getBlockID() < B->getBlockID(); -} - -static bool compare_vd_entries(const Decl *A, const Decl *B) { - SourceLocation ALoc = A->getLocStart(); - SourceLocation BLoc = B->getLocStart(); - return ALoc.getRawEncoding() < BLoc.getRawEncoding(); -} - void LiveVariables::dumpBlockLiveness(const SourceManager &M) { getImpl(impl).dumpBlockLiveness(M); } @@ -602,7 +577,9 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) { it != ei; ++it) { vec.push_back(it->first); } - std::sort(vec.begin(), vec.end(), compare_entries); + std::sort(vec.begin(), vec.end(), [](const CFGBlock *A, const CFGBlock *B) { + return A->getBlockID() < B->getBlockID(); + }); std::vector<const VarDecl*> declVec; @@ -619,9 +596,11 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) { se = vals.liveDecls.end(); si != se; ++si) { declVec.push_back(*si); } - - std::sort(declVec.begin(), declVec.end(), compare_vd_entries); - + + std::sort(declVec.begin(), declVec.end(), [](const Decl *A, const Decl *B) { + return A->getLocStart() < B->getLocStart(); + }); + for (std::vector<const VarDecl*>::iterator di = declVec.begin(), de = declVec.end(); di != de; ++di) { llvm::errs() << " " << (*di)->getDeclName().getAsString() |