Skip to content

Commit

Permalink
[SLP] NFC. Remove the useless check for alternate instruction. (#117293)
Browse files Browse the repository at this point in the history
Only BinaryOperator and CastInst support alternate instruction. It
always returns false for TreeEntry::isAltShuffle if an instruction is
ExtractElementInst, ExtractValueInst, LoadInst, StoreInst or
InsertElementInst.
  • Loading branch information
HanKuanChen authored Nov 22, 2024
1 parent 063a6f7 commit 55e9afa
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5477,11 +5477,13 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
// Try build correct order for extractelement instructions.
SmallVector<int> ReusedMask(TE.ReuseShuffleIndices.begin(),
TE.ReuseShuffleIndices.end());
if (TE.getOpcode() == Instruction::ExtractElement && !TE.isAltShuffle() &&
if (TE.getOpcode() == Instruction::ExtractElement &&
all_of(TE.Scalars, [Sz](Value *V) {
std::optional<unsigned> Idx = getExtractIndex(cast<Instruction>(V));
return Idx && *Idx < Sz;
})) {
assert(!TE.isAltShuffle() && "Alternate instructions are only supported "
"by BinaryOperator and CastInst.");
SmallVector<int> ReorderMask(Sz, PoisonMaskElem);
if (TE.ReorderIndices.empty())
std::iota(ReorderMask.begin(), ReorderMask.end(), 0);
Expand Down Expand Up @@ -5526,9 +5528,11 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
if ((TE.State == TreeEntry::Vectorize ||
TE.State == TreeEntry::StridedVectorize) &&
(isa<LoadInst, ExtractElementInst, ExtractValueInst>(TE.getMainOp()) ||
(TopToBottom && isa<StoreInst, InsertElementInst>(TE.getMainOp()))) &&
!TE.isAltShuffle())
(TopToBottom && isa<StoreInst, InsertElementInst>(TE.getMainOp())))) {
assert(!TE.isAltShuffle() && "Alternate instructions are only supported by "
"BinaryOperator and CastInst.");
return TE.ReorderIndices;
}
if (TE.State == TreeEntry::Vectorize && TE.getOpcode() == Instruction::PHI) {
if (!TE.ReorderIndices.empty())
return TE.ReorderIndices;
Expand Down Expand Up @@ -5924,8 +5928,11 @@ void BoUpSLP::reorderTopToBottom() {
continue;
}
// Stores actually store the mask, not the order, need to invert.
if (OpTE->State == TreeEntry::Vectorize && !OpTE->isAltShuffle() &&
if (OpTE->State == TreeEntry::Vectorize &&
OpTE->getOpcode() == Instruction::Store && !Order.empty()) {
assert(!OpTE->isAltShuffle() &&
"Alternate instructions are only supported by BinaryOperator "
"and CastInst.");
SmallVector<int> Mask;
inversePermutation(Order, Mask);
unsigned E = Order.size();
Expand Down Expand Up @@ -6188,8 +6195,11 @@ void BoUpSLP::reorderBottomToTop(bool IgnoreReorder) {
return P.second == OpTE;
});
// Stores actually store the mask, not the order, need to invert.
if (OpTE->State == TreeEntry::Vectorize && !OpTE->isAltShuffle() &&
if (OpTE->State == TreeEntry::Vectorize &&
OpTE->getOpcode() == Instruction::Store && !Order.empty()) {
assert(!OpTE->isAltShuffle() &&
"Alternate instructions are only supported by BinaryOperator "
"and CastInst.");
SmallVector<int> Mask;
inversePermutation(Order, Mask);
unsigned E = Order.size();
Expand Down

0 comments on commit 55e9afa

Please sign in to comment.