[llvm] [SLP] NFC. Use TreeEntry::getOperand if setOperandsInOrder is called (PR #92727)
Han-Kuan Chen via llvm-commits
llvm-commits at lists.llvm.org
Mon May 20 02:34:32 PDT 2024
https://github.com/HanKuanChen created https://github.com/llvm/llvm-project/pull/92727
already.
>From 8a3440e47957d2e972f03c538816bdd73d14dae9 Mon Sep 17 00:00:00 2001
From: Han-Kuan Chen <hankuan.chen at sifive.com>
Date: Mon, 20 May 2024 02:17:46 -0700
Subject: [PATCH] [SLP] NFC. Use TreeEntry::getOperand if setOperandsInOrder is
called already.
---
.../Transforms/Vectorize/SLPVectorizer.cpp | 72 +++++--------------
1 file changed, 17 insertions(+), 55 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index d21b5e1cc0417..140a1b1ffbafe 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -6916,15 +6916,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
std::nullopt, CurrentOrder);
LLVM_DEBUG(dbgs() << "SLP: added inserts bundle.\n");
- constexpr int NumOps = 2;
- ValueList VectorOperands[NumOps];
- for (int I = 0; I < NumOps; ++I) {
- for (Value *V : VL)
- VectorOperands[I].push_back(cast<Instruction>(V)->getOperand(I));
-
- TE->setOperand(I, VectorOperands[I]);
- }
- buildTree_rec(VectorOperands[NumOps - 1], Depth + 1, {TE, NumOps - 1});
+ TE->setOperandsInOrder();
+ buildTree_rec(TE->getOperand(1), Depth + 1, {TE, 1});
return;
}
case Instruction::Load: {
@@ -7024,14 +7017,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
LLVM_DEBUG(dbgs() << "SLP: added a vector of casts.\n");
TE->setOperandsInOrder();
- for (unsigned I : seq<unsigned>(0, VL0->getNumOperands())) {
- ValueList Operands;
- // Prepare the operand vector.
- for (Value *V : VL)
- Operands.push_back(cast<Instruction>(V)->getOperand(I));
-
- buildTree_rec(Operands, Depth + 1, {TE, I});
- }
+ for (unsigned I : seq<unsigned>(0, VL0->getNumOperands()))
+ buildTree_rec(TE->getOperand(I), Depth + 1, {TE, I});
return;
}
case Instruction::ICmp:
@@ -7116,14 +7103,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
}
TE->setOperandsInOrder();
- for (unsigned I : seq<unsigned>(0, VL0->getNumOperands())) {
- ValueList Operands;
- // Prepare the operand vector.
- for (Value *V : VL)
- Operands.push_back(cast<Instruction>(V)->getOperand(I));
-
- buildTree_rec(Operands, Depth + 1, {TE, I});
- }
+ for (unsigned I : seq<unsigned>(0, VL0->getNumOperands()))
+ buildTree_rec(TE->getOperand(I), Depth + 1, {TE, I});
return;
}
case Instruction::GetElementPtr: {
@@ -7182,30 +7163,17 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
return;
}
case Instruction::Store: {
- // Check if the stores are consecutive or if we need to swizzle them.
- ValueList Operands(VL.size());
- auto *OIter = Operands.begin();
- for (Value *V : VL) {
- auto *SI = cast<StoreInst>(V);
- *OIter = SI->getValueOperand();
- ++OIter;
- }
- // Check that the sorted pointer operands are consecutive.
- if (CurrentOrder.empty()) {
- // Original stores are consecutive and does not require reordering.
- TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
- ReuseShuffleIndices);
- TE->setOperandsInOrder();
- buildTree_rec(Operands, Depth + 1, {TE, 0});
- LLVM_DEBUG(dbgs() << "SLP: added a vector of stores.\n");
- } else {
+ bool Consecutive = CurrentOrder.empty();
+ if (!Consecutive)
fixupOrderingIndices(CurrentOrder);
- TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
- ReuseShuffleIndices, CurrentOrder);
- TE->setOperandsInOrder();
- buildTree_rec(Operands, Depth + 1, {TE, 0});
+ TreeEntry *TE = newTreeEntry(VL, Bundle /*vectorized*/, S, UserTreeIdx,
+ ReuseShuffleIndices, CurrentOrder);
+ TE->setOperandsInOrder();
+ buildTree_rec(TE->getOperand(0), Depth + 1, {TE, 0});
+ if (Consecutive)
+ LLVM_DEBUG(dbgs() << "SLP: added a vector of stores.\n");
+ else
LLVM_DEBUG(dbgs() << "SLP: added a vector of jumbled stores.\n");
- }
return;
}
case Instruction::Call: {
@@ -7305,14 +7273,8 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth,
}
TE->setOperandsInOrder();
- for (unsigned I : seq<unsigned>(0, VL0->getNumOperands())) {
- ValueList Operands;
- // Prepare the operand vector.
- for (Value *V : VL)
- Operands.push_back(cast<Instruction>(V)->getOperand(I));
-
- buildTree_rec(Operands, Depth + 1, {TE, I});
- }
+ for (unsigned I : seq<unsigned>(0, VL0->getNumOperands()))
+ buildTree_rec(TE->getOperand(I), Depth + 1, {TE, I});
return;
}
default:
More information about the llvm-commits
mailing list