@@ -4170,7 +4170,9 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
4170
4170
!TE.isAltShuffle())
4171
4171
return TE.ReorderIndices;
4172
4172
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];
4174
4176
if (V1 == V2)
4175
4177
return false;
4176
4178
if (!V1->hasOneUse() || !V2->hasOneUse())
@@ -4209,14 +4211,13 @@ BoUpSLP::getReorderingData(const TreeEntry &TE, bool TopToBottom) {
4209
4211
};
4210
4212
if (!TE.ReorderIndices.empty())
4211
4213
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);
4214
4217
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);
4220
4221
for (unsigned Id = 0, Sz = Phis.size(); Id < Sz; ++Id)
4221
4222
ResOrder[Id] = PhiToId[Phis[Id]];
4222
4223
if (IsIdentityOrder(ResOrder))
0 commit comments