From 8d2e6295d8cc1b9685aafaa60cc6ae4e734d24be Mon Sep 17 00:00:00 2001 From: Menooker Date: Wed, 18 Jun 2025 23:58:13 -0700 Subject: [PATCH 1/4] [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 From 057406238af95110d26fac95475d518a6d16c52f Mon Sep 17 00:00:00 2001 From: Menooker Date: Fri, 20 Jun 2025 14:37:18 +0900 Subject: [PATCH 2/4] Update mlir/lib/Transforms/RemoveDeadValues.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andrzej WarzyƄski --- mlir/lib/Transforms/RemoveDeadValues.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/lib/Transforms/RemoveDeadValues.cpp b/mlir/lib/Transforms/RemoveDeadValues.cpp index 113d91ab3dc78..154b02fd9560d 100644 --- a/mlir/lib/Transforms/RemoveDeadValues.cpp +++ b/mlir/lib/Transforms/RemoveDeadValues.cpp @@ -705,7 +705,7 @@ static void cleanUpDeadVals(RDVFinalCleanupList &list) { // 4. Operands for (auto &o : list.operands) { - if (o.nonLive.size() > 0) + if (o.op->getNumOperands() > 0) o.op->eraseOperands(o.nonLive); } From eaff522ac02c1e4dc01375c1d10276fc1de1bdcb Mon Sep 17 00:00:00 2001 From: Menooker Date: Fri, 20 Jun 2025 14:38:29 +0900 Subject: [PATCH 3/4] Update remove-dead-values.mlir --- mlir/test/Transforms/remove-dead-values.mlir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/test/Transforms/remove-dead-values.mlir b/mlir/test/Transforms/remove-dead-values.mlir index 456fe5d6e6607..a31e3d358f2a6 100644 --- a/mlir/test/Transforms/remove-dead-values.mlir +++ b/mlir/test/Transforms/remove-dead-values.mlir @@ -531,4 +531,4 @@ module { // 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 +// CHECK-NOT: memref.alloca_scope.return From f56f1e1f2babf587c75a861bcab4101f27318412 Mon Sep 17 00:00:00 2001 From: Menooker Date: Fri, 20 Jun 2025 23:19:40 +0900 Subject: [PATCH 4/4] Update mlir/lib/Transforms/RemoveDeadValues.cpp Co-authored-by: Mehdi Amini --- mlir/lib/Transforms/RemoveDeadValues.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/lib/Transforms/RemoveDeadValues.cpp b/mlir/lib/Transforms/RemoveDeadValues.cpp index 154b02fd9560d..f269eaa15111a 100644 --- a/mlir/lib/Transforms/RemoveDeadValues.cpp +++ b/mlir/lib/Transforms/RemoveDeadValues.cpp @@ -704,7 +704,7 @@ static void cleanUpDeadVals(RDVFinalCleanupList &list) { } // 4. Operands - for (auto &o : list.operands) { + for (OperationToCleanup &o : list.operands) { if (o.op->getNumOperands() > 0) o.op->eraseOperands(o.nonLive); }