From: Alina Sbirlea Date: Wed, 8 May 2019 17:58:35 +0000 (+0000) Subject: [NewPassManager] Add tuning option: SLPVectorization [NFC]. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f4f5af4331abb90b262f38699cf923cb37eb07a;p=llvm [NewPassManager] Add tuning option: SLPVectorization [NFC]. Summary: Mirror tuning option from old pass manager in new pass manager. Reviewers: chandlerc Subscribers: mehdi_amini, jlebar, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D61616 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360276 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Passes/PassBuilder.h b/include/llvm/Passes/PassBuilder.h index 1218761082c..1f81181c636 100644 --- a/include/llvm/Passes/PassBuilder.h +++ b/include/llvm/Passes/PassBuilder.h @@ -81,6 +81,10 @@ public: /// that of the flag: `-vectorize-loops`. bool LoopVectorization; + /// Tuning option to enable/disable slp loop vectorization. Its default value + /// is that of the flag: `vectorize-slp`. + bool SLPVectorization; + /// Tuning option to cap the number of calls to retrive clobbering accesses in /// MemorySSA, in LICM. unsigned LicmMssaOptCap; diff --git a/include/llvm/Transforms/Vectorize/SLPVectorizer.h b/include/llvm/Transforms/Vectorize/SLPVectorizer.h index 9be70557b5b..ac6afb761d4 100644 --- a/include/llvm/Transforms/Vectorize/SLPVectorizer.h +++ b/include/llvm/Transforms/Vectorize/SLPVectorizer.h @@ -55,6 +55,8 @@ class BoUpSLP; } // end namespace slpvectorizer +extern cl::opt RunSLPVectorization; + struct SLPVectorizerPass : public PassInfoMixin { using StoreList = SmallVector; using StoreListMap = MapVector; diff --git a/lib/Passes/PassBuilder.cpp b/lib/Passes/PassBuilder.cpp index f8c62a876ff..89b9c520af8 100644 --- a/lib/Passes/PassBuilder.cpp +++ b/lib/Passes/PassBuilder.cpp @@ -214,6 +214,7 @@ static cl::opt PipelineTuningOptions::PipelineTuningOptions() { LoopInterleaving = EnableLoopInterleaving; LoopVectorization = EnableLoopVectorization; + SLPVectorization = RunSLPVectorization; LicmMssaOptCap = SetLicmMssaOptCap; LicmMssaNoAccForPromotionCap = SetLicmMssaNoAccForPromotionCap; } @@ -888,7 +889,8 @@ ModulePassManager PassBuilder::buildModuleOptimizationPipeline( sinkCommonInsts(true))); // Optimize parallel scalar instruction chains into SIMD instructions. - OptimizePM.addPass(SLPVectorizerPass()); + if (PTO.SLPVectorization) + OptimizePM.addPass(SLPVectorizerPass()); OptimizePM.addPass(InstCombinePass()); diff --git a/lib/Transforms/IPO/PassManagerBuilder.cpp b/lib/Transforms/IPO/PassManagerBuilder.cpp index e8b4b8fe75b..298cf47ed83 100644 --- a/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -43,6 +43,7 @@ #include "llvm/Transforms/Utils.h" #include "llvm/Transforms/Vectorize.h" #include "llvm/Transforms/Vectorize/LoopVectorize.h" +#include "llvm/Transforms/Vectorize/SLPVectorizer.h" using namespace llvm; @@ -50,10 +51,6 @@ static cl::opt RunPartialInlining("enable-partial-inlining", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Run Partial inlinining pass")); -static cl::opt -RunSLPVectorization("vectorize-slp", cl::Hidden, - cl::desc("Run the SLP vectorization passes")); - static cl::opt UseGVNAfterVectorization("use-gvn-after-vectorization", cl::init(false), cl::Hidden, diff --git a/lib/Transforms/Vectorize/SLPVectorizer.cpp b/lib/Transforms/Vectorize/SLPVectorizer.cpp index ff9a2d2bf77..f350db5c5fc 100644 --- a/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -105,6 +105,10 @@ using namespace slpvectorizer; STATISTIC(NumVectorInstructions, "Number of vector instructions generated"); +cl::opt + llvm::RunSLPVectorization("vectorize-slp", cl::init(true), cl::Hidden, + cl::desc("Run the SLP vectorization passes")); + static cl::opt SLPCostThreshold("slp-threshold", cl::init(0), cl::Hidden, cl::desc("Only vectorize if you gain more than this "