@@ -515,6 +515,24 @@ class HashVisitor : public SILInstructionVisitor<HashVisitor, llvm::hash_code> {
515
515
X->getKind (), tryLookThroughOwnershipInsts (&X->getOperandRef ()),
516
516
llvm::hash_combine_range (ConformsTo.begin (), ConformsTo.end ()));
517
517
}
518
+
519
+ hash_code visitScalarPackIndexInst (ScalarPackIndexInst *X) {
520
+ return llvm::hash_combine (
521
+ X->getKind (), X->getIndexedPackType (), X->getComponentIndex ());
522
+ }
523
+
524
+ hash_code visitDynamicPackIndexInst (DynamicPackIndexInst *X) {
525
+ return llvm::hash_combine (
526
+ X->getKind (), X->getIndexedPackType (), &X->getOperandRef ());
527
+ }
528
+
529
+ hash_code visitTuplePackElementAddrInst (TuplePackElementAddrInst *X) {
530
+ OperandValueArrayRef Operands (X->getAllOperands ());
531
+ return llvm::hash_combine (
532
+ X->getKind (),
533
+ llvm::hash_combine_range (Operands.begin (), Operands.end ()),
534
+ X->getElementType ());
535
+ }
518
536
};
519
537
} // end anonymous namespace
520
538
@@ -1225,6 +1243,9 @@ bool CSE::canHandle(SILInstruction *Inst) {
1225
1243
case SILInstructionKind::MarkDependenceInst:
1226
1244
case SILInstructionKind::InitExistentialMetatypeInst:
1227
1245
case SILInstructionKind::WitnessMethodInst:
1246
+ case SILInstructionKind::ScalarPackIndexInst:
1247
+ case SILInstructionKind::DynamicPackIndexInst:
1248
+ case SILInstructionKind::TuplePackElementAddrInst:
1228
1249
// Intentionally we don't handle (prev_)dynamic_function_ref.
1229
1250
// They change at runtime.
1230
1251
#define LOADABLE_REF_STORAGE (Name, ...) \
0 commit comments