diff --git a/include/llvm/IR/PassManager.h b/include/llvm/IR/PassManager.h index 09eb10b8464..93d04344f8c 100644 --- a/include/llvm/IR/PassManager.h +++ b/include/llvm/IR/PassManager.h @@ -481,15 +481,15 @@ public: /// /// If there is not a valid cached result in the manager already, this will /// re-run the analysis to produce a valid result. - template const typename PassT::Result &getResult(IRUnitT IR) { + template typename PassT::Result &getResult(IRUnitT IR) { assert(AnalysisPasses.count(PassT::ID()) && "This analysis pass was not registered prior to being queried"); - const ResultConceptT &ResultConcept = + ResultConceptT &ResultConcept = derived_this()->getResultImpl(PassT::ID(), IR); typedef detail::AnalysisResultModel ResultModelT; - return static_cast(ResultConcept).Result; + return static_cast(ResultConcept).Result; } /// \brief Get the cached result of an analysis pass for this module. @@ -498,18 +498,18 @@ public: /// /// \returns null if there is no cached result. template - const typename PassT::Result *getCachedResult(IRUnitT IR) const { + typename PassT::Result *getCachedResult(IRUnitT IR) const { assert(AnalysisPasses.count(PassT::ID()) && "This analysis pass was not registered prior to being queried"); - const ResultConceptT *ResultConcept = + ResultConceptT *ResultConcept = derived_this()->getCachedResultImpl(PassT::ID(), IR); if (!ResultConcept) return 0; typedef detail::AnalysisResultModel ResultModelT; - return &static_cast(ResultConcept)->Result; + return &static_cast(ResultConcept)->Result; } /// \brief Register an analysis pass with the manager. @@ -582,10 +582,10 @@ public: private: /// \brief Get a module pass result, running the pass if necessary. - const ResultConceptT &getResultImpl(void *PassID, Module *M); + ResultConceptT &getResultImpl(void *PassID, Module *M); /// \brief Get a cached module pass result or return null. - const ResultConceptT *getCachedResultImpl(void *PassID, Module *M) const; + ResultConceptT *getCachedResultImpl(void *PassID, Module *M) const; /// \brief Invalidate a module pass result. void invalidateImpl(void *PassID, Module *M); @@ -627,10 +627,10 @@ public: private: /// \brief Get a function pass result, running the pass if necessary. - const ResultConceptT &getResultImpl(void *PassID, Function *F); + ResultConceptT &getResultImpl(void *PassID, Function *F); /// \brief Get a cached function pass result or return null. - const ResultConceptT *getCachedResultImpl(void *PassID, Function *F) const; + ResultConceptT *getCachedResultImpl(void *PassID, Function *F) const; /// \brief Invalidate a function pass result. void invalidateImpl(void *PassID, Function *F); @@ -711,7 +711,7 @@ public: ~Result(); /// \brief Accessor for the \c FunctionAnalysisManager. - FunctionAnalysisManager &getManager() const { return FAM; } + FunctionAnalysisManager &getManager() { return FAM; } /// \brief Handler for invalidation of the module. /// diff --git a/lib/IR/PassManager.cpp b/lib/IR/PassManager.cpp index 70533fef587..dbc27cbc504 100644 --- a/lib/IR/PassManager.cpp +++ b/lib/IR/PassManager.cpp @@ -40,7 +40,7 @@ PreservedAnalyses ModulePassManager::run(Module *M, ModuleAnalysisManager *AM) { return PA; } -const ModuleAnalysisManager::ResultConceptT & +ModuleAnalysisManager::ResultConceptT & ModuleAnalysisManager::getResultImpl(void *PassID, Module *M) { ModuleAnalysisResultMapT::iterator RI; bool Inserted; @@ -55,7 +55,7 @@ ModuleAnalysisManager::getResultImpl(void *PassID, Module *M) { return *RI->second; } -const ModuleAnalysisManager::ResultConceptT * +ModuleAnalysisManager::ResultConceptT * ModuleAnalysisManager::getCachedResultImpl(void *PassID, Module *M) const { ModuleAnalysisResultMapT::const_iterator RI = ModuleAnalysisResults.find(PassID); return RI == ModuleAnalysisResults.end() ? 0 : &*RI->second; @@ -111,7 +111,7 @@ void FunctionAnalysisManager::clear() { FunctionAnalysisResultLists.clear(); } -const FunctionAnalysisManager::ResultConceptT & +FunctionAnalysisManager::ResultConceptT & FunctionAnalysisManager::getResultImpl(void *PassID, Function *F) { FunctionAnalysisResultMapT::iterator RI; bool Inserted; @@ -129,7 +129,7 @@ FunctionAnalysisManager::getResultImpl(void *PassID, Function *F) { return *RI->second->second; } -const FunctionAnalysisManager::ResultConceptT * +FunctionAnalysisManager::ResultConceptT * FunctionAnalysisManager::getCachedResultImpl(void *PassID, Function *F) const { FunctionAnalysisResultMapT::const_iterator RI = FunctionAnalysisResults.find(std::make_pair(PassID, F)); diff --git a/unittests/IR/PassManagerTest.cpp b/unittests/IR/PassManagerTest.cpp index 7b2b46a934e..ee1deff8df6 100644 --- a/unittests/IR/PassManagerTest.cpp +++ b/unittests/IR/PassManagerTest.cpp @@ -126,18 +126,18 @@ struct TestFunctionPass { const ModuleAnalysisManager &MAM = AM->getResult(F).getManager(); - if (const TestModuleAnalysis::Result *TMA = + if (TestModuleAnalysis::Result *TMA = MAM.getCachedResult(F->getParent())) AnalyzedFunctionCount += TMA->FunctionCount; if (OnlyUseCachedResults) { // Hack to force the use of the cached interface. - if (const TestFunctionAnalysis::Result *AR = + if (TestFunctionAnalysis::Result *AR = AM->getCachedResult(F)) AnalyzedInstrCount += AR->InstructionCount; } else { // Typical path just runs the analysis as needed. - const TestFunctionAnalysis::Result &AR = AM->getResult(F); + TestFunctionAnalysis::Result &AR = AM->getResult(F); AnalyzedInstrCount += AR.InstructionCount; }