@@ -74,21 +74,22 @@ TermInst *swift::addNewEdgeValueToBranch(TermInst *branch, SILBasicBlock *dest,
7474 return newBr;
7575}
7676
77- static void
78- deleteTriviallyDeadOperandsOfDeadArgument ( MutableArrayRef<Operand> termOperands,
79- unsigned deadArgIndex ) {
77+ static void deleteTriviallyDeadOperandsOfDeadArgument (
78+ MutableArrayRef<Operand> termOperands, unsigned deadArgIndex ,
79+ InstModCallbacks callbacks = InstModCallbacks() ) {
8080 Operand &op = termOperands[deadArgIndex];
8181 auto *i = op.get ()->getDefiningInstruction ();
8282 if (!i)
8383 return ;
8484 op.set (SILUndef::get (op.get ()->getType (), *i->getFunction ()));
85- eliminateDeadInstruction (i);
85+ eliminateDeadInstruction (i, callbacks );
8686}
8787
8888// Our implementation assumes that our caller is attempting to remove a dead
8989// SILPhiArgument from a SILBasicBlock and has already RAUWed the argument.
9090TermInst *swift::deleteEdgeValue (TermInst *branch, SILBasicBlock *destBlock,
91- size_t argIndex, bool cleanupDeadPhiOps) {
91+ size_t argIndex, bool cleanupDeadPhiOps,
92+ InstModCallbacks callbacks) {
9293 if (auto *cbi = dyn_cast<CondBranchInst>(branch)) {
9394 SmallVector<SILValue, 8 > trueArgs;
9495 SmallVector<SILValue, 8 > falseArgs;
@@ -99,15 +100,15 @@ TermInst *swift::deleteEdgeValue(TermInst *branch, SILBasicBlock *destBlock,
99100 if (destBlock == cbi->getTrueBB ()) {
100101 if (cleanupDeadPhiOps) {
101102 deleteTriviallyDeadOperandsOfDeadArgument (cbi->getTrueOperands (),
102- argIndex);
103+ argIndex, callbacks );
103104 }
104105 trueArgs.erase (trueArgs.begin () + argIndex);
105106 }
106107
107108 if (destBlock == cbi->getFalseBB ()) {
108109 if (cleanupDeadPhiOps) {
109110 deleteTriviallyDeadOperandsOfDeadArgument (cbi->getFalseOperands (),
110- argIndex);
111+ argIndex, callbacks );
111112 }
112113 falseArgs.erase (falseArgs.begin () + argIndex);
113114 }
@@ -125,7 +126,8 @@ TermInst *swift::deleteEdgeValue(TermInst *branch, SILBasicBlock *destBlock,
125126 SmallVector<SILValue, 8 > args;
126127 llvm::copy (bi->getArgs (), std::back_inserter (args));
127128 if (cleanupDeadPhiOps) {
128- deleteTriviallyDeadOperandsOfDeadArgument (bi->getAllOperands (), argIndex);
129+ deleteTriviallyDeadOperandsOfDeadArgument (bi->getAllOperands (), argIndex,
130+ callbacks);
129131 }
130132 args.erase (args.begin () + argIndex);
131133 auto *result = SILBuilderWithScope (bi).createBranch (bi->getLoc (),
@@ -138,7 +140,8 @@ TermInst *swift::deleteEdgeValue(TermInst *branch, SILBasicBlock *destBlock,
138140}
139141
140142void swift::erasePhiArgument (SILBasicBlock *block, unsigned argIndex,
141- bool cleanupDeadPhiOps) {
143+ bool cleanupDeadPhiOps,
144+ InstModCallbacks callbacks) {
142145 assert (block->getArgument (argIndex)->isPhi ()
143146 && " Only should be used on phi arguments" );
144147 block->eraseArgument (argIndex);
@@ -155,7 +158,8 @@ void swift::erasePhiArgument(SILBasicBlock *block, unsigned argIndex,
155158 predBlocks.insert (pred);
156159
157160 for (auto *pred : predBlocks)
158- deleteEdgeValue (pred->getTerminator (), block, argIndex, cleanupDeadPhiOps);
161+ deleteEdgeValue (pred->getTerminator (), block, argIndex, cleanupDeadPhiOps,
162+ callbacks);
159163}
160164
161165// / Changes the edge value between a branch and destination basic block
0 commit comments