[Mlir-commits] [mlir] [mlir] fix assertion failure in remove-dead-values (PR #144849)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Jun 19 00:07:11 PDT 2025
https://github.com/Menooker created https://github.com/llvm/llvm-project/pull/144849
Simple IR patterns will trigger assertion error:
```
func.func @test_zero_operands(%I: memref<10xindex>, %I2: memref<10xf32>) {
%v0 = arith.constant 0 : index
%result = memref.alloca_scope -> index {
%c = arith.addi %v0, %v0 : index
memref.store %c, %I[%v0] : memref<10xindex>
memref.alloca_scope.return %c: index
}
func.return
}
```
with error: `mlir/include/mlir/IR/Operation.h:988: mlir::detail::OperandStorage& mlir::Operation::getOperandStorage(): Assertion `hasOperandStorage && "expected operation to have operand storage"' failed.`
This PR will fix this issue.
>From 8d2e6295d8cc1b9685aafaa60cc6ae4e734d24be Mon Sep 17 00:00:00 2001
From: Menooker <myjisgreat at live.cn>
Date: Wed, 18 Jun 2025 23:58:13 -0700
Subject: [PATCH] [mlir] fix assertion failure in remove-dead-values
---
mlir/lib/Transforms/RemoveDeadValues.cpp | 3 ++-
mlir/test/Transforms/remove-dead-values.mlir | 22 ++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Transforms/RemoveDeadValues.cpp b/mlir/lib/Transforms/RemoveDeadValues.cpp
index 08dfea8eb2648..113d91ab3dc78 100644
--- a/mlir/lib/Transforms/RemoveDeadValues.cpp
+++ b/mlir/lib/Transforms/RemoveDeadValues.cpp
@@ -705,7 +705,8 @@ static void cleanUpDeadVals(RDVFinalCleanupList &list) {
// 4. Operands
for (auto &o : list.operands) {
- o.op->eraseOperands(o.nonLive);
+ if (o.nonLive.size() > 0)
+ o.op->eraseOperands(o.nonLive);
}
// 5. Results
diff --git a/mlir/test/Transforms/remove-dead-values.mlir b/mlir/test/Transforms/remove-dead-values.mlir
index 8c2a1cf7546f3..456fe5d6e6607 100644
--- a/mlir/test/Transforms/remove-dead-values.mlir
+++ b/mlir/test/Transforms/remove-dead-values.mlir
@@ -510,3 +510,25 @@ module {
// CHECK: %[[yield:.*]] = arith.addf %{{.*}}, %{{.*}} : f32
// CHECK: linalg.yield %[[yield]] : f32
// CHECK-NOT: arith.subf
+
+
+// -----
+
+// check that ops with zero operands are correctly handled
+
+module {
+ func.func @test_zero_operands(%I: memref<10xindex>, %I2: memref<10xf32>) {
+ %v0 = arith.constant 0 : index
+ %result = memref.alloca_scope -> index {
+ %c = arith.addi %v0, %v0 : index
+ memref.store %c, %I[%v0] : memref<10xindex>
+ memref.alloca_scope.return %c: index
+ }
+ func.return
+ }
+}
+
+// CHECK-LABEL: func @test_zero_operands
+// CHECK: memref.alloca_scope
+// CHECK: memref.store
+// CHECK-NOT: memref.alloca_scope.return
\ No newline at end of file
More information about the Mlir-commits
mailing list