Skip to content

Commit 703e836

Browse files
[MLIR][LLVM] Add llvm.intr.coro.promise (#76640)
Added to allow generating these intrinsics in out-of-tree MLIR passes. Co-authored-by: Yoni Lavi <yoni.lavi@nextsilicon.com>
1 parent 0871c4b commit 703e836

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,14 @@ def LLVM_CoroResumeOp : LLVM_IntrOp<"coro.resume", [], [], [], 0> {
435435
let assemblyFormat = "$handle attr-dict `:` qualified(type($handle))";
436436
}
437437

438+
def LLVM_CoroPromiseOp : LLVM_IntrOp<"coro.promise", [], [], [], 1> {
439+
let arguments = (ins LLVM_AnyPointer:$handle,
440+
I32:$align,
441+
I1:$from);
442+
let results = (outs LLVM_AnyPointer:$res);
443+
let assemblyFormat = "$handle `,` $align `,` $from attr-dict `:` functional-type(operands, results)";
444+
}
445+
438446
//
439447
// Debug function intrinsics.
440448
//

mlir/test/Target/LLVMIR/Import/intrinsic.ll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,13 @@ define void @coro_resume(ptr %0) {
720720
ret void
721721
}
722722

723+
; CHECK-LABEL: llvm.func @coro_promise
724+
define void @coro_promise(ptr %0, i32 %1, i1 %2) {
725+
; CHECK: llvm.intr.coro.promise %{{.*}}, %{{.*}}, %{{.*}} : (!llvm.ptr, i32, i1) -> !llvm.ptr
726+
%4 = call ptr @llvm.coro.promise(ptr %0, i32 %1, i1 %2)
727+
ret void
728+
}
729+
723730
; CHECK-LABEL: llvm.func @eh_typeid_for
724731
define void @eh_typeid_for(ptr %0) {
725732
; CHECK: llvm.intr.eh.typeid.for %{{.*}} : (!llvm.ptr) -> i32
@@ -1046,6 +1053,7 @@ declare i8 @llvm.coro.suspend(token, i1)
10461053
declare i1 @llvm.coro.end(ptr, i1, token)
10471054
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
10481055
declare void @llvm.coro.resume(ptr)
1056+
declare ptr @llvm.coro.promise(ptr nocapture, i32, i1)
10491057
declare i32 @llvm.eh.typeid.for(ptr)
10501058
declare ptr @llvm.stacksave.p0()
10511059
declare ptr addrspace(1) @llvm.stacksave.p1()

mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,13 @@ llvm.func @coro_resume(%arg0: !llvm.ptr) {
712712
llvm.return
713713
}
714714

715+
// CHECK-LABEL: @coro_promise
716+
llvm.func @coro_promise(%arg0: !llvm.ptr, %arg1 : i32, %arg2 : i1) {
717+
// CHECK: call ptr @llvm.coro.promise
718+
%0 = llvm.intr.coro.promise %arg0, %arg1, %arg2 : (!llvm.ptr, i32, i1) -> !llvm.ptr
719+
llvm.return
720+
}
721+
715722
// CHECK-LABEL: @eh_typeid_for
716723
llvm.func @eh_typeid_for(%arg0 : !llvm.ptr) {
717724
// CHECK: call i32 @llvm.eh.typeid.for
@@ -1056,6 +1063,7 @@ llvm.func @ssa_copy(%arg: f32) -> f32 {
10561063
// CHECK-DAG: declare i1 @llvm.coro.end(ptr, i1, token)
10571064
// CHECK-DAG: declare ptr @llvm.coro.free(token, ptr nocapture readonly)
10581065
// CHECK-DAG: declare void @llvm.coro.resume(ptr)
1066+
// CHECK-DAG: declare ptr @llvm.coro.promise(ptr nocapture, i32, i1)
10591067
// CHECK-DAG: declare <8 x i32> @llvm.vp.add.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
10601068
// CHECK-DAG: declare <8 x i32> @llvm.vp.sub.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
10611069
// CHECK-DAG: declare <8 x i32> @llvm.vp.mul.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)

0 commit comments

Comments
 (0)