@@ -350,7 +350,7 @@ using ModelledPHISet = DenseSet<ModelledPHI, DenseMapInfo<ModelledPHI>>;
350
350
class InstructionUseExpr : public GVNExpression ::BasicExpression {
351
351
unsigned MemoryUseOrder = -1 ;
352
352
bool Volatile = false ;
353
- std::vector <int > ShuffleMask;
353
+ ArrayRef <int > ShuffleMask;
354
354
355
355
public:
356
356
InstructionUseExpr (Instruction *I, ArrayRecycler<Value *> &R,
@@ -360,25 +360,29 @@ class InstructionUseExpr : public GVNExpression::BasicExpression {
360
360
setOpcode (I->getOpcode ());
361
361
setType (I->getType ());
362
362
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
+
363
370
for (auto &U : I->uses ())
364
371
op_push_back (U.getUser ());
365
372
llvm::sort (op_begin (), op_end ());
366
373
}
367
374
368
375
void setMemoryUseOrder (unsigned MUO) { MemoryUseOrder = MUO; }
369
376
void setVolatile (bool V) { Volatile = V; }
370
- void setShuffleMask (ArrayRef<int > Mask) {
371
- ShuffleMask.assign (Mask.begin (), Mask.end ());
372
- }
373
377
374
378
hash_code getHashValue () const override {
375
379
return hash_combine (GVNExpression::BasicExpression::getHashValue (),
376
- MemoryUseOrder, Volatile, ArrayRef< int >( ShuffleMask) );
380
+ MemoryUseOrder, Volatile, ShuffleMask);
377
381
}
378
382
379
383
template <typename Function> hash_code getHashValue (Function MapFn) {
380
384
hash_code H = hash_combine (getOpcode (), getType (), MemoryUseOrder, Volatile,
381
- ArrayRef< int >( ShuffleMask) );
385
+ ShuffleMask);
382
386
for (auto *V : operands ())
383
387
H = hash_combine (H, MapFn (V));
384
388
return H;
@@ -406,8 +410,6 @@ class ValueTable {
406
410
CmpInst::Predicate Predicate = C->getPredicate ();
407
411
E->setOpcode ((C->getOpcode () << 8 ) | Predicate);
408
412
}
409
- if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(I))
410
- E->setShuffleMask (SVI->getShuffleMask ());
411
413
return E;
412
414
}
413
415
0 commit comments