Index: include/llvm/IR/Intrinsics.td =================================================================== --- include/llvm/IR/Intrinsics.td +++ include/llvm/IR/Intrinsics.td @@ -585,6 +585,28 @@ [llvm_token_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadMem]>; +//===------------------------ Coroutine Intrinsics ---------------===// +// These are documented in docs/Coroutines.rst + +def int_experimental_coro_init : Intrinsic<[llvm_ptr_ty], + [llvm_ptr_ty, llvm_i32_ty, + llvm_ptr_ty, llvm_ptr_ty], []>; +def int_experimental_coro_fork : Intrinsic<[llvm_i1_ty], [], []>; +def int_experimental_coro_frame : Intrinsic<[llvm_ptr_ty], [], []>; +def int_experimental_coro_size : Intrinsic<[llvm_anyint_ty], [], [IntrNoMem]>; + +def int_experimental_coro_resume_end : Intrinsic<[], [], []>; +def int_experimental_coro_elide : Intrinsic<[llvm_ptr_ty], [], []>; +def int_experimental_coro_delete : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>; + +def int_experimental_coro_save : Intrinsic<[llvm_token_ty], [], []>; +def int_experimental_coro_suspend : Intrinsic<[llvm_i1_ty], [llvm_token_ty, llvm_i1_ty], []>; + +def int_experimental_coro_resume : Intrinsic<[], [llvm_ptr_ty], [Throws]>; +def int_experimental_coro_destroy : Intrinsic<[], [llvm_ptr_ty], [Throws]>; +def int_experimental_coro_done : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrReadMem]>; +def int_experimental_coro_promise : Intrinsic<[llvm_anyptr_ty], [llvm_ptr_ty], [IntrReadMem]>; +def int_experimental_coro_from_promise : Intrinsic<[llvm_ptr_ty], [llvm_anyptr_ty], [IntrReadMem]>; //===-------------------------- Other Intrinsics --------------------------===// // def int_flt_rounds : Intrinsic<[llvm_i32_ty]>,