Skip to content

Commit 97ab1bb

Browse files
committed
[MLIR] Add ReturnLike trait to memref.atomic_yield
Without this, the yield isn't considered as the region terminator and the dataflow framework does not consider it live.
1 parent 3e99aa6 commit 97ab1bb

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,8 +1078,7 @@ def GenericAtomicRMWOp : MemRef_Op<"generic_atomic_rmw", [
10781078

10791079
def AtomicYieldOp : MemRef_Op<"atomic_yield", [
10801080
HasParent<"GenericAtomicRMWOp">,
1081-
Pure,
1082-
Terminator
1081+
Pure, Terminator, ReturnLike
10831082
]> {
10841083
let summary = "yield operation for GenericAtomicRMWOp";
10851084
let description = [{

mlir/test/Transforms/remove-dead-values.mlir

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,3 +510,18 @@ module {
510510
// CHECK: %[[yield:.*]] = arith.addf %{{.*}}, %{{.*}} : f32
511511
// CHECK: linalg.yield %[[yield]] : f32
512512
// CHECK-NOT: arith.subf
513+
514+
// -----
515+
516+
// CHECK-LABEL: func.func @test_atomic_yield
517+
func.func @test_atomic_yield(%I: memref<10xf32>, %idx : index) {
518+
// CHECK: memref.generic_atomic_rmw
519+
%x = memref.generic_atomic_rmw %I[%idx] : memref<10xf32> {
520+
^bb0(%current_value : f32):
521+
// CHECK: arith.constant
522+
%c1 = arith.constant 1.0 : f32
523+
// CHECK: memref.atomic_yield
524+
memref.atomic_yield %c1 : f32
525+
}
526+
func.return
527+
}

0 commit comments

Comments
 (0)