diff --git a/llvm/include/llvm/Analysis/CGSCCPassManager.h b/llvm/include/llvm/Analysis/CGSCCPassManager.h --- a/llvm/include/llvm/Analysis/CGSCCPassManager.h +++ b/llvm/include/llvm/Analysis/CGSCCPassManager.h @@ -373,12 +373,12 @@ /// templated adaptor. template ModuleToPostOrderCGSCCPassAdaptor -createModuleToPostOrderCGSCCPassAdaptor(CGSCCPassT Pass) { +createModuleToPostOrderCGSCCPassAdaptor(CGSCCPassT &&Pass) { using PassModelT = detail::PassModel; return ModuleToPostOrderCGSCCPassAdaptor( - std::make_unique(std::move(Pass))); + std::make_unique(std::forward(Pass))); } /// A proxy from a \c FunctionAnalysisManager to an \c SCC. @@ -491,12 +491,12 @@ /// templated adaptor. template CGSCCToFunctionPassAdaptor -createCGSCCToFunctionPassAdaptor(FunctionPassT Pass) { +createCGSCCToFunctionPassAdaptor(FunctionPassT &&Pass) { using PassModelT = detail::PassModel; return CGSCCToFunctionPassAdaptor( - std::make_unique(std::move(Pass))); + std::make_unique(std::forward(Pass))); } /// A helper that repeats an SCC pass each time an indirect call is refined to @@ -536,13 +536,14 @@ /// A function to deduce a function pass type and wrap it in the /// templated adaptor. template -DevirtSCCRepeatedPass createDevirtSCCRepeatedPass(CGSCCPassT Pass, +DevirtSCCRepeatedPass createDevirtSCCRepeatedPass(CGSCCPassT &&Pass, int MaxIterations) { using PassModelT = detail::PassModel; - return DevirtSCCRepeatedPass(std::make_unique(std::move(Pass)), - MaxIterations); + return DevirtSCCRepeatedPass( + std::make_unique(std::forward(Pass)), + MaxIterations); } // Clear out the debug logging macro. diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h --- a/llvm/include/llvm/IR/PassManager.h +++ b/llvm/include/llvm/IR/PassManager.h @@ -539,12 +539,12 @@ template std::enable_if_t::value> - addPass(PassT Pass) { + addPass(PassT &&Pass) { using PassModelT = detail::PassModel; - Passes.emplace_back(new PassModelT(std::move(Pass))); + Passes.emplace_back(new PassModelT(std::forward(Pass))); } /// When adding a pass manager pass that has the same type as this pass @@ -1206,13 +1206,13 @@ /// templated adaptor. template ModuleToFunctionPassAdaptor -createModuleToFunctionPassAdaptor(FunctionPassT Pass) { +createModuleToFunctionPassAdaptor(FunctionPassT &&Pass) { using PassModelT = detail::PassModel; return ModuleToFunctionPassAdaptor( - std::make_unique(std::move(Pass))); + std::make_unique(std::forward(Pass))); } /// A utility pass template to force an analysis result to be available. @@ -1284,7 +1284,8 @@ template class RepeatedPass : public PassInfoMixin> { public: - RepeatedPass(int Count, PassT P) : Count(Count), P(std::move(P)) {} + RepeatedPass(int Count, PassT &&P) + : Count(Count), P(std::forward(P)) {} template PreservedAnalyses run(IRUnitT &IR, AnalysisManagerT &AM, Ts &&... Args) { @@ -1317,8 +1318,8 @@ }; template -RepeatedPass createRepeatedPass(int Count, PassT P) { - return RepeatedPass(Count, std::move(P)); +RepeatedPass createRepeatedPass(int Count, PassT &&P) { + return RepeatedPass(Count, std::forward(P)); } } // end namespace llvm diff --git a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h --- a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h +++ b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h @@ -102,23 +102,24 @@ /// passes in the pass manager later. template std::enable_if_t::value> - addPass(PassT Pass) { + addPass(PassT &&Pass) { using LoopPassModelT = detail::PassModel; IsLoopNestPass.push_back(false); - LoopPasses.emplace_back(new LoopPassModelT(std::move(Pass))); + LoopPasses.emplace_back(new LoopPassModelT(std::forward(Pass))); } template std::enable_if_t::value> - addPass(PassT Pass) { + addPass(PassT &&Pass) { using LoopNestPassModelT = detail::PassModel; IsLoopNestPass.push_back(true); - LoopNestPasses.emplace_back(new LoopNestPassModelT(std::move(Pass))); + LoopNestPasses.emplace_back( + new LoopNestPassModelT(std::forward(Pass))); } // Specializations of `addPass` for `RepeatedPass`. These are necessary since @@ -126,7 +127,7 @@ // detection of `HasRunOnLoopT`. template std::enable_if_t::value> - addPass(RepeatedPass Pass) { + addPass(RepeatedPass &&Pass) { using RepeatedLoopPassModelT = detail::PassModel, PreservedAnalyses, LoopAnalysisManager, LoopStandardAnalysisResults &, @@ -137,7 +138,7 @@ template std::enable_if_t::value> - addPass(RepeatedPass Pass) { + addPass(RepeatedPass &&Pass) { using RepeatedLoopNestPassModelT = detail::PassModel, PreservedAnalyses, LoopAnalysisManager, LoopStandardAnalysisResults &, @@ -445,13 +446,13 @@ template inline std::enable_if_t::value, FunctionToLoopPassAdaptor> -createFunctionToLoopPassAdaptor(LoopPassT Pass, bool UseMemorySSA = false, +createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false, bool UseBlockFrequencyInfo = false) { using PassModelT = detail::PassModel; return FunctionToLoopPassAdaptor( - std::make_unique(std::move(Pass)), UseMemorySSA, + std::make_unique(std::forward(Pass)), UseMemorySSA, UseBlockFrequencyInfo, false); } @@ -460,10 +461,10 @@ template inline std::enable_if_t::value, FunctionToLoopPassAdaptor> -createFunctionToLoopPassAdaptor(LoopNestPassT Pass, bool UseMemorySSA = false, +createFunctionToLoopPassAdaptor(LoopNestPassT &&Pass, bool UseMemorySSA = false, bool UseBlockFrequencyInfo = false) { LoopPassManager LPM; - LPM.addPass(std::move(Pass)); + LPM.addPass(std::forward(Pass)); using PassModelT = detail::PassModel inline FunctionToLoopPassAdaptor -createFunctionToLoopPassAdaptor(LoopPassManager LPM, +createFunctionToLoopPassAdaptor(LoopPassManager &&LPM, bool UseMemorySSA, bool UseBlockFrequencyInfo) { // Check if LPM contains any loop pass and if it does not, returns an adaptor