-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[SandboxVec] User-defined pass pipeline #108625
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
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.
@llvm/pr-subscribers-llvm-transforms Author: vporpo (vporpo) ChangesThis patch adds support for a user-defined pass-pipeline that overrides the default pipeline of the vectorizer. Full diff: https://github.com/llvm/llvm-project/pull/108625.diff 2 Files Affected:
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
+}
|
The windows bot failure is not related to this patch, so I will go ahead and merge it. |
For the following patches please make both bots green. "The windows bot failure is not related to this patch," can get you in trouble. |
These changes are very localized and I am testing them extensively locally. If there is indeed an issue the post-commit bots will notify me and I will revert the patch. |
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.