[Mlir-commits] [mlir] 7a62459 - [mlir] Deterministic containers in OneShotModuleBufferize (#184722)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Mar 5 02:37:47 PST 2026
Author: Colin He
Date: 2026-03-05T10:37:42Z
New Revision: 7a624590d0d6a8f4b3b3aa4b2ee5d060e7c80a50
URL: https://github.com/llvm/llvm-project/commit/7a624590d0d6a8f4b3b3aa4b2ee5d060e7c80a50
DIFF: https://github.com/llvm/llvm-project/commit/7a624590d0d6a8f4b3b3aa4b2ee5d060e7c80a50.diff
LOG: [mlir] Deterministic containers in OneShotModuleBufferize (#184722)
Iteration over funcOps in `getFuncOpsOrderedByCalls` is
non-deterministic as a result of using Dense containers. Replacing with
Vector-backed containers restores deterministic behaviour.
Added:
Modified:
mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp b/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
index 1cced539b5318..d29150a7403f9 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
@@ -70,6 +70,7 @@
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Operation.h"
+#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallVectorExtras.h"
using namespace mlir;
@@ -316,9 +317,9 @@ static LogicalResult getFuncOpsOrderedByCalls(
SymbolTableCollection &symbolTables) {
// For each FuncOp, the set of functions called by it (i.e. the union of
// symbols of all nested func::CallOp).
- DenseMap<func::FuncOp, DenseSet<func::FuncOp>> calledBy;
+ DenseMap<func::FuncOp, SetVector<func::FuncOp>> calledBy;
// For each FuncOp, the number of func::CallOp it contains.
- DenseMap<func::FuncOp, unsigned> numberCallOpsContainedInFuncOp;
+ llvm::MapVector<func::FuncOp, unsigned> numberCallOpsContainedInFuncOp;
for (mlir::Region ®ion : moduleOp->getRegions()) {
for (mlir::Block &block : region.getBlocks()) {
for (func::FuncOp funcOp : block.getOps<func::FuncOp>()) {
@@ -333,7 +334,7 @@ static LogicalResult getFuncOpsOrderedByCalls(
return WalkResult::skip();
callerMap[calledFunction].insert(callOp);
- if (calledBy[calledFunction].insert(funcOp).second) {
+ if (calledBy[calledFunction].insert(funcOp)) {
numberCallOpsContainedInFuncOp[funcOp]++;
}
return WalkResult::advance();
More information about the Mlir-commits
mailing list