forked from OSchip/llvm-project
[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<stack-lifetime> SimpleLoopUnswitchPass - simple-loop-unswitch Differential Revision: https://reviews.llvm.org/D109310
This commit is contained in:
parent
2c42a73d6c
commit
1ac209ed76
|
@ -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<StringRef(StringRef)> MapClassName2PassName);
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -23,6 +23,8 @@ namespace llvm {
|
|||
struct LoopExtractorPass : public PassInfoMixin<LoopExtractorPass> {
|
||||
LoopExtractorPass(unsigned NumLoops = ~0) : NumLoops(NumLoops) {}
|
||||
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
private:
|
||||
unsigned NumLoops;
|
||||
|
|
|
@ -115,6 +115,8 @@ public:
|
|||
explicit AddressSanitizerPass(AddressSanitizerOptions Options)
|
||||
: Options(Options){};
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
static bool isRequired() { return true; }
|
||||
|
||||
private:
|
||||
|
|
|
@ -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<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
private:
|
||||
HWAddressSanitizerOptions Options;
|
||||
|
|
|
@ -41,6 +41,8 @@ struct MemorySanitizerPass : public PassInfoMixin<MemorySanitizerPass> {
|
|||
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
|
||||
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
static bool isRequired() { return true; }
|
||||
|
||||
private:
|
||||
|
|
|
@ -32,6 +32,8 @@ struct EarlyCSEPass : PassInfoMixin<EarlyCSEPass> {
|
|||
|
||||
/// Run the pass over the function.
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
bool UseMemorySSA;
|
||||
};
|
||||
|
|
|
@ -126,6 +126,9 @@ public:
|
|||
/// Run the pass over the function.
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
/// This removes the specified instruction from
|
||||
/// our various maps and marks it for deletion.
|
||||
void markInstructionForDeletion(Instruction *I) {
|
||||
|
|
|
@ -140,6 +140,8 @@ public:
|
|||
: UnrollOpts(UnrollOpts) {}
|
||||
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -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<StringRef(StringRef)> MapClassName2PassName);
|
||||
static bool isRequired() { return true; }
|
||||
};
|
||||
} // namespace llvm
|
||||
|
|
|
@ -48,6 +48,8 @@ public:
|
|||
MergedLoadStoreMotionPass(const MergedLoadStoreMotionOptions &PassOptions)
|
||||
: Options(PassOptions) {}
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,9 @@ public:
|
|||
|
||||
PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
|
||||
LoopStandardAnalysisResults &AR, LPMUpdater &U);
|
||||
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
};
|
||||
|
||||
/// Create the legacy pass object for the simple loop unswitcher.
|
||||
|
|
|
@ -27,6 +27,9 @@ struct EntryExitInstrumenterPass
|
|||
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
bool PostInlining;
|
||||
|
||||
static bool isRequired() { return true; }
|
||||
|
|
|
@ -153,6 +153,8 @@ public:
|
|||
ProfileSummaryInfo *PSI;
|
||||
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
void printPipeline(raw_ostream &OS,
|
||||
function_ref<StringRef(StringRef)> MapClassName2PassName);
|
||||
|
||||
// Shim for old PM.
|
||||
LoopVectorizeResult
|
||||
|
|
|
@ -398,3 +398,19 @@ PreservedAnalyses StackLifetimePrinterPass::run(Function &F,
|
|||
SL.print(OS);
|
||||
return PreservedAnalyses::all();
|
||||
}
|
||||
|
||||
void StackLifetimePrinterPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<StackLifetimePrinterPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
switch (Type) {
|
||||
case StackLifetime::LivenessType::May:
|
||||
OS << "may";
|
||||
break;
|
||||
case StackLifetime::LivenessType::Must:
|
||||
OS << "must";
|
||||
break;
|
||||
}
|
||||
OS << ">";
|
||||
}
|
||||
|
|
|
@ -283,3 +283,13 @@ PreservedAnalyses LoopExtractorPass::run(Module &M, ModuleAnalysisManager &AM) {
|
|||
PA.preserve<LoopAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
void LoopExtractorPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<LoopExtractorPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (NumLoops == 1)
|
||||
OS << "single";
|
||||
OS << ">";
|
||||
}
|
||||
|
|
|
@ -1273,6 +1273,16 @@ PreservedAnalyses AddressSanitizerPass::run(Function &F,
|
|||
return PreservedAnalyses::all();
|
||||
}
|
||||
|
||||
void AddressSanitizerPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<AddressSanitizerPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (Options.CompileKernel)
|
||||
OS << "kernel";
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
|
||||
bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
|
||||
AsanDtorKind DestructorKind)
|
||||
|
|
|
@ -504,6 +504,17 @@ PreservedAnalyses HWAddressSanitizerPass::run(Module &M,
|
|||
return PreservedAnalyses::none();
|
||||
return PreservedAnalyses::all();
|
||||
}
|
||||
void HWAddressSanitizerPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<HWAddressSanitizerPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (Options.CompileKernel)
|
||||
OS << "kernel;";
|
||||
if (Options.Recover)
|
||||
OS << "recover";
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
void HWAddressSanitizer::createHwasanCtorComdat() {
|
||||
std::tie(HwasanCtorFunction, std::ignore) =
|
||||
|
|
|
@ -681,6 +681,19 @@ PreservedAnalyses MemorySanitizerPass::run(Module &M,
|
|||
return PreservedAnalyses::none();
|
||||
}
|
||||
|
||||
void MemorySanitizerPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<MemorySanitizerPass> *>(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",
|
||||
|
|
|
@ -1642,6 +1642,16 @@ PreservedAnalyses EarlyCSEPass::run(Function &F,
|
|||
return PA;
|
||||
}
|
||||
|
||||
void EarlyCSEPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<EarlyCSEPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (UseMemorySSA)
|
||||
OS << "memssa";
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
/// A simple and fast domtree-based CSE pass.
|
||||
|
|
|
@ -684,6 +684,24 @@ PreservedAnalyses GVN::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
return PA;
|
||||
}
|
||||
|
||||
void GVN::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<GVN> *>(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<uint32_t, Value*>& d) const {
|
||||
errs() << "{\n";
|
||||
|
|
|
@ -1617,3 +1617,25 @@ PreservedAnalyses LoopUnrollPass::run(Function &F,
|
|||
|
||||
return getLoopPassPreservedAnalyses();
|
||||
}
|
||||
|
||||
void LoopUnrollPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<LoopUnrollPass> *>(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 << ">";
|
||||
}
|
||||
|
|
|
@ -2263,6 +2263,16 @@ PreservedAnalyses LowerMatrixIntrinsicsPass::run(Function &F,
|
|||
return PreservedAnalyses::all();
|
||||
}
|
||||
|
||||
void LowerMatrixIntrinsicsPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<LowerMatrixIntrinsicsPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (Minimal)
|
||||
OS << "minimal";
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class LowerMatrixIntrinsicsLegacyPass : public FunctionPass {
|
||||
|
|
|
@ -420,3 +420,12 @@ MergedLoadStoreMotionPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
void MergedLoadStoreMotionPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<MergedLoadStoreMotionPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
OS << (Options.SplitFooterBB ? "" : "no-") << "split-footer-bb";
|
||||
OS << ">";
|
||||
}
|
||||
|
|
|
@ -3121,6 +3121,17 @@ PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
return PA;
|
||||
}
|
||||
|
||||
void SimpleLoopUnswitchPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<SimpleLoopUnswitchPass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
|
||||
OS << "<";
|
||||
OS << (NonTrivial ? "" : "no-") << "nontrivial;";
|
||||
OS << (Trivial ? "" : "no-") << "trivial";
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class SimpleLoopUnswitchLegacyPass : public LoopPass {
|
||||
|
|
|
@ -183,3 +183,13 @@ llvm::EntryExitInstrumenterPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
void llvm::EntryExitInstrumenterPass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<llvm::EntryExitInstrumenterPass> *>(this)
|
||||
->printPipeline(OS, MapClassName2PassName);
|
||||
OS << "<";
|
||||
if (PostInlining)
|
||||
OS << "post-inline";
|
||||
OS << ">";
|
||||
}
|
||||
|
|
|
@ -10584,3 +10584,14 @@ PreservedAnalyses LoopVectorizePass::run(Function &F,
|
|||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
void LoopVectorizePass::printPipeline(
|
||||
raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
|
||||
static_cast<PassInfoMixin<LoopVectorizePass> *>(this)->printPipeline(
|
||||
OS, MapClassName2PassName);
|
||||
|
||||
OS << "<";
|
||||
OS << (InterleaveOnlyWhenForced ? "" : "no-") << "interleave-forced-only;";
|
||||
OS << (VectorizeOnlyWhenForced ? "" : "no-") << "vectorize-forced-only;";
|
||||
OS << ">";
|
||||
}
|
||||
|
|
|
@ -18,3 +18,46 @@
|
|||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='cgscc(argpromotion,require<no-op-cgscc>,no-op-cgscc,devirt<7>(inline,no-op-cgscc)),function(loop(require<no-op-loop>))' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-5
|
||||
; CHECK-5: cgscc(argpromotion,require<no-op-cgscc>,no-op-cgscc,devirt<7>(inline,no-op-cgscc)),function(loop(require<no-op-loop>))
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(ee-instrument<>,ee-instrument<post-inline>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-6
|
||||
; CHECK-6: function(ee-instrument<>,ee-instrument<post-inline>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='loop(simple-loop-unswitch<nontrivial;trivial>,simple-loop-unswitch<no-nontrivial;no-trivial>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-7
|
||||
; CHECK-7: function(loop(simple-loop-unswitch<nontrivial;trivial>,simple-loop-unswitch<no-nontrivial;no-trivial>))
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(mldst-motion<split-footer-bb>,mldst-motion<no-split-footer-bb>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-8
|
||||
; CHECK-8: function(mldst-motion<split-footer-bb>,mldst-motion<no-split-footer-bb>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(lower-matrix-intrinsics<>,lower-matrix-intrinsics<minimal>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-9
|
||||
; CHECK-9: function(lower-matrix-intrinsics<>,lower-matrix-intrinsics<minimal>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(loop-unroll<>,loop-unroll<partial;peeling;runtime;upperbound;profile-peeling;full-unroll-max=5;O1>,loop-unroll<no-partial;no-peeling;no-runtime;no-upperbound;no-profile-peeling;full-unroll-max=7;O1>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-10
|
||||
; CHECK-10: function(loop-unroll<O2>,loop-unroll<partial;peeling;runtime;upperbound;profile-peeling;full-unroll-max=5;O1>,loop-unroll<no-partial;no-peeling;no-runtime;no-upperbound;no-profile-peeling;full-unroll-max=7;O1>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(gvn<>,gvn<pre;load-pre;split-backedge-load-pre;memdep>,gvn<no-pre;no-load-pre;no-split-backedge-load-pre;no-memdep>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-11
|
||||
; CHECK-11: function(gvn<>,gvn<pre;load-pre;split-backedge-load-pre;memdep>,gvn<no-pre;no-load-pre;no-split-backedge-load-pre;no-memdep>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(early-cse<>,early-cse<memssa>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-12
|
||||
; CHECK-12: function(early-cse<>,early-cse<memssa>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(msan<>,msan<recover;kernel;track-origins=5>)' < %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<track-origins=0>,msan-module<recover;kernel;track-origins=5>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan<kernel;recover>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
|
||||
; CHECK-14: hwasan<>,hwasan<kernel;recover>
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan<kernel>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
|
||||
; CHECK-15: function(asan<>,asan<kernel>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract<single>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
|
||||
; CHECK-16: loop-extract<>,loop-extract<single>
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(print<stack-lifetime><may>,print<stack-lifetime><must>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-17
|
||||
; CHECK-17: function(print<stack-lifetime><may>,print<stack-lifetime><must>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(simplifycfg<bonus-inst-threshold=5;forward-switch-cond;switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts>,simplifycfg<bonus-inst-threshold=7;no-forward-switch-cond;no-switch-to-lookup;no-keep-loops;no-hoist-common-insts;no-sink-common-insts>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-18
|
||||
; CHECK-18: function(simplifycfg<bonus-inst-threshold=5;forward-switch-cond;switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts>,simplifycfg<bonus-inst-threshold=7;no-forward-switch-cond;no-switch-to-lookup;no-keep-loops;no-hoist-common-insts;no-sink-common-insts>)
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only>,loop-vectorize<interleave-forced-only;vectorize-forced-only>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-19
|
||||
; CHECK-19: function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,loop-vectorize<interleave-forced-only;vectorize-forced-only;>)
|
||||
|
|
Loading…
Reference in New Issue