Skip to content

Commit ba4764c

Browse files
committed
Fix leak in GVNSink introduced in D72467.
1 parent c322d32 commit ba4764c

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

llvm/lib/Transforms/Scalar/GVNSink.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ using ModelledPHISet = DenseSet<ModelledPHI, DenseMapInfo<ModelledPHI>>;
350350
class InstructionUseExpr : public GVNExpression::BasicExpression {
351351
unsigned MemoryUseOrder = -1;
352352
bool Volatile = false;
353-
std::vector<int> ShuffleMask;
353+
ArrayRef<int> ShuffleMask;
354354

355355
public:
356356
InstructionUseExpr(Instruction *I, ArrayRecycler<Value *> &R,
@@ -360,25 +360,29 @@ class InstructionUseExpr : public GVNExpression::BasicExpression {
360360
setOpcode(I->getOpcode());
361361
setType(I->getType());
362362

363+
if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(I)) {
364+
ArrayRef<int> OrigMask = SVI->getShuffleMask();
365+
int *Mask = A.Allocate<int>(OrigMask.size());
366+
llvm::copy(OrigMask, Mask);
367+
ShuffleMask = ArrayRef<int>(Mask, OrigMask.size());
368+
}
369+
363370
for (auto &U : I->uses())
364371
op_push_back(U.getUser());
365372
llvm::sort(op_begin(), op_end());
366373
}
367374

368375
void setMemoryUseOrder(unsigned MUO) { MemoryUseOrder = MUO; }
369376
void setVolatile(bool V) { Volatile = V; }
370-
void setShuffleMask(ArrayRef<int> Mask) {
371-
ShuffleMask.assign(Mask.begin(), Mask.end());
372-
}
373377

374378
hash_code getHashValue() const override {
375379
return hash_combine(GVNExpression::BasicExpression::getHashValue(),
376-
MemoryUseOrder, Volatile, ArrayRef<int>(ShuffleMask));
380+
MemoryUseOrder, Volatile, ShuffleMask);
377381
}
378382

379383
template <typename Function> hash_code getHashValue(Function MapFn) {
380384
hash_code H = hash_combine(getOpcode(), getType(), MemoryUseOrder, Volatile,
381-
ArrayRef<int>(ShuffleMask));
385+
ShuffleMask);
382386
for (auto *V : operands())
383387
H = hash_combine(H, MapFn(V));
384388
return H;
@@ -406,8 +410,6 @@ class ValueTable {
406410
CmpInst::Predicate Predicate = C->getPredicate();
407411
E->setOpcode((C->getOpcode() << 8) | Predicate);
408412
}
409-
if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(I))
410-
E->setShuffleMask(SVI->getShuffleMask());
411413
return E;
412414
}
413415

0 commit comments

Comments
 (0)