[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:53 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
@llvm/pr-subscribers-mlir-core
Author: Menooker (Menooker)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/144849.diff
2 Files Affected:
- (modified) mlir/lib/Transforms/RemoveDeadValues.cpp (+2-1)
- (modified) mlir/test/Transforms/remove-dead-values.mlir (+22)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/144849
More information about the Mlir-commits
mailing list