Skip to content

Commit 09b8bbd

Browse files
committed
[SLP][NFC]Reorder indeces instead of real values, NFC.
May save some memory/compile time.
1 parent 08e0420 commit 09b8bbd

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4170,7 +4170,9 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
41704170
!TE.isAltShuffle())
41714171
return TE.ReorderIndices;
41724172
if (TE.State == TreeEntry::Vectorize && TE.getOpcode() == Instruction::PHI) {
4173-
auto PHICompare = [](llvm::Value *V1, llvm::Value *V2) {
4173+
auto PHICompare = [&](unsigned I1, unsigned I2) {
4174+
Value *V1 = TE.Scalars[I1];
4175+
Value *V2 = TE.Scalars[I2];
41744176
if (V1 == V2)
41754177
return false;
41764178
if (!V1->hasOneUse() || !V2->hasOneUse())
@@ -4209,14 +4211,13 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
42094211
};
42104212
if (!TE.ReorderIndices.empty())
42114213
return TE.ReorderIndices;
4212-
DenseMap<Value *, unsigned> PhiToId;
4213-
SmallVector<Value *, 4> Phis;
4214+
DenseMap<unsigned, unsigned> PhiToId;
4215+
SmallVector<unsigned> Phis(TE.Scalars.size());
4216+
std::iota(Phis.begin(), Phis.end(), 0);
42144217
OrdersType ResOrder(TE.Scalars.size());
4215-
for (unsigned Id = 0, Sz = TE.Scalars.size(); Id < Sz; ++Id) {
4216-
PhiToId[TE.Scalars[Id]] = Id;
4217-
Phis.push_back(TE.Scalars[Id]);
4218-
}
4219-
llvm::stable_sort(Phis, PHICompare);
4218+
for (unsigned Id = 0, Sz = TE.Scalars.size(); Id < Sz; ++Id)
4219+
PhiToId[Id] = Id;
4220+
stable_sort(Phis, PHICompare);
42204221
for (unsigned Id = 0, Sz = Phis.size(); Id < Sz; ++Id)
42214222
ResOrder[Id] = PhiToId[Phis[Id]];
42224223
if (IsIdentityOrder(ResOrder))

0 commit comments

Comments
 (0)