@@ -136,14 +136,12 @@ InnerBorrowKind PrunedLiveness::updateForBorrowingOperand(Operand *operand) {
136
136
AddressUseKind PrunedLiveness::checkAndUpdateInteriorPointer (Operand *operand) {
137
137
assert (operand->getOperandOwnership () == OperandOwnership::InteriorPointer);
138
138
139
- if (auto *svi = dyn_cast<SingleValueInstruction>(operand->getUser ())) {
140
- if (auto scopedAddress = ScopedAddressValue (svi)) {
141
- scopedAddress.visitScopeEndingUses ([this ](Operand *end) {
142
- updateForUse (end->getUser (), /* lifetimeEnding*/ false );
143
- return true ;
144
- });
145
- return AddressUseKind::NonEscaping;
146
- }
139
+ if (auto scopedAddress = ScopedAddressValue::forUse (operand)) {
140
+ scopedAddress.visitScopeEndingUses ([this ](Operand *end) {
141
+ updateForUse (end->getUser (), /* lifetimeEnding*/ false );
142
+ return true ;
143
+ });
144
+ return AddressUseKind::NonEscaping;
147
145
}
148
146
// FIXME: findTransitiveUses should be a visitor so we're not recursively
149
147
// allocating use vectors and potentially merging the use points.
@@ -152,6 +150,10 @@ AddressUseKind PrunedLiveness::checkAndUpdateInteriorPointer(Operand *operand) {
152
150
for (auto *use : uses) {
153
151
updateForUse (use->getUser (), /* lifetimeEnding*/ false );
154
152
}
153
+ if (uses.empty ()) {
154
+ // Handle a dead address
155
+ updateForUse (operand->getUser (), /* lifetimeEnding*/ false );
156
+ }
155
157
return useKind;
156
158
}
157
159
@@ -303,6 +305,16 @@ SimpleLiveRangeSummary PrunedLiveRange<LivenessWithDefs>::updateForDef(SILValue
303
305
});
304
306
break ;
305
307
}
308
+ case OperandOwnership::TrivialUse: {
309
+ if (auto scopedAddress = ScopedAddressValue::forUse (use)) {
310
+ scopedAddress.visitScopeEndingUses ([this ](Operand *end) {
311
+ updateForUse (end->getUser (), /* lifetimeEnding*/ false );
312
+ return true ;
313
+ });
314
+ }
315
+ updateForUse (use->getUser (), /* lifetimeEnding*/ false );
316
+ break ;
317
+ }
306
318
default :
307
319
updateForUse (use->getUser (), use->isLifetimeEnding ());
308
320
break ;
0 commit comments