[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 &region : 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