diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Analysis/CGSCCPassManager.h | 46 | ||||
-rw-r--r-- | llvm/include/llvm/IR/PassManager.h | 159 | ||||
-rw-r--r-- | llvm/lib/Analysis/CGSCCPassManager.cpp | 32 | ||||
-rw-r--r-- | llvm/lib/IR/PassManager.cpp | 67 | ||||
-rw-r--r-- | llvm/test/Other/new-pass-manager.ll | 206 | ||||
-rw-r--r-- | llvm/test/Other/pass-pipeline-parsing.ll | 123 |
6 files changed, 243 insertions, 390 deletions
diff --git a/llvm/include/llvm/Analysis/CGSCCPassManager.h b/llvm/include/llvm/Analysis/CGSCCPassManager.h index c938a9c6f54..92fbb58f795 100644 --- a/llvm/include/llvm/Analysis/CGSCCPassManager.h +++ b/llvm/include/llvm/Analysis/CGSCCPassManager.h @@ -26,6 +26,13 @@ namespace llvm { +/// \brief The CGSCC pass manager. +/// +/// See the documentation for the PassManager template for details. It runs +/// a sequency of SCC passes over each SCC that the manager is run over. This +/// typedef serves as a convenient way to refer to this construct. +typedef PassManager<LazyCallGraph::SCC> CGSCCPassManager; + /// \brief The CGSCC analysis manager. /// /// See the documentation for the AnalysisManager template for detail @@ -34,45 +41,6 @@ namespace llvm { /// pass manager infrastructure. typedef AnalysisManager<LazyCallGraph::SCC> CGSCCAnalysisManager; -class CGSCCPassManager { -public: - // We have to explicitly define all the special member functions because MSVC - // refuses to generate them. - CGSCCPassManager() {} - CGSCCPassManager(CGSCCPassManager &&Arg) : Passes(std::move(Arg.Passes)) {} - CGSCCPassManager &operator=(CGSCCPassManager &&RHS) { - Passes = std::move(RHS.Passes); - return *this; - } - - /// \brief Run all of the CGSCC passes in this pass manager over a SCC. - PreservedAnalyses run(LazyCallGraph::SCC &C, - CGSCCAnalysisManager *AM = nullptr); - - template <typename CGSCCPassT> void addPass(CGSCCPassT Pass) { - Passes.emplace_back(new CGSCCPassModel<CGSCCPassT>(std::move(Pass))); - } - - static StringRef name() { return "CGSCCPassManager"; } - -private: - // Pull in the concept type and model template specialized for SCCs. - typedef detail::PassConcept<LazyCallGraph::SCC, CGSCCAnalysisManager> - CGSCCPassConcept; - template <typename PassT> - struct CGSCCPassModel - : detail::PassModel<LazyCallGraph::SCC, CGSCCAnalysisManager, PassT> { - CGSCCPassModel(PassT Pass) - : detail::PassModel<LazyCallGraph::SCC, CGSCCAnalysisManager, PassT>( - std::move(Pass)) {} - }; - - CGSCCPassManager(const CGSCCPassManager &) LLVM_DELETED_FUNCTION; - CGSCCPassManager &operator=(const CGSCCPassManager &) LLVM_DELETED_FUNCTION; - - std::vector<std::unique_ptr<CGSCCPassConcept>> Passes; -}; - /// \brief A module analysis which acts as a proxy for a CGSCC analysis /// manager. /// diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h index 550823fa2e5..70618c53ac5 100644 --- a/llvm/include/llvm/IR/PassManager.h +++ b/llvm/include/llvm/IR/PassManager.h @@ -175,124 +175,95 @@ template <typename IRUnitT> class AnalysisManager; typedef AnalysisManager<Module> ModuleAnalysisManager; typedef AnalysisManager<Function> FunctionAnalysisManager; -/// \brief Manages a sequence of passes over Modules of IR. +/// \brief Manages a sequence of passes over units of IR. /// -/// A module pass manager contains a sequence of module passes. It is also -/// itself a module pass. When it is run over a module of LLVM IR, it will -/// sequentially run each pass it contains over that module. +/// A pass manager contains a sequence of passes to run over units of IR. It is +/// itself a valid pass over that unit of IR, and when over some given IR will +/// run each pass in sequence. This is the primary and most basic building +/// block of a pass pipeline. /// -/// If it is run with a \c ModuleAnalysisManager argument, it will propagate +/// If it is run with an \c AnalysisManager<IRUnitT> argument, it will propagate /// that analysis manager to each pass it runs, as well as calling the analysis /// manager's invalidation routine with the PreservedAnalyses of each pass it /// runs. -/// -/// Module passes can rely on having exclusive access to the module they are -/// run over. No other threads will access that module, and they can mutate it -/// freely. However, they must not mutate other LLVM IR modules. -class ModulePassManager { +template <typename IRUnitT> class PassManager { public: // We have to explicitly define all the special member functions because MSVC // refuses to generate them. - ModulePassManager() {} - ModulePassManager(ModulePassManager &&Arg) : Passes(std::move(Arg.Passes)) {} - ModulePassManager &operator=(ModulePassManager &&RHS) { + PassManager() {} + PassManager(PassManager &&Arg) : Passes(std::move(Arg.Passes)) {} + PassManager &operator=(PassManager &&RHS) { Passes = std::move(RHS.Passes); return *this; } - /// \brief Run all of the module passes in this module pass manager over - /// a module. - /// - /// This method should only be called for a single module as there is the - /// expectation that the lifetime of a pass is bounded to that of a module. - PreservedAnalyses run(Module &M, ModuleAnalysisManager *AM = nullptr); + /// \brief Run all of the passes in this manager over the IR. + PreservedAnalyses run(IRUnitT &IR, AnalysisManager<IRUnitT> *AM = nullptr) { + PreservedAnalyses PA = PreservedAnalyses::all(); - template <typename ModulePassT> void addPass(ModulePassT Pass) { - Passes.emplace_back(new ModulePassModel<ModulePassT>(std::move(Pass))); - } + if (detail::DebugPM) + dbgs() << "Starting pass manager run.\n"; - static StringRef name() { return "ModulePassManager"; } + for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { + if (detail::DebugPM) + dbgs() << "Running pass: " << Passes[Idx]->name() << "\n"; -private: - // Pull in the concept type and model template specialized for modules. - typedef detail::PassConcept<Module, ModuleAnalysisManager> ModulePassConcept; - template <typename PassT> - struct ModulePassModel - : detail::PassModel<Module, ModuleAnalysisManager, PassT> { - ModulePassModel(PassT Pass) - : detail::PassModel<Module, ModuleAnalysisManager, PassT>( - std::move(Pass)) {} - }; + PreservedAnalyses PassPA = Passes[Idx]->run(IR, AM); - ModulePassManager(const ModulePassManager &) LLVM_DELETED_FUNCTION; - ModulePassManager &operator=(const ModulePassManager &) LLVM_DELETED_FUNCTION; + // If we have an active analysis manager at this level we want to ensure + // we update it as each pass runs and potentially invalidates analyses. + // We also update the preserved set of analyses based on what analyses we + // have already handled the invalidation for here and don't need to + // invalidate when finished. + if (AM) + PassPA = AM->invalidate(IR, std::move(PassPA)); - std::vector<std::unique_ptr<ModulePassConcept>> Passes; -}; + // Finally, we intersect the final preserved analyses to compute the + // aggregate preserved set for this pass manager. + PA.intersect(std::move(PassPA)); -/// \brief Manages a sequence of passes over a Function of IR. -/// -/// A function pass manager contains a sequence of function passes. It is also -/// itself a function pass. When it is run over a function of LLVM IR, it will -/// sequentially run each pass it contains over that function. -/// -/// If it is run with a \c FunctionAnalysisManager argument, it will propagate -/// that analysis manager to each pass it runs, as well as calling the analysis -/// manager's invalidation routine with the PreservedAnalyses of each pass it -/// runs. -/// -/// Function passes can rely on having exclusive access to the function they -/// are run over. They should not read or modify any other functions! Other -/// threads or systems may be manipulating other functions in the module, and -/// so their state should never be relied on. -/// FIXME: Make the above true for all of LLVM's actual passes, some still -/// violate this principle. -/// -/// Function passes can also read the module containing the function, but they -/// should not modify that module outside of the use lists of various globals. -/// For example, a function pass is not permitted to add functions to the -/// module. -/// FIXME: Make the above true for all of LLVM's actual passes, some still -/// violate this principle. -class FunctionPassManager { -public: - // We have to explicitly define all the special member functions because MSVC - // refuses to generate them. - FunctionPassManager() {} - FunctionPassManager(FunctionPassManager &&Arg) - : Passes(std::move(Arg.Passes)) {} - FunctionPassManager &operator=(FunctionPassManager &&RHS) { - Passes = std::move(RHS.Passes); - return *this; - } + // FIXME: Historically, the pass managers all called the LLVM context's + // yield function here. We don't have a generic way to acquire the + // context and it isn't yet clear what the right pattern is for yielding + // in the new pass manager so it is currently omitted. + //IR.getContext().yield(); + } + + if (detail::DebugPM) + dbgs() << "Finished pass manager run.\n"; - template <typename FunctionPassT> void addPass(FunctionPassT Pass) { - Passes.emplace_back(new FunctionPassModel<FunctionPassT>(std::move(Pass))); + return PA; } - PreservedAnalyses run(Function &F, FunctionAnalysisManager *AM = nullptr); + template <typename PassT> void addPass(PassT Pass) { + Passes.emplace_back(new PassModel<PassT>(std::move(Pass))); + } - static StringRef name() { return "FunctionPassManager"; } + static StringRef name() { return "PassManager"; } private: - // Pull in the concept type and model template specialized for functions. - typedef detail::PassConcept<Function, FunctionAnalysisManager> - FunctionPassConcept; + // Pull in the concept type and model template specialized for modules. + typedef detail::PassConcept<IRUnitT, AnalysisManager<IRUnitT>> PassConcept; template <typename PassT> - struct FunctionPassModel - : detail::PassModel<Function, FunctionAnalysisManager, PassT> { - FunctionPassModel(PassT Pass) - : detail::PassModel<Function, FunctionAnalysisManager, PassT>( + struct PassModel + : detail::PassModel<IRUnitT, AnalysisManager<IRUnitT>, PassT> { + PassModel(PassT Pass) + : detail::PassModel<IRUnitT, AnalysisManager<IRUnitT>, PassT>( std::move(Pass)) {} }; - FunctionPassManager(const FunctionPassManager &) LLVM_DELETED_FUNCTION; - FunctionPassManager & - operator=(const FunctionPassManager &) LLVM_DELETED_FUNCTION; + PassManager(const PassManager &) LLVM_DELETED_FUNCTION; + PassManager &operator=(const PassManager &) LLVM_DELETED_FUNCTION; - std::vector<std::unique_ptr<FunctionPassConcept>> Passes; + std::vector<std::unique_ptr<PassConcept>> Passes; }; +/// \brief Convenience typedef for a pass manager over modules. +typedef PassManager<Module> ModulePassManager; + +/// \brief Convenience typedef for a pass manager over functions. +typedef PassManager<Function> FunctionPassManager; + namespace detail { /// \brief A CRTP base used to implement analysis managers. @@ -761,6 +732,20 @@ private: /// \c FunctionAnalysisManagerModuleProxy analysis prior to running the function /// pass over the module to enable a \c FunctionAnalysisManager to be used /// within this run safely. +/// +/// Function passes run within this adaptor can rely on having exclusive access +/// to the function they are run over. They should not read or modify any other +/// functions! Other threads or systems may be manipulating other functions in +/// the module, and so their state should never be relied on. +/// FIXME: Make the above true for all of LLVM's actual passes, some still +/// violate this principle. +/// +/// Function passes can also read the module containing the function, but they +/// should not modify that module outside of the use lists of various globals. +/// For example, a function pass is not permitted to add functions to the +/// module. +/// FIXME: Make the above true for all of LLVM's actual passes, some still +/// violate this principle. template <typename FunctionPassT> class ModuleToFunctionPassAdaptor { public: explicit ModuleToFunctionPassAdaptor(FunctionPassT Pass) diff --git a/llvm/lib/Analysis/CGSCCPassManager.cpp b/llvm/lib/Analysis/CGSCCPassManager.cpp index 7e86d66a64c..659e37b4d62 100644 --- a/llvm/lib/Analysis/CGSCCPassManager.cpp +++ b/llvm/lib/Analysis/CGSCCPassManager.cpp @@ -17,38 +17,6 @@ static cl::opt<bool> DebugPM("debug-cgscc-pass-manager", cl::Hidden, cl::desc("Print CGSCC pass management debugging information")); -PreservedAnalyses CGSCCPassManager::run(LazyCallGraph::SCC &C, - CGSCCAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting CGSCC pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running CGSCC pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(C, AM); - - // If we have an active analysis manager at this level we want to ensure we - // update it as each pass runs and potentially invalidates analyses. We - // also update the preserved set of analyses based on what analyses we have - // already handled the invalidation for here and don't need to invalidate - // when finished. - if (AM) - PassPA = AM->invalidate(C, std::move(PassPA)); - - // Finally, we intersect the final preserved analyses to compute the - // aggregate preserved set for this pass manager. - PA.intersect(std::move(PassPA)); - } - - if (DebugPM) - dbgs() << "Finished CGSCC pass manager run.\n"; - - return PA; -} - char CGSCCAnalysisManagerModuleProxy::PassID; CGSCCAnalysisManagerModuleProxy::Result diff --git a/llvm/lib/IR/PassManager.cpp b/llvm/lib/IR/PassManager.cpp index 91533cc175a..3e6efb70260 100644 --- a/llvm/lib/IR/PassManager.cpp +++ b/llvm/lib/IR/PassManager.cpp @@ -18,73 +18,6 @@ cl::opt<bool> llvm::detail::DebugPM( "debug-pass-manager", cl::Hidden, cl::desc("Print pass management debugging information")); -PreservedAnalyses ModulePassManager::run(Module &M, ModuleAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting module pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running module pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(M, AM); - - // If we have an active analysis manager at this level we want to ensure we - // update it as each pass runs and potentially invalidates analyses. We - // also update the preserved set of analyses based on what analyses we have - // already handled the invalidation for here and don't need to invalidate - // when finished. - if (AM) - PassPA = AM->invalidate(M, std::move(PassPA)); - - // Finally, we intersect the final preserved analyses to compute the - // aggregate preserved set for this pass manager. - PA.intersect(std::move(PassPA)); - - M.getContext().yield(); - } - - if (DebugPM) - dbgs() << "Finished module pass manager run.\n"; - - return PA; -} - -PreservedAnalyses FunctionPassManager::run(Function &F, - FunctionAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting function pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running function pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(F, AM); - - // If we have an active analysis manager at this level we want to ensure we - // update it as each pass runs and potentially invalidates analyses. We - // also update the preserved set of analyses based on what analyses we have - // already handled the invalidation for here and don't need to invalidate - // when finished. - if (AM) - PassPA = AM->invalidate(F, std::move(PassPA)); - - // Finally, we intersect the final preserved analyses to compute the - // aggregate preserved set for this pass manager. - PA.intersect(std::move(PassPA)); - - F.getContext().yield(); - } - - if (DebugPM) - dbgs() << "Finished function pass manager run.\n"; - - return PA; -} - char FunctionAnalysisManagerModuleProxy::PassID; FunctionAnalysisManagerModuleProxy::Result diff --git a/llvm/test/Other/new-pass-manager.ll b/llvm/test/Other/new-pass-manager.ll index 18b4d5c1512..05792d56fa7 100644 --- a/llvm/test/Other/new-pass-manager.ll +++ b/llvm/test/Other/new-pass-manager.ll @@ -8,9 +8,9 @@ ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes=no-op-module %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-MODULE-PASS -; CHECK-MODULE-PASS: Starting module pass manager -; CHECK-MODULE-PASS-NEXT: Running module pass: NoOpModulePass -; CHECK-MODULE-PASS-NEXT: Finished module pass manager run. +; CHECK-MODULE-PASS: Starting pass manager +; CHECK-MODULE-PASS-NEXT: Running pass: NoOpModulePass +; CHECK-MODULE-PASS-NEXT: Finished pass manager ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes=no-op-cgscc %s 2>&1 \ @@ -18,14 +18,14 @@ ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='cgscc(no-op-cgscc)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-CGSCC-PASS -; CHECK-CGSCC-PASS: Starting module pass manager -; CHECK-CGSCC-PASS-NEXT: Running module pass: ModuleToPostOrderCGSCCPassAdaptor +; CHECK-CGSCC-PASS: Starting pass manager +; CHECK-CGSCC-PASS-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor ; CHECK-CGSCC-PASS-NEXT: Running analysis: CGSCCAnalysisManagerModuleProxy ; CHECK-CGSCC-PASS-NEXT: Running analysis: Lazy CallGraph Analysis -; CHECK-CGSCC-PASS-NEXT: Starting CGSCC pass manager run. -; CHECK-CGSCC-PASS-NEXT: Running CGSCC pass: NoOpCGSCCPass -; CHECK-CGSCC-PASS-NEXT: Finished CGSCC pass manager run. -; CHECK-CGSCC-PASS-NEXT: Finished module pass manager run. +; CHECK-CGSCC-PASS-NEXT: Starting pass manager +; CHECK-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass +; CHECK-CGSCC-PASS-NEXT: Finished pass manager +; CHECK-CGSCC-PASS-NEXT: Finished pass manager ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes=no-op-function %s 2>&1 \ @@ -33,57 +33,57 @@ ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='function(no-op-function)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-FUNCTION-PASS -; CHECK-FUNCTION-PASS: Starting module pass manager -; CHECK-FUNCTION-PASS-NEXT: Running module pass: ModuleToFunctionPassAdaptor +; CHECK-FUNCTION-PASS: Starting pass manager +; CHECK-FUNCTION-PASS-NEXT: Running pass: ModuleToFunctionPassAdaptor ; CHECK-FUNCTION-PASS-NEXT: Running analysis: FunctionAnalysisManagerModuleProxy -; CHECK-FUNCTION-PASS-NEXT: Starting function pass manager run. -; CHECK-FUNCTION-PASS-NEXT: Running function pass: NoOpFunctionPass -; CHECK-FUNCTION-PASS-NEXT: Finished function pass manager run. -; CHECK-FUNCTION-PASS-NEXT: Finished module pass manager run. +; CHECK-FUNCTION-PASS-NEXT: Starting pass manager +; CHECK-FUNCTION-PASS-NEXT: Running pass: NoOpFunctionPass +; CHECK-FUNCTION-PASS-NEXT: Finished pass manager +; CHECK-FUNCTION-PASS-NEXT: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -passes=print %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-MODULE-PRINT -; CHECK-MODULE-PRINT: Starting module pass manager -; CHECK-MODULE-PRINT: Running module pass: VerifierPass -; CHECK-MODULE-PRINT: Running module pass: PrintModulePass +; CHECK-MODULE-PRINT: Starting pass manager +; CHECK-MODULE-PRINT: Running pass: VerifierPass +; CHECK-MODULE-PRINT: Running pass: PrintModulePass ; CHECK-MODULE-PRINT: ModuleID ; CHECK-MODULE-PRINT: define void @foo() -; CHECK-MODULE-PRINT: Running module pass: VerifierPass -; CHECK-MODULE-PRINT: Finished module pass manager +; CHECK-MODULE-PRINT: Running pass: VerifierPass +; CHECK-MODULE-PRINT: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='print,verify' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-MODULE-VERIFY -; CHECK-MODULE-VERIFY: Starting module pass manager -; CHECK-MODULE-VERIFY: Running module pass: PrintModulePass +; CHECK-MODULE-VERIFY: Starting pass manager +; CHECK-MODULE-VERIFY: Running pass: PrintModulePass ; CHECK-MODULE-VERIFY: ModuleID ; CHECK-MODULE-VERIFY: define void @foo() -; CHECK-MODULE-VERIFY: Running module pass: VerifierPass -; CHECK-MODULE-VERIFY: Finished module pass manager +; CHECK-MODULE-VERIFY: Running pass: VerifierPass +; CHECK-MODULE-VERIFY: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -passes='function(print)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-FUNCTION-PRINT -; CHECK-FUNCTION-PRINT: Starting module pass manager -; CHECK-FUNCTION-PRINT: Running module pass: VerifierPass -; CHECK-FUNCTION-PRINT: Running module pass: ModuleToFunctionPassAdaptor +; CHECK-FUNCTION-PRINT: Starting pass manager +; CHECK-FUNCTION-PRINT: Running pass: VerifierPass +; CHECK-FUNCTION-PRINT: Running pass: ModuleToFunctionPassAdaptor ; CHECK-FUNCTION-PRINT: Running analysis: FunctionAnalysisManagerModuleProxy -; CHECK-FUNCTION-PRINT: Starting function pass manager -; CHECK-FUNCTION-PRINT: Running function pass: PrintFunctionPass +; CHECK-FUNCTION-PRINT: Starting pass manager +; CHECK-FUNCTION-PRINT: Running pass: PrintFunctionPass ; CHECK-FUNCTION-PRINT-NOT: ModuleID ; CHECK-FUNCTION-PRINT: define void @foo() -; CHECK-FUNCTION-PRINT: Finished function pass manager -; CHECK-FUNCTION-PRINT: Running module pass: VerifierPass -; CHECK-FUNCTION-PRINT: Finished module pass manager +; CHECK-FUNCTION-PRINT: Finished pass manager +; CHECK-FUNCTION-PRINT: Running pass: VerifierPass +; CHECK-FUNCTION-PRINT: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='function(print,verify)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-FUNCTION-VERIFY -; CHECK-FUNCTION-VERIFY: Starting module pass manager -; CHECK-FUNCTION-VERIFY: Starting function pass manager -; CHECK-FUNCTION-VERIFY: Running function pass: PrintFunctionPass +; CHECK-FUNCTION-VERIFY: Starting pass manager +; CHECK-FUNCTION-VERIFY: Starting pass manager +; CHECK-FUNCTION-VERIFY: Running pass: PrintFunctionPass ; CHECK-FUNCTION-VERIFY-NOT: ModuleID ; CHECK-FUNCTION-VERIFY: define void @foo() -; CHECK-FUNCTION-VERIFY: Running function pass: VerifierPass -; CHECK-FUNCTION-VERIFY: Finished function pass manager -; CHECK-FUNCTION-VERIFY: Finished module pass manager +; CHECK-FUNCTION-VERIFY: Running pass: VerifierPass +; CHECK-FUNCTION-VERIFY: Finished pass manager +; CHECK-FUNCTION-VERIFY: Finished pass manager ; RUN: opt -S -o - -passes='no-op-module,no-op-module' %s \ ; RUN: | FileCheck %s --check-prefix=CHECK-NOOP @@ -98,41 +98,41 @@ ; RUN: opt -disable-output -debug-pass-manager -verify-each -passes='no-op-module,function(no-op-function)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-VERIFY-EACH -; CHECK-VERIFY-EACH: Starting module pass manager -; CHECK-VERIFY-EACH: Running module pass: VerifierPass -; CHECK-VERIFY-EACH: Running module pass: NoOpModulePass -; CHECK-VERIFY-EACH: Running module pass: VerifierPass -; CHECK-VERIFY-EACH: Starting function pass manager -; CHECK-VERIFY-EACH: Running function pass: NoOpFunctionPass -; CHECK-VERIFY-EACH: Running function pass: VerifierPass -; CHECK-VERIFY-EACH: Finished function pass manager -; CHECK-VERIFY-EACH: Running module pass: VerifierPass -; CHECK-VERIFY-EACH: Finished module pass manager +; CHECK-VERIFY-EACH: Starting pass manager +; CHECK-VERIFY-EACH: Running pass: VerifierPass +; CHECK-VERIFY-EACH: Running pass: NoOpModulePass +; CHECK-VERIFY-EACH: Running pass: VerifierPass +; CHECK-VERIFY-EACH: Starting pass manager +; CHECK-VERIFY-EACH: Running pass: NoOpFunctionPass +; CHECK-VERIFY-EACH: Running pass: VerifierPass +; CHECK-VERIFY-EACH: Finished pass manager +; CHECK-VERIFY-EACH: Running pass: VerifierPass +; CHECK-VERIFY-EACH: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='no-op-module,function(no-op-function)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-NO-VERIFY -; CHECK-NO-VERIFY: Starting module pass manager +; CHECK-NO-VERIFY: Starting pass manager ; CHECK-NO-VERIFY-NOT: VerifierPass -; CHECK-NO-VERIFY: Running module pass: NoOpModulePass +; CHECK-NO-VERIFY: Running pass: NoOpModulePass ; CHECK-NO-VERIFY-NOT: VerifierPass -; CHECK-NO-VERIFY: Starting function pass manager -; CHECK-NO-VERIFY: Running function pass: NoOpFunctionPass +; CHECK-NO-VERIFY: Starting pass manager +; CHECK-NO-VERIFY: Running pass: NoOpFunctionPass ; CHECK-NO-VERIFY-NOT: VerifierPass -; CHECK-NO-VERIFY: Finished function pass manager +; CHECK-NO-VERIFY: Finished pass manager ; CHECK-NO-VERIFY-NOT: VerifierPass -; CHECK-NO-VERIFY: Finished module pass manager +; CHECK-NO-VERIFY: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>))' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-ANALYSES -; CHECK-ANALYSES: Starting module pass manager -; CHECK-ANALYSES: Running module pass: RequireAnalysisPass +; CHECK-ANALYSES: Starting pass manager +; CHECK-ANALYSES: Running pass: RequireAnalysisPass ; CHECK-ANALYSES: Running analysis: NoOpModuleAnalysis -; CHECK-ANALYSES: Starting CGSCC pass manager -; CHECK-ANALYSES: Running CGSCC pass: RequireAnalysisPass +; CHECK-ANALYSES: Starting pass manager +; CHECK-ANALYSES: Running pass: RequireAnalysisPass ; CHECK-ANALYSES: Running analysis: NoOpCGSCCAnalysis -; CHECK-ANALYSES: Starting function pass manager -; CHECK-ANALYSES: Running function pass: RequireAnalysisPass +; CHECK-ANALYSES: Starting pass manager +; CHECK-ANALYSES: Running pass: RequireAnalysisPass ; CHECK-ANALYSES: Running analysis: NoOpFunctionAnalysis ; Make sure no-op passes that preserve all analyses don't even try to do any @@ -140,22 +140,22 @@ ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>))' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-NO-OP-INVALIDATION -; CHECK-NO-OP-INVALIDATION: Starting module pass manager +; CHECK-NO-OP-INVALIDATION: Starting pass manager ; CHECK-NO-OP-INVALIDATION-NOT: Invalidating all non-preserved analyses ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,require<no-op-module>,require<no-op-module>' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS -; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Starting module pass manager -; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Running module pass: RequireAnalysisPass +; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis ; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS-NOT: Running analysis: NoOpModuleAnalysis ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,invalidate<no-op-module>,require<no-op-module>' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS -; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Starting module pass manager -; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running module pass: RequireAnalysisPass +; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis ; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Invalidating analysis: NoOpModuleAnalysis ; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis @@ -163,16 +163,16 @@ ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='cgscc(require<no-op-cgscc>,require<no-op-cgscc>,require<no-op-cgscc>)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS -; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Starting CGSCC pass manager -; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Running CGSCC pass: RequireAnalysisPass +; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis ; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS-NOT: Running analysis: NoOpCGSCCAnalysis ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='cgscc(require<no-op-cgscc>,invalidate<no-op-cgscc>,require<no-op-cgscc>)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS -; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Starting CGSCC pass manager -; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running CGSCC pass: RequireAnalysisPass +; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis ; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Invalidating analysis: NoOpCGSCCAnalysis ; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis @@ -180,16 +180,16 @@ ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='function(require<no-op-function>,require<no-op-function>,require<no-op-function>)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS -; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Starting function pass manager -; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Running function pass: RequireAnalysisPass +; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis ; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS-NOT: Running analysis: NoOpFunctionAnalysis ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='function(require<no-op-function>,invalidate<no-op-function>,require<no-op-function>)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS -; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Starting function pass manager -; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running function pass: RequireAnalysisPass +; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Starting pass manager +; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass ; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis ; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Invalidating analysis: NoOpFunctionAnalysis ; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis @@ -197,74 +197,74 @@ ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,module(require<no-op-module>,function(require<no-op-function>,invalidate<all>,require<no-op-function>),require<no-op-module>),require<no-op-module>' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-INVALIDATE-ALL -; CHECK-INVALIDATE-ALL: Starting module pass manager run. -; CHECK-INVALIDATE-ALL: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Starting pass manager +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Starting module pass manager run. -; CHECK-INVALIDATE-ALL: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Starting pass manager +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Starting function pass manager run. -; CHECK-INVALIDATE-ALL: Running function pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Starting pass manager +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL: Running analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL: Running function pass: InvalidateAllAnalysesPass +; CHECK-INVALIDATE-ALL: Running pass: InvalidateAllAnalysesPass ; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL: Invalidating analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL: Running function pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL: Running analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL: Finished function pass manager run. +; CHECK-INVALIDATE-ALL: Finished pass manager ; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpFunctionAnalysis ; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL: Invalidating analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Finished module pass manager run. +; CHECK-INVALIDATE-ALL: Finished pass manager ; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-NOT: Invalidating analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL: Finished module pass manager run. +; CHECK-INVALIDATE-ALL: Finished pass manager ; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='require<no-op-module>,module(require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>,invalidate<all>,require<no-op-function>),require<no-op-cgscc>),require<no-op-module>),require<no-op-module>' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-INVALIDATE-ALL-CG -; CHECK-INVALIDATE-ALL-CG: Starting module pass manager run. -; CHECK-INVALIDATE-ALL-CG: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Starting pass manager +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Starting module pass manager run. -; CHECK-INVALIDATE-ALL-CG: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Starting pass manager +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Starting CGSCC pass manager run. -; CHECK-INVALIDATE-ALL-CG: Running CGSCC pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Starting pass manager +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpCGSCCAnalysis -; CHECK-INVALIDATE-ALL-CG: Starting function pass manager run. -; CHECK-INVALIDATE-ALL-CG: Running function pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Starting pass manager +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL-CG: Running function pass: InvalidateAllAnalysesPass +; CHECK-INVALIDATE-ALL-CG: Running pass: InvalidateAllAnalysesPass ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL-CG: Running function pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpFunctionAnalysis -; CHECK-INVALIDATE-ALL-CG: Finished function pass manager run. +; CHECK-INVALIDATE-ALL-CG: Finished pass manager ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpFunctionAnalysis ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpCGSCCAnalysis -; CHECK-INVALIDATE-ALL-CG: Running CGSCC pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpCGSCCAnalysis -; CHECK-INVALIDATE-ALL-CG: Finished CGSCC pass manager run. +; CHECK-INVALIDATE-ALL-CG: Finished pass manager ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG-NOT: Invalidating analysis: NoOpCGSCCAnalysis ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Finished module pass manager run. +; CHECK-INVALIDATE-ALL-CG: Finished pass manager ; CHECK-INVALIDATE-ALL-CG: Invalidating all non-preserved analyses ; CHECK-INVALIDATE-ALL-CG-NOT: Invalidating analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Running module pass: RequireAnalysisPass +; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass ; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis -; CHECK-INVALIDATE-ALL-CG: Finished module pass manager run. +; CHECK-INVALIDATE-ALL-CG: Finished pass manager define void @foo() { ret void diff --git a/llvm/test/Other/pass-pipeline-parsing.ll b/llvm/test/Other/pass-pipeline-parsing.ll index 3dedea25abf..0b49eb7d214 100644 --- a/llvm/test/Other/pass-pipeline-parsing.ll +++ b/llvm/test/Other/pass-pipeline-parsing.ll @@ -1,56 +1,55 @@ ; RUN: opt -disable-output -debug-pass-manager \ ; RUN: -passes=no-op-module,no-op-module %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-TWO-NOOP-MP -; CHECK-TWO-NOOP-MP: Starting module pass manager -; CHECK-TWO-NOOP-MP: Running module pass: NoOpModulePass -; CHECK-TWO-NOOP-MP: Running module pass: NoOpModulePass -; CHECK-TWO-NOOP-MP: Finished module pass manager +; CHECK-TWO-NOOP-MP: Starting pass manager +; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass +; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass +; CHECK-TWO-NOOP-MP: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager \ ; RUN: -passes='module(no-op-module,no-op-module)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-MP -; CHECK-NESTED-TWO-NOOP-MP: Starting module pass manager -; CHECK-NESTED-TWO-NOOP-MP: Running module pass: ModulePassManager -; CHECK-NESTED-TWO-NOOP-MP: Starting module pass manager -; CHECK-NESTED-TWO-NOOP-MP: Running module pass: NoOpModulePass -; CHECK-NESTED-TWO-NOOP-MP: Running module pass: NoOpModulePass -; CHECK-NESTED-TWO-NOOP-MP: Finished module pass manager -; CHECK-NESTED-TWO-NOOP-MP: Finished module pass manager +; CHECK-NESTED-TWO-NOOP-MP: Starting pass manager +; CHECK-NESTED-TWO-NOOP-MP: Starting pass manager +; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass +; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass +; CHECK-NESTED-TWO-NOOP-MP: Finished pass manager +; CHECK-NESTED-TWO-NOOP-MP: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager \ ; RUN: -passes=no-op-function,no-op-function %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-TWO-NOOP-FP -; CHECK-TWO-NOOP-FP: Starting module pass manager -; CHECK-TWO-NOOP-FP: Running module pass: ModuleToFunctionPassAdaptor -; CHECK-TWO-NOOP-FP: Starting function pass manager -; CHECK-TWO-NOOP-FP: Running function pass: NoOpFunctionPass -; CHECK-TWO-NOOP-FP: Running function pass: NoOpFunctionPass -; CHECK-TWO-NOOP-FP: Finished function pass manager -; CHECK-TWO-NOOP-FP: Finished module pass manager +; CHECK-TWO-NOOP-FP: Starting pass manager +; CHECK-TWO-NOOP-FP: Running pass: ModuleToFunctionPassAdaptor +; CHECK-TWO-NOOP-FP: Starting pass manager +; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass +; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass +; CHECK-TWO-NOOP-FP: Finished pass manager +; CHECK-TWO-NOOP-FP: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager \ ; RUN: -passes='function(no-op-function,no-op-function)' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-FP -; CHECK-NESTED-TWO-NOOP-FP: Starting module pass manager -; CHECK-NESTED-TWO-NOOP-FP: Running module pass: ModuleToFunctionPassAdaptor -; CHECK-NESTED-TWO-NOOP-FP: Starting function pass manager -; CHECK-NESTED-TWO-NOOP-FP: Running function pass: NoOpFunctionPass -; CHECK-NESTED-TWO-NOOP-FP: Running function pass: NoOpFunctionPass -; CHECK-NESTED-TWO-NOOP-FP: Finished function pass manager -; CHECK-NESTED-TWO-NOOP-FP: Finished module pass manager +; CHECK-NESTED-TWO-NOOP-FP: Starting pass manager +; CHECK-NESTED-TWO-NOOP-FP: Running pass: ModuleToFunctionPassAdaptor +; CHECK-NESTED-TWO-NOOP-FP: Starting pass manager +; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass +; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass +; CHECK-NESTED-TWO-NOOP-FP: Finished pass manager +; CHECK-NESTED-TWO-NOOP-FP: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager \ ; RUN: -passes='no-op-module,function(no-op-function,no-op-function),no-op-module' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-MIXED-FP-AND-MP -; CHECK-MIXED-FP-AND-MP: Starting module pass manager -; CHECK-MIXED-FP-AND-MP: Running module pass: NoOpModulePass -; CHECK-MIXED-FP-AND-MP: Running module pass: ModuleToFunctionPassAdaptor -; CHECK-MIXED-FP-AND-MP: Starting function pass manager -; CHECK-MIXED-FP-AND-MP: Running function pass: NoOpFunctionPass -; CHECK-MIXED-FP-AND-MP: Running function pass: NoOpFunctionPass -; CHECK-MIXED-FP-AND-MP: Finished function pass manager -; CHECK-MIXED-FP-AND-MP: Running module pass: NoOpModulePass -; CHECK-MIXED-FP-AND-MP: Finished module pass manager +; CHECK-MIXED-FP-AND-MP: Starting pass manager +; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass +; CHECK-MIXED-FP-AND-MP: Running pass: ModuleToFunctionPassAdaptor +; CHECK-MIXED-FP-AND-MP: Starting pass manager +; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass +; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass +; CHECK-MIXED-FP-AND-MP: Finished pass manager +; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass +; CHECK-MIXED-FP-AND-MP: Finished pass manager ; RUN: not opt -disable-output -debug-pass-manager \ ; RUN: -passes='no-op-module)' %s 2>&1 \ @@ -105,38 +104,38 @@ ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes=no-op-cgscc,no-op-cgscc %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-TWO-NOOP-CG -; CHECK-TWO-NOOP-CG: Starting module pass manager -; CHECK-TWO-NOOP-CG: Running module pass: ModuleToPostOrderCGSCCPassAdaptor -; CHECK-TWO-NOOP-CG: Starting CGSCC pass manager -; CHECK-TWO-NOOP-CG: Running CGSCC pass: NoOpCGSCCPass -; CHECK-TWO-NOOP-CG: Running CGSCC pass: NoOpCGSCCPass -; CHECK-TWO-NOOP-CG: Finished CGSCC pass manager -; CHECK-TWO-NOOP-CG: Finished module pass manager +; CHECK-TWO-NOOP-CG: Starting pass manager +; CHECK-TWO-NOOP-CG: Running pass: ModuleToPostOrderCGSCCPassAdaptor +; CHECK-TWO-NOOP-CG: Starting pass manager +; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass +; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass +; CHECK-TWO-NOOP-CG: Finished pass manager +; CHECK-TWO-NOOP-CG: Finished pass manager ; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager \ ; RUN: -passes='module(function(no-op-function),cgscc(no-op-cgscc,function(no-op-function),no-op-cgscc),function(no-op-function))' %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-NESTED-MP-CG-FP -; CHECK-NESTED-MP-CG-FP: Starting module pass manager -; CHECK-NESTED-MP-CG-FP: Starting module pass manager -; CHECK-NESTED-MP-CG-FP: Running module pass: ModuleToFunctionPassAdaptor -; CHECK-NESTED-MP-CG-FP: Starting function pass manager -; CHECK-NESTED-MP-CG-FP: Running function pass: NoOpFunctionPass -; CHECK-NESTED-MP-CG-FP: Finished function pass manager -; CHECK-NESTED-MP-CG-FP: Running module pass: ModuleToPostOrderCGSCCPassAdaptor -; CHECK-NESTED-MP-CG-FP: Starting CGSCC pass manager -; CHECK-NESTED-MP-CG-FP: Running CGSCC pass: NoOpCGSCCPass -; CHECK-NESTED-MP-CG-FP: Running CGSCC pass: CGSCCToFunctionPassAdaptor -; CHECK-NESTED-MP-CG-FP: Starting function pass manager -; CHECK-NESTED-MP-CG-FP: Running function pass: NoOpFunctionPass -; CHECK-NESTED-MP-CG-FP: Finished function pass manager -; CHECK-NESTED-MP-CG-FP: Running CGSCC pass: NoOpCGSCCPass -; CHECK-NESTED-MP-CG-FP: Finished CGSCC pass manager -; CHECK-NESTED-MP-CG-FP: Running module pass: ModuleToFunctionPassAdaptor -; CHECK-NESTED-MP-CG-FP: Starting function pass manager -; CHECK-NESTED-MP-CG-FP: Running function pass: NoOpFunctionPass -; CHECK-NESTED-MP-CG-FP: Finished function pass manager -; CHECK-NESTED-MP-CG-FP: Finished module pass manager -; CHECK-NESTED-MP-CG-FP: Finished module pass manager +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToFunctionPassAdaptor +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass +; CHECK-NESTED-MP-CG-FP: Finished pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToPostOrderCGSCCPassAdaptor +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass +; CHECK-NESTED-MP-CG-FP: Running pass: CGSCCToFunctionPassAdaptor +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass +; CHECK-NESTED-MP-CG-FP: Finished pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass +; CHECK-NESTED-MP-CG-FP: Finished pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToFunctionPassAdaptor +; CHECK-NESTED-MP-CG-FP: Starting pass manager +; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass +; CHECK-NESTED-MP-CG-FP: Finished pass manager +; CHECK-NESTED-MP-CG-FP: Finished pass manager +; CHECK-NESTED-MP-CG-FP: Finished pass manager define void @f() { ret void |