[llvm] 5130f32 - [SandboxVec] User-defined pass pipeline (#108625)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 13 13:14:09 PDT 2024
Author: vporpo
Date: 2024-09-13T13:14:06-07:00
New Revision: 5130f3236f855436f4fa78a8ad7be0b39e638741
URL: https://github.com/llvm/llvm-project/commit/5130f3236f855436f4fa78a8ad7be0b39e638741
DIFF: https://github.com/llvm/llvm-project/commit/5130f3236f855436f4fa78a8ad7be0b39e638741.diff
LOG: [SandboxVec] User-defined pass pipeline (#108625)
This patch adds support for a user-defined pass-pipeline that overrides
the default pipeline of the vectorizer.
This will commonly be used by lit tests.
Added:
llvm/test/Transforms/SandboxVectorizer/user_pass_pipeline.ll
Modified:
llvm/lib/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizer.cpp
index 562cb5149e3198..161d300e6e9f2e 100644
--- a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizer.cpp
@@ -22,6 +22,14 @@ cl::opt<bool>
PrintPassPipeline("sbvec-print-pass-pipeline", cl::init(false), cl::Hidden,
cl::desc("Prints the pass pipeline and returns."));
+/// A magic string for the default pass pipeline.
+const char *DefaultPipelineMagicStr = "*";
+
+cl::opt<std::string> UserDefinedPassPipeline(
+ "sbvec-passes", cl::init(DefaultPipelineMagicStr), cl::Hidden,
+ cl::desc("Comma-separated list of vectorizer passes. If not set "
+ "we run the predefined pipeline."));
+
PreservedAnalyses SandboxVectorizerPass::run(Function &F,
FunctionAnalysisManager &AM) {
TTI = &AM.getResult<TargetIRAnalysis>(F);
@@ -53,20 +61,26 @@ bool SandboxVectorizerPass::runImpl(Function &LLVMF) {
sandboxir::Function &F = *Ctx.createFunction(&LLVMF);
// Create the passes and register them with the PassRegistry.
sandboxir::PassRegistry PR;
- auto &PM = static_cast<sandboxir::FunctionPassManager &>(
- PR.registerPass(std::make_unique<sandboxir::FunctionPassManager>("pm")));
auto &BottomUpVecPass = static_cast<sandboxir::FunctionPass &>(
PR.registerPass(std::make_unique<sandboxir::BottomUpVec>()));
- // Create the default pass pipeline.
- PM.addPass(&BottomUpVecPass);
+ sandboxir::FunctionPassManager *PM = nullptr;
+ if (UserDefinedPassPipeline == DefaultPipelineMagicStr) {
+ // Create the default pass pipeline.
+ PM = &static_cast<sandboxir::FunctionPassManager &>(PR.registerPass(
+ std::make_unique<sandboxir::FunctionPassManager>("pm")));
+ PM->addPass(&BottomUpVecPass);
+ } else {
+ // Create the user-defined pipeline.
+ PM = &PR.parseAndCreatePassPipeline(UserDefinedPassPipeline);
+ }
if (PrintPassPipeline) {
- PM.printPipeline(outs());
+ PM->printPipeline(outs());
return false;
}
// Run the pass pipeline.
- bool Change = PM.runOnFunction(F);
+ bool Change = PM->runOnFunction(F);
return Change;
}
diff --git a/llvm/test/Transforms/SandboxVectorizer/user_pass_pipeline.ll b/llvm/test/Transforms/SandboxVectorizer/user_pass_pipeline.ll
new file mode 100644
index 00000000000000..2879fbba1b9c00
--- /dev/null
+++ b/llvm/test/Transforms/SandboxVectorizer/user_pass_pipeline.ll
@@ -0,0 +1,12 @@
+; RUN: opt -passes=sandbox-vectorizer -sbvec-print-pass-pipeline -sbvec-passes=bottom-up-vec,bottom-up-vec %s -disable-output | FileCheck %s
+
+; !!!WARNING!!! This won't get updated by update_test_checks.py !
+
+; This checks the user defined pass pipeline.
+define void @pipeline() {
+; CHECK: pm
+; CHECK: bottom-up-vec
+; CHECK: bottom-up-vec
+; CHECK-EMPTY:
+ ret void
+}
More information about the llvm-commits
mailing list