mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-23 17:48:03 +00:00
[coroutines] Add __builtin_coro_noop => llvm.coro.noop
A recent addition to Coroutines TS (https://wg21.link/p0913) adds a pre-defined coroutine noop_coroutine that does nothing. To implement this feature, we implemented an llvm.coro.noop intrinsic that returns a coroutine handle to a coroutine that does nothing when resumed or destroyed. This patch adds a builtin __builtin_coro_noop() that maps to llvm.coro.noop intrinsic. Related llvm change: https://reviews.llvm.org/D45114 llvm-svn: 328993
This commit is contained in:
parent
868112181b
commit
2a78fa5209
clang
@ -1391,6 +1391,7 @@ BUILTIN(__builtin_coro_promise, "v*v*IiIb", "n")
|
||||
|
||||
BUILTIN(__builtin_coro_size, "z", "n")
|
||||
BUILTIN(__builtin_coro_frame, "v*", "n")
|
||||
BUILTIN(__builtin_coro_noop, "v*", "n")
|
||||
BUILTIN(__builtin_coro_free, "v*v*", "n")
|
||||
|
||||
BUILTIN(__builtin_coro_id, "v*Iiv*v*v*", "n")
|
||||
|
@ -2796,6 +2796,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
||||
return EmitCoroutineIntrinsic(E, Intrinsic::coro_resume);
|
||||
case Builtin::BI__builtin_coro_frame:
|
||||
return EmitCoroutineIntrinsic(E, Intrinsic::coro_frame);
|
||||
case Builtin::BI__builtin_coro_noop:
|
||||
return EmitCoroutineIntrinsic(E, Intrinsic::coro_noop);
|
||||
case Builtin::BI__builtin_coro_free:
|
||||
return EmitCoroutineIntrinsic(E, Intrinsic::coro_free);
|
||||
case Builtin::BI__builtin_coro_destroy:
|
||||
|
@ -17,6 +17,9 @@ void f(int n) {
|
||||
// CHECK-NEXT: call i1 @llvm.coro.alloc(token %[[COROID]])
|
||||
__builtin_coro_alloc();
|
||||
|
||||
// CHECK-NEXT: call i8* @llvm.coro.noop()
|
||||
__builtin_coro_noop();
|
||||
|
||||
// CHECK-NEXT: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// CHECK-NEXT: %[[MEM:.+]] = call i8* @myAlloc(i64 %[[SIZE]])
|
||||
// CHECK-NEXT: %[[FRAME:.+]] = call i8* @llvm.coro.begin(token %[[COROID]], i8* %[[MEM]])
|
||||
|
Loading…
x
Reference in New Issue
Block a user