From: Alexey Bataev Date: Thu, 27 Jul 2017 15:48:44 +0000 (+0000) Subject: [SLP] Outline code for the check that instruction users are part of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fb84191e188ade23d753f5abb54fb6c17872d7b4;p=llvm [SLP] Outline code for the check that instruction users are part of vectorization tree, NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309284 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Vectorize/SLPVectorizer.cpp b/lib/Transforms/Vectorize/SLPVectorizer.cpp index 3e6f84ae7e0..9931c78fcbc 100644 --- a/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -416,6 +416,9 @@ public: private: struct TreeEntry; + /// Checks if all users of \p I are the part of the vectorization tree. + bool areAllUsersVectorized(Instruction *I) const; + /// \returns the cost of the vectorizable entry. int getEntryCost(TreeEntry *E); @@ -1702,6 +1705,13 @@ bool BoUpSLP::canReuseExtract(ArrayRef VL, Value *OpValue) const { return true; } +bool BoUpSLP::areAllUsersVectorized(Instruction *I) const { + return I->hasOneUse() || + std::all_of(I->user_begin(), I->user_end(), [this](User *U) { + return ScalarToTreeEntry.count(U) > 0; + }); +} + int BoUpSLP::getEntryCost(TreeEntry *E) { ArrayRef VL = E->Scalars; @@ -1742,10 +1752,7 @@ int BoUpSLP::getEntryCost(TreeEntry *E) { // If all users are going to be vectorized, instruction can be // considered as dead. // The same, if have only one user, it will be vectorized for sure. - if (E->hasOneUse() || - std::all_of(E->user_begin(), E->user_end(), [this](User *U) { - return ScalarToTreeEntry.count(U) > 0; - })) + if (areAllUsersVectorized(E)) // Take credit for instruction that will become dead. DeadCost += TTI->getVectorInstrCost(Instruction::ExtractElement, VecTy, i);