[mlir] fix assertion failure in remove-dead-values (#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.
---------
Co-authored-by: Andrzej Warzyński <andrzej.warzynski@gmail.com>
Co-authored-by: Mehdi Amini <joker.eph@gmail.com>
This commit is contained in:
@@ -750,8 +750,9 @@ static void cleanUpDeadVals(RDVFinalCleanupList &list) {
|
||||
}
|
||||
|
||||
// 4. Operands
|
||||
for (auto &o : list.operands) {
|
||||
o.op->eraseOperands(o.nonLive);
|
||||
for (OperationToCleanup &o : list.operands) {
|
||||
if (o.op->getNumOperands() > 0)
|
||||
o.op->eraseOperands(o.nonLive);
|
||||
}
|
||||
|
||||
// 5. Results
|
||||
|
||||
@@ -511,6 +511,28 @@ module {
|
||||
// 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
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: func.func @test_atomic_yield
|
||||
@@ -525,3 +547,4 @@ func.func @test_atomic_yield(%I: memref<10xf32>, %idx : index) {
|
||||
}
|
||||
func.return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user