[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