@@ -1212,18 +1212,20 @@ static SILValue getOrCreateProjectBoxHelper(SILValue PartialOperand) {
1212
1212
// / Change the base in mark_dependence.
1213
1213
static void
1214
1214
mapMarkDependenceArguments (SingleValueInstruction *root,
1215
- llvm::DenseMap<SILValue, SILValue> &map) {
1216
- for (auto *Use : root->getUses ()) {
1215
+ llvm::DenseMap<SILValue, SILValue> &map,
1216
+ SmallVectorImpl<SILInstruction *> &Delete) {
1217
+ SmallVector<Operand *, 16 > Uses (root->getUses ());
1218
+ for (auto *Use : Uses) {
1217
1219
if (auto *MD = dyn_cast<MarkDependenceInst>(Use->getUser ())) {
1218
- mapMarkDependenceArguments (MD, map);
1220
+ mapMarkDependenceArguments (MD, map, Delete );
1219
1221
auto iter = map.find (MD->getBase ());
1220
1222
if (iter != map.end ()) {
1221
1223
MD->setBase (iter->second );
1222
1224
}
1223
1225
// Remove mark_dependence on trivial values.
1224
1226
if (MD->getBase ()->getType ().isTrivial (MD->getModule ())) {
1225
1227
MD->replaceAllUsesWith (MD->getValue ());
1226
- MD-> eraseFromParent ( );
1228
+ Delete. push_back (MD );
1227
1229
}
1228
1230
}
1229
1231
}
@@ -1332,7 +1334,10 @@ processPartialApplyInst(SILOptFunctionBuilder &FuncBuilder,
1332
1334
}
1333
1335
}
1334
1336
// Map the mark dependence arguments.
1335
- mapMarkDependenceArguments (NewPAI, capturedMap);
1337
+ SmallVector<SILInstruction *, 16 > Delete;
1338
+ mapMarkDependenceArguments (NewPAI, capturedMap, Delete);
1339
+ for (auto *inst : Delete)
1340
+ inst->eraseFromParent ();
1336
1341
}
1337
1342
1338
1343
return ClonedFn;
0 commit comments