Skip to content

Commit dbeacd6

Browse files
committed
[SLP] NFC. Refactor getEntryCost and isReverseOrder usage.
Users should check whether an input is empty before using isReverseOrder.
1 parent 2f18b5e commit dbeacd6

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
@@ -4780,8 +4780,10 @@ static Align computeCommonAlignment(ArrayRef<Value *> VL) {
47804780

47814781
/// Check if \p Order represents reverse order.
47824782
static bool isReverseOrder(ArrayRef<unsigned> Order) {
4783+
assert(!Order.empty() &&
4784+
"Order is empty. Please check it before using isReverseOrder.");
47834785
unsigned Sz = Order.size();
4784-
return !Order.empty() && all_of(enumerate(Order), [&](const auto &Pair) {
4786+
return all_of(enumerate(Order), [&](const auto &Pair) {
47854787
return Pair.value() == Sz || Sz - Pair.index() - 1 == Pair.value();
47864788
});
47874789
}
@@ -9837,7 +9839,7 @@ void BoUpSLP::transformNodes() {
98379839
Align CommonAlignment = computeCommonAlignment<LoadInst>(E.Scalars);
98389840
// Check if profitable to represent consecutive load + reverse as strided
98399841
// load with stride -1.
9840-
if (isReverseOrder(E.ReorderIndices) &&
9842+
if (!E.ReorderIndices.empty() && isReverseOrder(E.ReorderIndices) &&
98419843
TTI->isLegalStridedLoadStore(VecTy, CommonAlignment)) {
98429844
SmallVector<int> Mask;
98439845
inversePermutation(E.ReorderIndices, Mask);
@@ -9864,7 +9866,7 @@ void BoUpSLP::transformNodes() {
98649866
Align CommonAlignment = computeCommonAlignment<StoreInst>(E.Scalars);
98659867
// Check if profitable to represent consecutive load + reverse as strided
98669868
// load with stride -1.
9867-
if (isReverseOrder(E.ReorderIndices) &&
9869+
if (!E.ReorderIndices.empty() && isReverseOrder(E.ReorderIndices) &&
98689870
TTI->isLegalStridedLoadStore(VecTy, CommonAlignment)) {
98699871
SmallVector<int> Mask;
98709872
inversePermutation(E.ReorderIndices, Mask);
@@ -10990,7 +10992,6 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1099010992
unsigned EntryVF = E->getVectorFactor();
1099110993
auto *FinalVecTy = getWidenedType(ScalarTy, EntryVF);
1099210994

10993-
bool NeedToShuffleReuses = !E->ReuseShuffleIndices.empty();
1099410995
if (E->isGather()) {
1099510996
if (allConstant(VL))
1099610997
return 0;
@@ -11003,9 +11004,8 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1100311004
}
1100411005
InstructionCost CommonCost = 0;
1100511006
SmallVector<int> Mask;
11006-
bool IsReverseOrder = isReverseOrder(E->ReorderIndices);
11007-
if (!E->ReorderIndices.empty() &&
11008-
(E->State != TreeEntry::StridedVectorize || !IsReverseOrder)) {
11007+
if (!E->ReorderIndices.empty() && (E->State != TreeEntry::StridedVectorize ||
11008+
!isReverseOrder(E->ReorderIndices))) {
1100911009
SmallVector<int> NewMask;
1101011010
if (E->getOpcode() == Instruction::Store) {
1101111011
// For stores the order is actually a mask.
@@ -11016,7 +11016,7 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1101611016
}
1101711017
::addMask(Mask, NewMask);
1101811018
}
11019-
if (NeedToShuffleReuses)
11019+
if (!E->ReuseShuffleIndices.empty())
1102011020
::addMask(Mask, E->ReuseShuffleIndices);
1102111021
if (!Mask.empty() && !ShuffleVectorInst::isIdentityMask(Mask, Mask.size()))
1102211022
CommonCost =
@@ -15064,7 +15064,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1506415064
return Vec;
1506515065
}
1506615066

15067-
bool IsReverseOrder = isReverseOrder(E->ReorderIndices);
15067+
bool IsReverseOrder =
15068+
!E->ReorderIndices.empty() && isReverseOrder(E->ReorderIndices);
1506815069
auto FinalShuffle = [&](Value *V, const TreeEntry *E) {
1506915070
ShuffleInstructionBuilder ShuffleBuilder(ScalarTy, Builder, *this);
1507015071
if (E->getOpcode() == Instruction::Store &&

0 commit comments

Comments
 (0)