From 1ac209ed76cb233b672302b6171a4c76de3e56b2 Mon Sep 17 00:00:00 2001 From: Markus Lavin Date: Wed, 15 Sep 2021 08:22:12 +0200 Subject: [PATCH] [NPM] Added -print-pipeline-passes print params for a few passes. Added '-print-pipeline-passes' printing of parameters for those passes declared with *_WITH_PARAMS macro in PassRegistry.def. Note that it only prints the parameters declared inside *_WITH_PARAMS as in a few cases there appear to be additional parameters not parsable. The following passes are now covered (i.e. all of those with *_WITH_PARAMS in PassRegistry.def). LoopExtractorPass - loop-extract HWAddressSanitizerPass - hwsan EarlyCSEPass - early-cse EntryExitInstrumenterPass - ee-instrument LowerMatrixIntrinsicsPass - lower-matrix-intrinsics LoopUnrollPass - loop-unroll AddressSanitizerPass - asan MemorySanitizerPass - msan SimplifyCFGPass - simplifycfg LoopVectorizePass - loop-vectorize MergedLoadStoreMotionPass - mldst-motion GVN - gvn StackLifetimePrinterPass - print SimpleLoopUnswitchPass - simple-loop-unswitch Differential Revision: https://reviews.llvm.org/D109310 --- llvm/include/llvm/Analysis/StackLifetime.h | 2 + llvm/include/llvm/Transforms/IPO/LoopExtractor.h | 2 + .../Transforms/Instrumentation/AddressSanitizer.h | 2 + .../Instrumentation/HWAddressSanitizer.h | 2 + .../Transforms/Instrumentation/MemorySanitizer.h | 2 + llvm/include/llvm/Transforms/Scalar/EarlyCSE.h | 2 + llvm/include/llvm/Transforms/Scalar/GVN.h | 3 ++ .../llvm/Transforms/Scalar/LoopUnrollPass.h | 2 + .../llvm/Transforms/Scalar/LowerMatrixIntrinsics.h | 2 + .../llvm/Transforms/Scalar/MergedLoadStoreMotion.h | 2 + .../llvm/Transforms/Scalar/SimpleLoopUnswitch.h | 3 ++ .../llvm/Transforms/Utils/EntryExitInstrumenter.h | 3 ++ .../llvm/Transforms/Vectorize/LoopVectorize.h | 2 + llvm/lib/Analysis/StackLifetime.cpp | 16 ++++++++ llvm/lib/Transforms/IPO/LoopExtractor.cpp | 10 +++++ .../Instrumentation/AddressSanitizer.cpp | 10 +++++ .../Instrumentation/HWAddressSanitizer.cpp | 11 ++++++ .../Transforms/Instrumentation/MemorySanitizer.cpp | 13 +++++++ llvm/lib/Transforms/Scalar/EarlyCSE.cpp | 10 +++++ llvm/lib/Transforms/Scalar/GVN.cpp | 18 +++++++++ llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 22 +++++++++++ .../Transforms/Scalar/LowerMatrixIntrinsics.cpp | 10 +++++ .../Transforms/Scalar/MergedLoadStoreMotion.cpp | 9 +++++ llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp | 11 ++++++ .../lib/Transforms/Utils/EntryExitInstrumenter.cpp | 10 +++++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 11 ++++++ llvm/test/Other/new-pm-print-pipeline.ll | 43 ++++++++++++++++++++++ 27 files changed, 233 insertions(+) diff --git a/llvm/include/llvm/Analysis/StackLifetime.h b/llvm/include/llvm/Analysis/StackLifetime.h index df342a9..239aec4 100644 --- a/llvm/include/llvm/Analysis/StackLifetime.h +++ b/llvm/include/llvm/Analysis/StackLifetime.h @@ -191,6 +191,8 @@ public: StackLifetimePrinterPass(raw_ostream &OS, StackLifetime::LivenessType Type) : Type(Type), OS(OS) {} PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); }; } // end namespace llvm diff --git a/llvm/include/llvm/Transforms/IPO/LoopExtractor.h b/llvm/include/llvm/Transforms/IPO/LoopExtractor.h index def3c59..aa69748 100644 --- a/llvm/include/llvm/Transforms/IPO/LoopExtractor.h +++ b/llvm/include/llvm/Transforms/IPO/LoopExtractor.h @@ -23,6 +23,8 @@ namespace llvm { struct LoopExtractorPass : public PassInfoMixin { LoopExtractorPass(unsigned NumLoops = ~0) : NumLoops(NumLoops) {} PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); private: unsigned NumLoops; diff --git a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h index 7ddbc8f..52581ff 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h +++ b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h @@ -115,6 +115,8 @@ public: explicit AddressSanitizerPass(AddressSanitizerOptions Options) : Options(Options){}; PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); static bool isRequired() { return true; } private: diff --git a/llvm/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h index 07248ba..3118a37 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h +++ b/llvm/include/llvm/Transforms/Instrumentation/HWAddressSanitizer.h @@ -39,6 +39,8 @@ public: : Options(Options){}; PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM); static bool isRequired() { return true; } + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); private: HWAddressSanitizerOptions Options; diff --git a/llvm/include/llvm/Transforms/Instrumentation/MemorySanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/MemorySanitizer.h index f5f9ec7..e2acd67 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/MemorySanitizer.h +++ b/llvm/include/llvm/Transforms/Instrumentation/MemorySanitizer.h @@ -41,6 +41,8 @@ struct MemorySanitizerPass : public PassInfoMixin { PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM); PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); static bool isRequired() { return true; } private: diff --git a/llvm/include/llvm/Transforms/Scalar/EarlyCSE.h b/llvm/include/llvm/Transforms/Scalar/EarlyCSE.h index 1e7fd71..877d814 100644 --- a/llvm/include/llvm/Transforms/Scalar/EarlyCSE.h +++ b/llvm/include/llvm/Transforms/Scalar/EarlyCSE.h @@ -32,6 +32,8 @@ struct EarlyCSEPass : PassInfoMixin { /// Run the pass over the function. PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); bool UseMemorySSA; }; diff --git a/llvm/include/llvm/Transforms/Scalar/GVN.h b/llvm/include/llvm/Transforms/Scalar/GVN.h index 5c29b289..ed84a69 100644 --- a/llvm/include/llvm/Transforms/Scalar/GVN.h +++ b/llvm/include/llvm/Transforms/Scalar/GVN.h @@ -126,6 +126,9 @@ public: /// Run the pass over the function. PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); + /// This removes the specified instruction from /// our various maps and marks it for deletion. void markInstructionForDeletion(Instruction *I) { diff --git a/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h b/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h index 30cc08c..6afe7ec 100644 --- a/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h +++ b/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h @@ -140,6 +140,8 @@ public: : UnrollOpts(UnrollOpts) {} PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); }; } // end namespace llvm diff --git a/llvm/include/llvm/Transforms/Scalar/LowerMatrixIntrinsics.h b/llvm/include/llvm/Transforms/Scalar/LowerMatrixIntrinsics.h index dd574e4..d44d297 100644 --- a/llvm/include/llvm/Transforms/Scalar/LowerMatrixIntrinsics.h +++ b/llvm/include/llvm/Transforms/Scalar/LowerMatrixIntrinsics.h @@ -23,6 +23,8 @@ class LowerMatrixIntrinsicsPass public: LowerMatrixIntrinsicsPass(bool Minimal = false) : Minimal(Minimal) {} PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); static bool isRequired() { return true; } }; } // namespace llvm diff --git a/llvm/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h b/llvm/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h index c5f6d6e..256d036 100644 --- a/llvm/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h +++ b/llvm/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h @@ -48,6 +48,8 @@ public: MergedLoadStoreMotionPass(const MergedLoadStoreMotionOptions &PassOptions) : Options(PassOptions) {} PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); }; } diff --git a/llvm/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h b/llvm/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h index c1a9ab4..dfb1619 100644 --- a/llvm/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h +++ b/llvm/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h @@ -69,6 +69,9 @@ public: PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &U); + + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); }; /// Create the legacy pass object for the simple loop unswitcher. diff --git a/llvm/include/llvm/Transforms/Utils/EntryExitInstrumenter.h b/llvm/include/llvm/Transforms/Utils/EntryExitInstrumenter.h index 31c0230..f2b0384 100644 --- a/llvm/include/llvm/Transforms/Utils/EntryExitInstrumenter.h +++ b/llvm/include/llvm/Transforms/Utils/EntryExitInstrumenter.h @@ -27,6 +27,9 @@ struct EntryExitInstrumenterPass PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); + bool PostInlining; static bool isRequired() { return true; } diff --git a/llvm/include/llvm/Transforms/Vectorize/LoopVectorize.h b/llvm/include/llvm/Transforms/Vectorize/LoopVectorize.h index ad6a4b5..d105496 100644 --- a/llvm/include/llvm/Transforms/Vectorize/LoopVectorize.h +++ b/llvm/include/llvm/Transforms/Vectorize/LoopVectorize.h @@ -153,6 +153,8 @@ public: ProfileSummaryInfo *PSI; PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); + void printPipeline(raw_ostream &OS, + function_ref MapClassName2PassName); // Shim for old PM. LoopVectorizeResult diff --git a/llvm/lib/Analysis/StackLifetime.cpp b/llvm/lib/Analysis/StackLifetime.cpp index a3d5c81..9056cc0 100644 --- a/llvm/lib/Analysis/StackLifetime.cpp +++ b/llvm/lib/Analysis/StackLifetime.cpp @@ -398,3 +398,19 @@ PreservedAnalyses StackLifetimePrinterPass::run(Function &F, SL.print(OS); return PreservedAnalyses::all(); } + +void StackLifetimePrinterPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + switch (Type) { + case StackLifetime::LivenessType::May: + OS << "may"; + break; + case StackLifetime::LivenessType::Must: + OS << "must"; + break; + } + OS << ">"; +} diff --git a/llvm/lib/Transforms/IPO/LoopExtractor.cpp b/llvm/lib/Transforms/IPO/LoopExtractor.cpp index a497c03..d9a59dd 100644 --- a/llvm/lib/Transforms/IPO/LoopExtractor.cpp +++ b/llvm/lib/Transforms/IPO/LoopExtractor.cpp @@ -283,3 +283,13 @@ PreservedAnalyses LoopExtractorPass::run(Module &M, ModuleAnalysisManager &AM) { PA.preserve(); return PA; } + +void LoopExtractorPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (NumLoops == 1) + OS << "single"; + OS << ">"; +} diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index a981ab7..b2cb623 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -1273,6 +1273,16 @@ PreservedAnalyses AddressSanitizerPass::run(Function &F, return PreservedAnalyses::all(); } +void AddressSanitizerPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (Options.CompileKernel) + OS << "kernel"; + OS << ">"; +} + ModuleAddressSanitizerPass::ModuleAddressSanitizerPass( bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator, AsanDtorKind DestructorKind) diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp index f1a7049..5476c3f 100644 --- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp @@ -504,6 +504,17 @@ PreservedAnalyses HWAddressSanitizerPass::run(Module &M, return PreservedAnalyses::none(); return PreservedAnalyses::all(); } +void HWAddressSanitizerPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (Options.CompileKernel) + OS << "kernel;"; + if (Options.Recover) + OS << "recover"; + OS << ">"; +} void HWAddressSanitizer::createHwasanCtorComdat() { std::tie(HwasanCtorFunction, std::ignore) = diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp index 9b4cc9c..d190005 100644 --- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -681,6 +681,19 @@ PreservedAnalyses MemorySanitizerPass::run(Module &M, return PreservedAnalyses::none(); } +void MemorySanitizerPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (Options.Recover) + OS << "recover;"; + if (Options.Kernel) + OS << "kernel;"; + OS << "track-origins=" << Options.TrackOrigins; + OS << ">"; +} + char MemorySanitizerLegacyPass::ID = 0; INITIALIZE_PASS_BEGIN(MemorySanitizerLegacyPass, "msan", diff --git a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp index 978c6a7..8b27c23 100644 --- a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp +++ b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp @@ -1642,6 +1642,16 @@ PreservedAnalyses EarlyCSEPass::run(Function &F, return PA; } +void EarlyCSEPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (UseMemorySSA) + OS << "memssa"; + OS << ">"; +} + namespace { /// A simple and fast domtree-based CSE pass. diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index c503ddf..308b747 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -684,6 +684,24 @@ PreservedAnalyses GVN::run(Function &F, FunctionAnalysisManager &AM) { return PA; } +void GVN::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline(OS, + MapClassName2PassName); + + OS << "<"; + if (Options.AllowPRE != None) + OS << (Options.AllowPRE.getValue() ? "" : "no-") << "pre;"; + if (Options.AllowLoadPRE != None) + OS << (Options.AllowLoadPRE.getValue() ? "" : "no-") << "load-pre;"; + if (Options.AllowLoadPRESplitBackedge != None) + OS << (Options.AllowLoadPRESplitBackedge.getValue() ? "" : "no-") + << "split-backedge-load-pre;"; + if (Options.AllowMemDep != None) + OS << (Options.AllowMemDep.getValue() ? "" : "no-") << "memdep"; + OS << ">"; +} + #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) LLVM_DUMP_METHOD void GVN::dump(DenseMap& d) const { errs() << "{\n"; diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp index a3aeb67..d1605c5 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -1617,3 +1617,25 @@ PreservedAnalyses LoopUnrollPass::run(Function &F, return getLoopPassPreservedAnalyses(); } + +void LoopUnrollPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (UnrollOpts.AllowPartial != None) + OS << (UnrollOpts.AllowPartial.getValue() ? "" : "no-") << "partial;"; + if (UnrollOpts.AllowPeeling != None) + OS << (UnrollOpts.AllowPeeling.getValue() ? "" : "no-") << "peeling;"; + if (UnrollOpts.AllowRuntime != None) + OS << (UnrollOpts.AllowRuntime.getValue() ? "" : "no-") << "runtime;"; + if (UnrollOpts.AllowUpperBound != None) + OS << (UnrollOpts.AllowUpperBound.getValue() ? "" : "no-") << "upperbound;"; + if (UnrollOpts.AllowProfileBasedPeeling != None) + OS << (UnrollOpts.AllowProfileBasedPeeling.getValue() ? "" : "no-") + << "profile-peeling;"; + if (UnrollOpts.FullUnrollMaxCount != None) + OS << "full-unroll-max=" << UnrollOpts.FullUnrollMaxCount << ";"; + OS << "O" << UnrollOpts.OptLevel; + OS << ">"; +} diff --git a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp index e5d945a..4e4097e 100644 --- a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp +++ b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp @@ -2263,6 +2263,16 @@ PreservedAnalyses LowerMatrixIntrinsicsPass::run(Function &F, return PreservedAnalyses::all(); } +void LowerMatrixIntrinsicsPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + if (Minimal) + OS << "minimal"; + OS << ">"; +} + namespace { class LowerMatrixIntrinsicsLegacyPass : public FunctionPass { diff --git a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp index 033fc16..734532a 100644 --- a/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp +++ b/llvm/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp @@ -420,3 +420,12 @@ MergedLoadStoreMotionPass::run(Function &F, FunctionAnalysisManager &AM) { PA.preserveSet(); return PA; } + +void MergedLoadStoreMotionPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + OS << "<"; + OS << (Options.SplitFooterBB ? "" : "no-") << "split-footer-bb"; + OS << ">"; +} diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp index 5a3f0de..4042353 100644 --- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp +++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp @@ -3121,6 +3121,17 @@ PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM, return PA; } +void SimpleLoopUnswitchPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + + OS << "<"; + OS << (NonTrivial ? "" : "no-") << "nontrivial;"; + OS << (Trivial ? "" : "no-") << "trivial"; + OS << ">"; +} + namespace { class SimpleLoopUnswitchLegacyPass : public LoopPass { diff --git a/llvm/lib/Transforms/Utils/EntryExitInstrumenter.cpp b/llvm/lib/Transforms/Utils/EntryExitInstrumenter.cpp index 6674e9b..e3e8f63 100644 --- a/llvm/lib/Transforms/Utils/EntryExitInstrumenter.cpp +++ b/llvm/lib/Transforms/Utils/EntryExitInstrumenter.cpp @@ -183,3 +183,13 @@ llvm::EntryExitInstrumenterPass::run(Function &F, FunctionAnalysisManager &AM) { PA.preserveSet(); return PA; } + +void llvm::EntryExitInstrumenterPass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this) + ->printPipeline(OS, MapClassName2PassName); + OS << "<"; + if (PostInlining) + OS << "post-inline"; + OS << ">"; +} diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 9a66def..af7928b 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -10584,3 +10584,14 @@ PreservedAnalyses LoopVectorizePass::run(Function &F, PA.preserveSet(); return PA; } + +void LoopVectorizePass::printPipeline( + raw_ostream &OS, function_ref MapClassName2PassName) { + static_cast *>(this)->printPipeline( + OS, MapClassName2PassName); + + OS << "<"; + OS << (InterleaveOnlyWhenForced ? "" : "no-") << "interleave-forced-only;"; + OS << (VectorizeOnlyWhenForced ? "" : "no-") << "vectorize-forced-only;"; + OS << ">"; +} diff --git a/llvm/test/Other/new-pm-print-pipeline.ll b/llvm/test/Other/new-pm-print-pipeline.ll index 4a5b545..823348b 100644 --- a/llvm/test/Other/new-pm-print-pipeline.ll +++ b/llvm/test/Other/new-pm-print-pipeline.ll @@ -18,3 +18,46 @@ ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='cgscc(argpromotion,require,no-op-cgscc,devirt<7>(inline,no-op-cgscc)),function(loop(require))' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-5 ; CHECK-5: cgscc(argpromotion,require,no-op-cgscc,devirt<7>(inline,no-op-cgscc)),function(loop(require)) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(ee-instrument<>,ee-instrument)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-6 +; CHECK-6: function(ee-instrument<>,ee-instrument) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='loop(simple-loop-unswitch,simple-loop-unswitch)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-7 +; CHECK-7: function(loop(simple-loop-unswitch,simple-loop-unswitch)) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(mldst-motion,mldst-motion)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-8 +; CHECK-8: function(mldst-motion,mldst-motion) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(lower-matrix-intrinsics<>,lower-matrix-intrinsics)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-9 +; CHECK-9: function(lower-matrix-intrinsics<>,lower-matrix-intrinsics) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(loop-unroll<>,loop-unroll,loop-unroll)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-10 +; CHECK-10: function(loop-unroll,loop-unroll,loop-unroll) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(gvn<>,gvn,gvn)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-11 +; CHECK-11: function(gvn<>,gvn,gvn) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(early-cse<>,early-cse)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-12 +; CHECK-12: function(early-cse<>,early-cse) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(msan<>,msan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-13 +;;; XXX: msan-module? this is one of the places where the ClassName to pass-name mapping fails. +; CHECK-13: function(msan-module,msan-module) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14 +; CHECK-14: hwasan<>,hwasan + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15 +; CHECK-15: function(asan<>,asan) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16 +; CHECK-16: loop-extract<>,loop-extract + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(print,print)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-17 +; CHECK-17: function(print,print) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(simplifycfg,simplifycfg)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-18 +; CHECK-18: function(simplifycfg,simplifycfg) + +; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(loop-vectorize,loop-vectorize)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-19 +; CHECK-19: function(loop-vectorize,loop-vectorize) -- 2.7.4