[Mlir-commits] [mlir] [mlir][bufferization] Add support for recursive function calls (PR #114003)
Jacques Pienaar
llvmlistbot at llvm.org
Fri Nov 1 09:38:51 PDT 2024
================
@@ -326,19 +329,25 @@ getFuncOpsOrderedByCalls(ModuleOp moduleOp,
});
if (res.wasInterrupted())
return failure();
+
// Iteratively remove function operations that do not call any of the
- // functions remaining in the callCounter map and add them to the worklist.
+ // functions remaining in the callCounter map and add them to ordered list.
while (!numberCallOpsContainedInFuncOp.empty()) {
auto it = llvm::find_if(numberCallOpsContainedInFuncOp,
[](auto entry) { return entry.getSecond() == 0; });
if (it == numberCallOpsContainedInFuncOp.end())
- return moduleOp.emitOpError(
- "expected callgraph to be free of circular dependencies.");
+ break;
orderedFuncOps.push_back(it->getFirst());
for (auto callee : calledBy[it->getFirst()])
numberCallOpsContainedInFuncOp[callee]--;
numberCallOpsContainedInFuncOp.erase(it);
}
+
+ // Put all other functions in the list of remaining functions. These are
+ // functions that call each each circularly.
----------------
jpienaar wrote:
each each.
Also, this makes me wonder if we should be using the SccIterator here .
https://github.com/llvm/llvm-project/pull/114003
More information about the Mlir-commits
mailing list