[llvm] [SandboxVec] User-defined pass pipeline (PR #108625)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 13 11:53:23 PDT 2024
https://github.com/vporpo created https://github.com/llvm/llvm-project/pull/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.
>From 99cc1c9f587c8366aa38366b5c10715a2971851f Mon Sep 17 00:00:00 2001
From: Vasileios Porpodas <vporpodas at google.com>
Date: Wed, 11 Sep 2024 13:51:09 -0700
Subject: [PATCH] [SandboxVec] User-defined pass pipeline
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.
---
.../SandboxVectorizer/SandboxVectorizer.cpp | 26 ++++++++++++++-----
.../SandboxVectorizer/user_pass_pipeline.ll | 12 +++++++++
2 files changed, 32 insertions(+), 6 deletions(-)
create mode 100644 llvm/test/Transforms/SandboxVectorizer/user_pass_pipeline.ll
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