X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FIR%2FPassManager.h;h=2ceb53d21b7a91ed2a1fa4e90ade26a400286e1b;hb=83fc76e8ebb4a81ff3142035d29275e60afa3ada;hp=a57a5020b8d4c27a075740770cb54338c94f4b6f;hpb=b3f3d8975122cdd4222041439ac8771a912a6e38;p=oota-llvm.git diff --git a/include/llvm/IR/PassManager.h b/include/llvm/IR/PassManager.h index a57a5020b8d..2ceb53d21b7 100644 --- a/include/llvm/IR/PassManager.h +++ b/include/llvm/IR/PassManager.h @@ -46,6 +46,7 @@ #include "llvm/IR/PassManagerInternal.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Support/type_traits.h" #include #include @@ -202,7 +203,8 @@ public: for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { if (DebugLogging) - dbgs() << "Running pass: " << Passes[Idx]->name() << "\n"; + dbgs() << "Running pass: " << Passes[Idx]->name() << " on " + << IR.getName() << "\n"; PreservedAnalyses PassPA = Passes[Idx]->run(IR, AM); @@ -241,8 +243,8 @@ public: private: typedef detail::PassConcept PassConceptT; - PassManager(const PassManager &) LLVM_DELETED_FUNCTION; - PassManager &operator=(const PassManager &) LLVM_DELETED_FUNCTION; + PassManager(const PassManager &) = delete; + PassManager &operator=(const PassManager &) = delete; std::vector> Passes; @@ -281,9 +283,9 @@ template class AnalysisManagerBase { return static_cast(this); } - AnalysisManagerBase(const AnalysisManagerBase &) LLVM_DELETED_FUNCTION; + AnalysisManagerBase(const AnalysisManagerBase &) = delete; AnalysisManagerBase & - operator=(const AnalysisManagerBase &) LLVM_DELETED_FUNCTION; + operator=(const AnalysisManagerBase &) = delete; protected: typedef detail::AnalysisResultConcept ResultConceptT; @@ -453,8 +455,8 @@ public: } private: - AnalysisManager(const AnalysisManager &) LLVM_DELETED_FUNCTION; - AnalysisManager &operator=(const AnalysisManager &) LLVM_DELETED_FUNCTION; + AnalysisManager(const AnalysisManager &) = delete; + AnalysisManager &operator=(const AnalysisManager &) = delete; /// \brief Get an analysis result, running the pass if necessary. ResultConceptT &getResultImpl(void *PassID, IRUnitT &IR) { @@ -471,6 +473,12 @@ private: dbgs() << "Running analysis: " << P.name() << "\n"; AnalysisResultListT &ResultList = AnalysisResultLists[&IR]; ResultList.emplace_back(PassID, P.run(IR, this)); + + // P.run may have inserted elements into AnalysisResults and invalidated + // RI. + RI = AnalysisResults.find(std::make_pair(PassID, &IR)); + assert(RI != AnalysisResults.end() && "we just inserted it!"); + RI->second = std::prev(ResultList.end()); } @@ -502,7 +510,7 @@ private: PreservedAnalyses invalidateImpl(IRUnitT &IR, PreservedAnalyses PA) { // Short circuit for a common case of all analyses being preserved. if (PA.areAllPreserved()) - return std::move(PA); + return PA; if (DebugLogging) dbgs() << "Invalidating all non-preserved analyses for: " @@ -542,7 +550,7 @@ private: if (ResultsList.empty()) AnalysisResultLists.erase(&IR); - return std::move(PA); + return PA; } /// \brief List of function analysis pass IDs and associated concept pointers. @@ -783,6 +791,9 @@ public: PreservedAnalyses PA = PreservedAnalyses::all(); for (Function &F : M) { + if (F.isDeclaration()) + continue; + PreservedAnalyses PassPA = Pass.run(F, FAM); // We know that the function pass couldn't have invalidated any other @@ -817,7 +828,7 @@ private: template ModuleToFunctionPassAdaptor createModuleToFunctionPassAdaptor(FunctionPassT Pass) { - return std::move(ModuleToFunctionPassAdaptor(std::move(Pass))); + return ModuleToFunctionPassAdaptor(std::move(Pass)); } /// \brief A template utility pass to force an analysis result to be available.