Skip to content

Commit f31761b

Browse files
update code.
1 parent 8f974c9 commit f31761b

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

mlir/lib/Transforms/RemoveDeadValues.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -237,20 +237,25 @@ static void dropUsesAndEraseResults(Operation *op, BitVector toErase) {
237237

238238
// Remove the dead functions from moduleOp.
239239
static void deleteDeadFunction(Operation *module) {
240-
bool walkContinue = true;
241-
while (walkContinue) {
242-
walkContinue = false;
243-
module->walk([&](FunctionOpInterface funcOp) {
240+
auto functions = module->getRegion(0).getOps<FunctionOpInterface>();
241+
llvm::DenseSet<FunctionOpInterface> tasks(functions.begin(), functions.end());
242+
while (!tasks.empty()) {
243+
llvm::DenseSet<FunctionOpInterface> nextTasks;
244+
for (FunctionOpInterface funcOp : tasks) {
244245
if (funcOp.isPublic() || funcOp.isExternal())
245246
return;
246-
247247
SymbolTable::UseRange uses = *funcOp.getSymbolUses(module);
248248
auto callSites = funcOp.getFunctionBody().getOps<CallOpInterface>();
249-
if (uses.empty())
249+
if (uses.empty() && !callSites.empty()) {
250+
for (CallOpInterface callOp : callSites) {
251+
nextTasks.insert(cast<FunctionOpInterface>(callOp.resolveCallable()));
252+
}
253+
}
254+
255+
if (uses.empty() && !nextTasks.contains(funcOp))
250256
funcOp.erase();
251-
if (uses.empty() && !callSites.empty())
252-
walkContinue = true;
253-
});
257+
}
258+
tasks = nextTasks;
254259
}
255260
}
256261

0 commit comments

Comments
 (0)