[llvm] r309816 - [SLPVectorizer] Generalize interface of functions, NFC.
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 2 07:38:07 PDT 2017
Author: abataev
Date: Wed Aug 2 07:38:07 2017
New Revision: 309816
URL: http://llvm.org/viewvc/llvm-project?rev=309816&view=rev
Log:
[SLPVectorizer] Generalize interface of functions, NFC.
Modified:
llvm/trunk/include/llvm/Transforms/Vectorize/SLPVectorizer.h
llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
Modified: llvm/trunk/include/llvm/Transforms/Vectorize/SLPVectorizer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Vectorize/SLPVectorizer.h?rev=309816&r1=309815&r2=309816&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Transforms/Vectorize/SLPVectorizer.h (original)
+++ llvm/trunk/include/llvm/Transforms/Vectorize/SLPVectorizer.h Wed Aug 2 07:38:07 2017
@@ -84,8 +84,8 @@ private:
ArrayRef<Value *> BuildVector = None,
bool AllowReorder = false);
- /// \brief Try to vectorize a chain that may start at the operands of \p V.
- bool tryToVectorize(BinaryOperator *V, slpvectorizer::BoUpSLP &R);
+ /// \brief Try to vectorize a chain that may start at the operands of \p I.
+ bool tryToVectorize(Instruction *I, slpvectorizer::BoUpSLP &R);
/// \brief Vectorize the store instructions collected in Stores.
bool vectorizeStoreChains(slpvectorizer::BoUpSLP &R);
Modified: llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=309816&r1=309815&r2=309816&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp Wed Aug 2 07:38:07 2017
@@ -4352,15 +4352,18 @@ bool SLPVectorizerPass::tryToVectorizeLi
return Changed;
}
-bool SLPVectorizerPass::tryToVectorize(BinaryOperator *V, BoUpSLP &R) {
- if (!V)
+bool SLPVectorizerPass::tryToVectorize(Instruction *I, BoUpSLP &R) {
+ if (!I)
+ return false;
+
+ if (!isa<BinaryOperator>(I))
return false;
- Value *P = V->getParent();
+ Value *P = I->getParent();
// Vectorize in current basic block only.
- auto *Op0 = dyn_cast<Instruction>(V->getOperand(0));
- auto *Op1 = dyn_cast<Instruction>(V->getOperand(1));
+ auto *Op0 = dyn_cast<Instruction>(I->getOperand(0));
+ auto *Op1 = dyn_cast<Instruction>(I->getOperand(1));
if (!Op0 || !Op1 || Op0->getParent() != P || Op1->getParent() != P)
return false;
@@ -5015,7 +5018,7 @@ static Value *getReductionValue(const Do
static bool tryToVectorizeHorReductionOrInstOperands(
PHINode *P, Instruction *Root, BasicBlock *BB, BoUpSLP &R,
TargetTransformInfo *TTI,
- const function_ref<bool(BinaryOperator *, BoUpSLP &)> Vectorize) {
+ const function_ref<bool(Instruction *, BoUpSLP &)> Vectorize) {
if (!ShouldVectorizeHor)
return false;
@@ -5071,7 +5074,7 @@ static bool tryToVectorizeHorReductionOr
// Set P to nullptr to avoid re-analysis of phi node in
// matchAssociativeReduction function unless this is the root node.
P = nullptr;
- if (Vectorize(dyn_cast<BinaryOperator>(Inst), R)) {
+ if (Vectorize(Inst, R)) {
Res = true;
continue;
}
@@ -5101,10 +5104,11 @@ bool SLPVectorizerPass::vectorizeRootIns
if (!isa<BinaryOperator>(I))
P = nullptr;
// Try to match and vectorize a horizontal reduction.
- return tryToVectorizeHorReductionOrInstOperands(
- P, I, BB, R, TTI, [this](BinaryOperator *BI, BoUpSLP &R) -> bool {
- return tryToVectorize(BI, R);
- });
+ auto &&ExtraVectorization = [this](Instruction *I, BoUpSLP &R) -> bool {
+ return tryToVectorize(I, R);
+ };
+ return tryToVectorizeHorReductionOrInstOperands(P, I, BB, R, TTI,
+ ExtraVectorization);
}
bool SLPVectorizerPass::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
More information about the llvm-commits
mailing list