diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -2139,6 +2139,41 @@ return UnrollOpts; } +Expected parseSinglePassOption(StringRef Params, StringRef OptionName, + StringRef PassName) { + bool Result = false; + while (!Params.empty()) { + StringRef ParamName; + std::tie(ParamName, Params) = Params.split(';'); + + if (ParamName == OptionName) { + Result = true; + } else { + return make_error( + formatv("invalid {1} pass parameter '{0}' ", ParamName, PassName) + .str(), + inconvertibleErrorCode()); + } + } + return Result; +} + +Expected parseEarlyCSEPassOptions(StringRef Params) { + return parseSinglePassOption(Params, "memssa", "EarlyCSE"); +} + +Expected parseEntryExitInstrumenterPassOptions(StringRef Params) { + return parseSinglePassOption(Params, "post-inline", "EntryExitInstrumenter"); +} + +Expected parseLoopExtractorPassOptions(StringRef Params) { + return parseSinglePassOption(Params, "single", "LoopExtractor"); +} + +Expected parseLowerMatrixIntrinsicsPassOptions(StringRef Params) { + return parseSinglePassOption(Params, "minimal", "LowerMatrixIntrinsics"); +} + Expected parseASanPassOptions(StringRef Params) { AddressSanitizerOptions Result; while (!Params.empty()) { diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -73,7 +73,6 @@ MODULE_PASS("ipsccp", IPSCCPPass()) MODULE_PASS("iroutliner", IROutlinerPass()) MODULE_PASS("print-ir-similarity", IRSimilarityAnalysisPrinterPass(dbgs())) -MODULE_PASS("loop-extract", LoopExtractorPass()) MODULE_PASS("lowertypetests", LowerTypeTestsPass()) MODULE_PASS("metarenamer", MetaRenamerPass()) MODULE_PASS("mergefunc", MergeFunctionsPass()) @@ -99,7 +98,6 @@ MODULE_PASS("sample-profile", SampleProfileLoaderPass()) MODULE_PASS("scc-oz-module-inliner", buildInlinerPipeline(OptimizationLevel::Oz, ThinOrFullLTOPhase::None)) -MODULE_PASS("loop-extract-single", LoopExtractorPass(1)) MODULE_PASS("strip", StripSymbolsPass()) MODULE_PASS("strip-dead-debug-info", StripDeadDebugInfoPass()) MODULE_PASS("pseudo-probe", SampleProfileProbePass(TM)) @@ -124,6 +122,15 @@ #ifndef MODULE_PASS_WITH_PARAMS #define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) #endif +MODULE_PASS_WITH_PARAMS("loop-extract", + "LoopExtractorPass", + [](bool Single) { + if (Single) + return LoopExtractorPass(1); + return LoopExtractorPass(); + }, + parseLoopExtractorPassOptions, + "single") MODULE_PASS_WITH_PARAMS("hwasan", "HWAddressSanitizerPass", [](HWAddressSanitizerOptions Opts) { @@ -227,12 +234,8 @@ FUNCTION_PASS("dse", DSEPass()) FUNCTION_PASS("dot-cfg", CFGPrinterPass()) FUNCTION_PASS("dot-cfg-only", CFGOnlyPrinterPass()) -FUNCTION_PASS("early-cse", EarlyCSEPass(/*UseMemorySSA=*/false)) -FUNCTION_PASS("early-cse-memssa", EarlyCSEPass(/*UseMemorySSA=*/true)) -FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass(/*PostInlining=*/false)) FUNCTION_PASS("fix-irreducible", FixIrreduciblePass()) FUNCTION_PASS("make-guards-explicit", MakeGuardsExplicitPass()) -FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass(/*PostInlining=*/true)) FUNCTION_PASS("gvn-hoist", GVNHoistPass()) FUNCTION_PASS("gvn-sink", GVNSinkPass()) FUNCTION_PASS("helloworld", HelloWorldPass()) @@ -252,8 +255,6 @@ FUNCTION_PASS("lower-expect", LowerExpectIntrinsicPass()) FUNCTION_PASS("lower-guard-intrinsic", LowerGuardIntrinsicPass()) FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass()) -FUNCTION_PASS("lower-matrix-intrinsics", LowerMatrixIntrinsicsPass()) -FUNCTION_PASS("lower-matrix-intrinsics-minimal", LowerMatrixIntrinsicsPass(true)) FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass()) FUNCTION_PASS("guard-widening", GuardWideningPass()) FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass()) @@ -340,6 +341,27 @@ #ifndef FUNCTION_PASS_WITH_PARAMS #define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) #endif +FUNCTION_PASS_WITH_PARAMS("early-cse", + "EarlyCSEPass", + [](bool UseMemorySSA) { + return EarlyCSEPass(UseMemorySSA); + }, + parseEarlyCSEPassOptions, + "memssa") +FUNCTION_PASS_WITH_PARAMS("ee-instrument", + "EntryExitInstrumenterPass", + [](bool PostInlining) { + return EntryExitInstrumenterPass(PostInlining); + }, + parseEntryExitInstrumenterPassOptions, + "post-inline") +FUNCTION_PASS_WITH_PARAMS("lower-matrix-intrinsics", + "LowerMatrixIntrinsicsPass", + [](bool Minimal) { + return LowerMatrixIntrinsicsPass(Minimal); + }, + parseLowerMatrixIntrinsicsPassOptions, + "minimal") FUNCTION_PASS_WITH_PARAMS("loop-unroll", "LoopUnrollPass", [](LoopUnrollOptions Opts) { diff --git a/llvm/test/Analysis/MemorySSA/invalidate.ll b/llvm/test/Analysis/MemorySSA/invalidate.ll --- a/llvm/test/Analysis/MemorySSA/invalidate.ll +++ b/llvm/test/Analysis/MemorySSA/invalidate.ll @@ -1,7 +1,7 @@ -; RUN: opt -aa-pipeline=basic-aa -passes='require,invalidate,early-cse-memssa' \ +; RUN: opt -aa-pipeline=basic-aa -passes='require,invalidate,early-cse' \ ; RUN: -debug-pass-manager -disable-output %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-AA-INVALIDATE -; RUN: opt -aa-pipeline=basic-aa -passes='require,invalidate,early-cse-memssa' \ +; RUN: opt -aa-pipeline=basic-aa -passes='require,invalidate,early-cse' \ ; RUN: -debug-pass-manager -disable-output %s 2>&1 \ ; RUN: | FileCheck %s --check-prefix=CHECK-DT-INVALIDATE diff --git a/llvm/test/Transforms/EarlyCSE/AArch64/intrinsics.ll b/llvm/test/Transforms/EarlyCSE/AArch64/intrinsics.ll --- a/llvm/test/Transforms/EarlyCSE/AArch64/intrinsics.ll +++ b/llvm/test/Transforms/EarlyCSE/AArch64/intrinsics.ll @@ -1,7 +1,7 @@ ; RUN: opt < %s -S -mtriple=aarch64-none-linux-gnu -mattr=+neon -early-cse -earlycse-debug-hash | FileCheck %s ; RUN: opt < %s -S -mtriple=aarch64-none-linux-gnu -mattr=+neon -basic-aa -early-cse-memssa | FileCheck %s ; RUN: opt < %s -S -mtriple=aarch64-none-linux-gnu -mattr=+neon -passes=early-cse | FileCheck %s -; RUN: opt < %s -S -mtriple=aarch64-none-linux-gnu -mattr=+neon -aa-pipeline=basic-aa -passes=early-cse-memssa | FileCheck %s +; RUN: opt < %s -S -mtriple=aarch64-none-linux-gnu -mattr=+neon -aa-pipeline=basic-aa -passes='early-cse' | FileCheck %s define <4 x i32> @test_cse(i32* %a, [2 x <4 x i32>] %s.coerce, i32 %n) { entry: diff --git a/llvm/test/Transforms/EarlyCSE/memoryssa.ll b/llvm/test/Transforms/EarlyCSE/memoryssa.ll --- a/llvm/test/Transforms/EarlyCSE/memoryssa.ll +++ b/llvm/test/Transforms/EarlyCSE/memoryssa.ll @@ -1,7 +1,7 @@ ; RUN: opt < %s -S -early-cse -earlycse-debug-hash | FileCheck %s --check-prefix=CHECK-NOMEMSSA ; RUN: opt < %s -S -basic-aa -early-cse-memssa | FileCheck %s ; RUN: opt < %s -S -passes='early-cse' | FileCheck %s --check-prefix=CHECK-NOMEMSSA -; RUN: opt < %s -S -aa-pipeline=basic-aa -passes='early-cse-memssa' | FileCheck %s +; RUN: opt < %s -S -aa-pipeline=basic-aa -passes='early-cse' | FileCheck %s @G1 = global i32 zeroinitializer @G2 = global i32 zeroinitializer diff --git a/llvm/test/Transforms/EntryExitInstrumenter/debug-info.ll b/llvm/test/Transforms/EntryExitInstrumenter/debug-info.ll --- a/llvm/test/Transforms/EntryExitInstrumenter/debug-info.ll +++ b/llvm/test/Transforms/EntryExitInstrumenter/debug-info.ll @@ -1,4 +1,4 @@ -; RUN: opt -passes="function(ee-instrument),cgscc(inline),function(post-inline-ee-instrument)" -S < %s | FileCheck %s +; RUN: opt -passes="function(ee-instrument),cgscc(inline),function(ee-instrument)" -S < %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" diff --git a/llvm/test/Transforms/EntryExitInstrumenter/mcount.ll b/llvm/test/Transforms/EntryExitInstrumenter/mcount.ll --- a/llvm/test/Transforms/EntryExitInstrumenter/mcount.ll +++ b/llvm/test/Transforms/EntryExitInstrumenter/mcount.ll @@ -1,7 +1,7 @@ -; RUN: opt -passes="function(ee-instrument),cgscc(inline),function(post-inline-ee-instrument)" -S < %s | FileCheck %s +; RUN: opt -passes="function(ee-instrument),cgscc(inline),function(ee-instrument)" -S < %s | FileCheck %s ; Running the passes twice should not result in more instrumentation. -; RUN: opt -passes="function(ee-instrument),function(ee-instrument),cgscc(inline),function(post-inline-ee-instrument),function(post-inline-ee-instrument)" -S < %s | FileCheck %s +; RUN: opt -passes="function(ee-instrument),function(ee-instrument),cgscc(inline),function(ee-instrument),function(ee-instrument)" -S < %s | FileCheck %s target datalayout = "E-m:e-i64:64-n32:64" target triple = "powerpc64le-unknown-linux" diff --git a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-minimal.ll b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-minimal.ll --- a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-minimal.ll +++ b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-minimal.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -lower-matrix-intrinsics-minimal -fuse-matrix-tile-size=2 -matrix-allow-contract -force-fuse-matrix -instcombine -verify-dom-info %s -S | FileCheck %s -; RUN: opt -passes='lower-matrix-intrinsics-minimal,instcombine,verify' -fuse-matrix-tile-size=2 -matrix-allow-contract -force-fuse-matrix %s -S | FileCheck %s +; RUN: opt -passes='lower-matrix-intrinsics,instcombine,verify' -fuse-matrix-tile-size=2 -matrix-allow-contract -force-fuse-matrix %s -S | FileCheck %s ; Test for the minimal version of the matrix lowering pass, which does not ; require DT or AA. Make sure no tiling is happening, even though it was diff --git a/llvm/tools/opt/NewPMDriver.cpp b/llvm/tools/opt/NewPMDriver.cpp --- a/llvm/tools/opt/NewPMDriver.cpp +++ b/llvm/tools/opt/NewPMDriver.cpp @@ -412,6 +412,7 @@ if (EnableDebugify) MPM.addPass(NewPMDebugifyPass()); + // Add passes according to the -passes options. if (!PassPipeline.empty()) { assert(Passes.empty() && "PassPipeline and Passes should not both contain passes"); @@ -420,10 +421,26 @@ return false; } } + // Add passes specified using the legacy PM syntax (i.e. not using + // -passes). This should be removed later when such support has been + // deprecated, i.e. when all lit tests running opt (and not using + // -enable-new-pm=0) have been updated to use -passes. for (auto PassName : Passes) { std::string ModifiedPassName(PassName.begin(), PassName.end()); if (PB.isAnalysisPassName(PassName)) ModifiedPassName = "require<" + ModifiedPassName + ">"; + // FIXME: These translations are supposed to be removed when lit tests that + // use these names have been updated to use the -passes syntax (and when the + // support for using the old syntax to specify passes is considered as + // deprecated for the new PM). + if (ModifiedPassName == "early-cse-memssa") + ModifiedPassName = "early-cse"; + else if (ModifiedPassName == "post-inline-ee-instrument") + ModifiedPassName = "ee-instrument"; + else if (ModifiedPassName == "loop-extract-single") + ModifiedPassName = "loop-extract"; + else if (ModifiedPassName == "lower-matrix-intrinsics-minimal") + ModifiedPassName = "lower-matrix-intrinsics"; if (auto Err = PB.parsePassPipeline(MPM, ModifiedPassName)) { errs() << Arg0 << ": " << toString(std::move(Err)) << "\n"; return false;