[Mlir-commits] [mlir] [mlir][llvm] Add operations for coroutine intrinsics (PR #214099)

Tobias Gysi llvmlistbot at llvm.org
Wed Aug 5 04:10:52 PDT 2026


================
@@ -881,6 +890,69 @@ define void @coro_promise(ptr %0, i32 %1, i1 %2) {
   ret void
 }
 
+; CHECK-LABEL:  llvm.func @coro_frame
+define void @coro_frame() {
+  ; CHECK: llvm.intr.coro.frame : !llvm.ptr
+  %1 = call ptr @llvm.coro.frame()
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_noop
+define void @coro_noop() {
+  ; CHECK: llvm.intr.coro.noop : !llvm.ptr
+  %1 = call ptr @llvm.coro.noop()
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_destroy
+define void @coro_destroy(ptr %0) {
+  ; CHECK: llvm.intr.coro.destroy %{{.*}}
+  call void @llvm.coro.destroy(ptr %0)
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_done
+define void @coro_done(ptr %0) {
+  ; CHECK: llvm.intr.coro.done %{{.*}} : (!llvm.ptr) -> i1
+  %2 = call i1 @llvm.coro.done(ptr %0)
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_is_in_ramp
+define void @coro_is_in_ramp() {
+  ; CHECK: llvm.intr.coro.is_in_ramp : i1
+  %1 = call i1 @llvm.coro.is_in_ramp()
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_dead
+define void @coro_dead(ptr %0) {
+  ; CHECK: llvm.intr.coro.dead %{{.*}}
+  call void @llvm.coro.dead(ptr %0)
+  ret void
+}
+
+; CHECK-LABEL:  llvm.func @coro_await_suspend_void
+define void @coro_await_suspend_void(ptr %0, ptr %1, ptr %2) {
+  ; CHECK: llvm.intr.coro.await.suspend.void
+  call void @llvm.coro.await.suspend.void(ptr %0, ptr %1, ptr %2)
----------------
gysit wrote:

nit: this is also a good example where matching the function arguments and how they are writed to the intrinsic would be nice.

https://github.com/llvm/llvm-project/pull/214099


More information about the Mlir-commits mailing list