Skip to content

Commit da439d3

Browse files
authored
[SLP] NFC. Refactor getEntryCost and isReverseOrder usage. (#119680)
Users should check whether an input is empty before using isReverseOrder.
1 parent a44915a commit da439d3

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4782,8 +4782,10 @@ static Align computeCommonAlignment(ArrayRef<Value *> VL) {
47824782

47834783
/// Check if \p Order represents reverse order.
47844784
static bool isReverseOrder(ArrayRef<unsigned> Order) {
4785+
assert(!Order.empty() &&
4786+
"Order is empty. Please check it before using isReverseOrder.");
47854787
unsigned Sz = Order.size();
4786-
return !Order.empty() && all_of(enumerate(Order), [&](const auto &Pair) {
4788+
return all_of(enumerate(Order), [&](const auto &Pair) {
47874789
return Pair.value() == Sz || Sz - Pair.index() - 1 == Pair.value();
47884790
});
47894791
}
@@ -9839,7 +9841,7 @@ void BoUpSLP::transformNodes() {
98399841
Align CommonAlignment = computeCommonAlignment<LoadInst>(E.Scalars);
98409842
// Check if profitable to represent consecutive load + reverse as strided
98419843
// load with stride -1.
9842-
if (isReverseOrder(E.ReorderIndices) &&
9844+
if (!E.ReorderIndices.empty() && isReverseOrder(E.ReorderIndices) &&
98439845
TTI->isLegalStridedLoadStore(VecTy, CommonAlignment)) {
98449846
SmallVector<int> Mask;
98459847
inversePermutation(E.ReorderIndices, Mask);
@@ -9866,7 +9868,7 @@ void BoUpSLP::transformNodes() {
98669868
Align CommonAlignment = computeCommonAlignment<StoreInst>(E.Scalars);
98679869
// Check if profitable to represent consecutive load + reverse as strided
98689870
// load with stride -1.
9869-
if (isReverseOrder(E.ReorderIndices) &&
9871+
if (!E.ReorderIndices.empty() && isReverseOrder(E.ReorderIndices) &&
98709872
TTI->isLegalStridedLoadStore(VecTy, CommonAlignment)) {
98719873
SmallVector<int> Mask;
98729874
inversePermutation(E.ReorderIndices, Mask);
@@ -10992,7 +10994,6 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1099210994
unsigned EntryVF = E->getVectorFactor();
1099310995
auto *FinalVecTy = getWidenedType(ScalarTy, EntryVF);
1099410996

10995-
bool NeedToShuffleReuses = !E->ReuseShuffleIndices.empty();
1099610997
if (E->isGather()) {
1099710998
if (allConstant(VL))
1099810999
return 0;
@@ -11005,9 +11006,8 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1100511006
}
1100611007
InstructionCost CommonCost = 0;
1100711008
SmallVector<int> Mask;
11008-
bool IsReverseOrder = isReverseOrder(E->ReorderIndices);
11009-
if (!E->ReorderIndices.empty() &&
11010-
(E->State != TreeEntry::StridedVectorize || !IsReverseOrder)) {
11009+
if (!E->ReorderIndices.empty() && (E->State != TreeEntry::StridedVectorize ||
11010+
!isReverseOrder(E->ReorderIndices))) {
1101111011
SmallVector<int> NewMask;
1101211012
if (E->getOpcode() == Instruction::Store) {
1101311013
// For stores the order is actually a mask.
@@ -11018,7 +11018,7 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1101811018
}
1101911019
::addMask(Mask, NewMask);
1102011020
}
11021-
if (NeedToShuffleReuses)
11021+
if (!E->ReuseShuffleIndices.empty())
1102211022
::addMask(Mask, E->ReuseShuffleIndices);
1102311023
if (!Mask.empty() && !ShuffleVectorInst::isIdentityMask(Mask, Mask.size()))
1102411024
CommonCost =
@@ -15068,7 +15068,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1506815068
return Vec;
1506915069
}
1507015070

15071-
bool IsReverseOrder = isReverseOrder(E->ReorderIndices);
15071+
bool IsReverseOrder =
15072+
!E->ReorderIndices.empty() && isReverseOrder(E->ReorderIndices);
1507215073
auto FinalShuffle = [&](Value *V, const TreeEntry *E) {
1507315074
ShuffleInstructionBuilder ShuffleBuilder(ScalarTy, Builder, *this);
1507415075
if (E->getOpcode() == Instruction::Store &&

0 commit comments

Comments
 (0)