[Mlir-commits] [mlir] 3398f4e - [mlir][mem2reg] fix assert for indirect blocking uses inside regions (#199193)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue May 26 02:29:02 PDT 2026
Author: jeanPerier
Date: 2026-05-26T11:28:56+02:00
New Revision: 3398f4e66558c67f7a8db70982d8bdbd8ed9a52d
URL: https://github.com/llvm/llvm-project/commit/3398f4e66558c67f7a8db70982d8bdbd8ed9a52d
DIFF: https://github.com/llvm/llvm-project/commit/3398f4e66558c67f7a8db70982d8bdbd8ed9a52d.diff
LOG: [mlir][mem2reg] fix assert for indirect blocking uses inside regions (#199193)
When adding new blocking uses created by the interface of a previous
blocking uses (typically forwarding the blocking uses to the op result
users), the mem2reg framework was assuming that the new blocking uses
are in the same region as the original blocking use, which is not true
in general and lead to the assert:
`Transforms/Mem2Reg.cpp:743: void
{anonymous}::MemorySlotPromoter::removeBlockingUses(mlir::Region*):
Assertion `op->getParentRegion() == region && "all operations must still
be in the same region"' failed.`
This patch fixes this by adding the new uses into the userToBlockingUses
for the region of the new blocking uses.
Added:
Modified:
mlir/lib/Transforms/Mem2Reg.cpp
mlir/test/Dialect/LLVMIR/mem2reg.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Transforms/Mem2Reg.cpp b/mlir/lib/Transforms/Mem2Reg.cpp
index 40d08d869a9e2..516002906bcf6 100644
--- a/mlir/lib/Transforms/Mem2Reg.cpp
+++ b/mlir/lib/Transforms/Mem2Reg.cpp
@@ -421,8 +421,9 @@ LogicalResult MemorySlotPromotionAnalyzer::computeBlockingUses(
for (OpOperand *blockingUse : newBlockingUses) {
assert(llvm::is_contained(user->getResults(), blockingUse->get()));
+ Operation *useOwner = blockingUse->getOwner();
SmallPtrSetImpl<OpOperand *> &newUserBlockingUseSet =
- blockingUsesMap[blockingUse->getOwner()];
+ userToBlockingUses[useOwner->getParentRegion()][useOwner];
newUserBlockingUseSet.insert(blockingUse);
}
}
diff --git a/mlir/test/Dialect/LLVMIR/mem2reg.mlir b/mlir/test/Dialect/LLVMIR/mem2reg.mlir
index 3316b4bb955c3..cabbd1c1bc013 100644
--- a/mlir/test/Dialect/LLVMIR/mem2reg.mlir
+++ b/mlir/test/Dialect/LLVMIR/mem2reg.mlir
@@ -1180,3 +1180,17 @@ llvm.func @dead_direct_use(%arg0 : i1) {
}
llvm.return
}
+
+// -----
+
+// CHECK-LABEL: @indirect_blocking_use_in_
diff erent_region
+llvm.func @indirect_blocking_use_in_
diff erent_region(%arg0 : i1) {
+ %0 = llvm.mlir.constant(1 : i32) : i32
+ // CHECK-NOT: llvm.alloca
+ %1 = llvm.alloca %0 x i32 : (i32) -> !llvm.ptr
+ %2 = llvm.addrspacecast %1 : !llvm.ptr to !llvm.ptr<5>
+ scf.if %arg0 {
+ %3 = llvm.addrspacecast %2 : !llvm.ptr<5> to !llvm.ptr
+ }
+ llvm.return
+}
More information about the Mlir-commits
mailing list