[clang] Extend `retcon.once` coroutines lowering to optionally produce a normal result (PR #66333)
Anton Korobeynikov via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 15 00:53:30 PDT 2023
https://github.com/asl updated https://github.com/llvm/llvm-project/pull/66333
>From 0a7a94b037a3837cbbc2de8c7dfa2e8ba3896593 Mon Sep 17 00:00:00 2001
From: Anton Korobeynikov <anton at korobeynikov.info>
Date: Thu, 7 Sep 2023 18:05:49 -0700
Subject: [PATCH 1/3] Extend retcon.once co-routines to optionally produce
normal result
---
clang/test/CodeGenCoroutines/coro-builtins.c | 2 +-
.../CodeGenCoroutines/coro-eh-cleanup.cpp | 4 +-
clang/test/CodeGenCoroutines/coro-lambda.cpp | 2 +-
llvm/docs/Coroutines.rst | 29 ++-
llvm/include/llvm/IR/Intrinsics.td | 2 +-
llvm/lib/IR/AutoUpgrade.cpp | 12 ++
llvm/lib/Transforms/Coroutines/CoroFrame.cpp | 3 +-
llvm/lib/Transforms/Coroutines/CoroInstr.h | 17 ++
llvm/lib/Transforms/Coroutines/CoroSplit.cpp | 27 ++-
.../test/Assembler/auto_upgrade_intrinsics.ll | 7 +
llvm/test/Transforms/Coroutines/ArgAddr.ll | 4 +-
.../Transforms/Coroutines/coro-align16.ll | 4 +-
.../Transforms/Coroutines/coro-align32.ll | 4 +-
.../Transforms/Coroutines/coro-align64-02.ll | 4 +-
.../Transforms/Coroutines/coro-align64.ll | 4 +-
.../Transforms/Coroutines/coro-align8-02.ll | 4 +-
.../test/Transforms/Coroutines/coro-align8.ll | 4 +-
.../Coroutines/coro-alloc-with-param-O0.ll | 4 +-
.../Coroutines/coro-alloc-with-param-O2.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-01.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-02.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-03.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-04.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-05.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-06.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-07.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-08.ll | 6 +-
.../Transforms/Coroutines/coro-alloca-09.ll | 4 +-
.../coro-alloca-loop-carried-address.ll | 4 +-
...o-async-addr-lifetime-infinite-loop-bug.ll | 2 +-
.../coro-async-addr-lifetime-start-bug.ll | 2 +-
.../Coroutines/coro-async-dyn-align.ll | 2 +-
llvm/test/Transforms/Coroutines/coro-async.ll | 4 +-
.../Transforms/Coroutines/coro-byval-param.ll | 4 +-
.../Coroutines/coro-catchswitch-cleanuppad.ll | 4 +-
.../Transforms/Coroutines/coro-catchswitch.ll | 4 +-
.../Transforms/Coroutines/coro-debug-O2.ll | 4 +-
.../Coroutines/coro-debug-coro-frame.ll | 6 +-
...coro-debug-dbg.values-not_used_in_frame.ll | 4 +-
.../Coroutines/coro-debug-dbg.values.ll | 4 +-
.../Coroutines/coro-debug-frame-variable.ll | 4 +-
.../coro-debug-spill-dbg.declare.ll | 4 +-
llvm/test/Transforms/Coroutines/coro-debug.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-00.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-01.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-02.ll | 4 +-
.../Coroutines/coro-frame-arrayalloca.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-00.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-01.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-02.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-03.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-04.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-05.ll | 4 +-
.../Coroutines/coro-frame-unreachable.ll | 4 +-
llvm/test/Transforms/Coroutines/coro-frame.ll | 4 +-
.../Transforms/Coroutines/coro-materialize.ll | 12 +-
.../Coroutines/coro-noalias-param.ll | 4 +-
.../Transforms/Coroutines/coro-padding.ll | 4 +-
.../Transforms/Coroutines/coro-param-copy.ll | 4 +-
.../Coroutines/coro-preserve-final.ll | 4 +-
.../Transforms/Coroutines/coro-readnone-02.ll | 4 +-
.../Transforms/Coroutines/coro-readnone.ll | 4 +-
.../coro-retcon-alloca-opaque-ptr.ll | 6 +-
.../Coroutines/coro-retcon-alloca.ll | 12 +-
.../Coroutines/coro-retcon-frame.ll | 4 +-
.../Coroutines/coro-retcon-once-private.ll | 4 +-
.../Coroutines/coro-retcon-once-value.ll | 189 +++++++++++++++---
.../Coroutines/coro-retcon-once-value2.ll | 119 ++++++++++-
.../Coroutines/coro-retcon-opaque-ptr.ll | 6 +-
.../Coroutines/coro-retcon-remat.ll | 4 +-
.../Coroutines/coro-retcon-resume-values.ll | 4 +-
.../Coroutines/coro-retcon-resume-values2.ll | 4 +-
.../Coroutines/coro-retcon-unreachable.ll | 4 +-
.../Coroutines/coro-retcon-value.ll | 4 +-
.../test/Transforms/Coroutines/coro-retcon.ll | 8 +-
.../Coroutines/coro-spill-after-phi.ll | 4 +-
.../Coroutines/coro-spill-corobegin.ll | 4 +-
.../coro-spill-defs-before-corobegin.ll | 4 +-
.../Coroutines/coro-spill-promise-02.ll | 4 +-
.../Coroutines/coro-spill-promise.ll | 4 +-
.../Transforms/Coroutines/coro-split-00.ll | 4 +-
.../Transforms/Coroutines/coro-split-01.ll | 4 +-
.../Transforms/Coroutines/coro-split-02.ll | 4 +-
.../Transforms/Coroutines/coro-split-alloc.ll | 4 +-
.../Transforms/Coroutines/coro-split-dbg.ll | 4 +-
.../Transforms/Coroutines/coro-split-eh-00.ll | 6 +-
.../Transforms/Coroutines/coro-split-eh-01.ll | 6 +-
.../Coroutines/coro-split-final-suspend.ll | 8 +-
.../Coroutines/coro-split-hidden.ll | 4 +-
.../Coroutines/coro-split-musttail-ppc64le.ll | 4 +-
.../Coroutines/coro-split-musttail.ll | 4 +-
.../Coroutines/coro-split-musttail1.ll | 4 +-
.../Coroutines/coro-split-musttail10.ll | 4 +-
.../Coroutines/coro-split-musttail11.ll | 4 +-
.../Coroutines/coro-split-musttail12.ll | 4 +-
.../Coroutines/coro-split-musttail13.ll | 6 +-
.../Coroutines/coro-split-musttail2.ll | 4 +-
.../Coroutines/coro-split-musttail3.ll | 4 +-
.../Coroutines/coro-split-musttail4.ll | 4 +-
.../Coroutines/coro-split-musttail5.ll | 4 +-
.../Coroutines/coro-split-musttail6.ll | 6 +-
.../Coroutines/coro-split-musttail7.ll | 6 +-
.../Coroutines/coro-split-musttail8.ll | 4 +-
.../Coroutines/coro-split-musttail9.ll | 4 +-
.../Coroutines/coro-split-no-lieftime.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-01.ll | 6 +-
.../Coroutines/coro-split-sink-lifetime-02.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-03.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-04.ll | 4 +-
.../Transforms/Coroutines/coro-swifterror.ll | 6 +-
.../Transforms/Coroutines/coro-zero-alloca.ll | 4 +-
llvm/test/Transforms/Coroutines/ex0.ll | 4 +-
llvm/test/Transforms/Coroutines/ex1.ll | 4 +-
llvm/test/Transforms/Coroutines/ex2.ll | 4 +-
llvm/test/Transforms/Coroutines/ex3.ll | 4 +-
llvm/test/Transforms/Coroutines/ex4.ll | 4 +-
llvm/test/Transforms/Coroutines/ex5.ll | 4 +-
llvm/test/Transforms/Coroutines/no-suspend.ll | 18 +-
.../Transforms/Coroutines/phi-coro-end.ll | 4 +-
llvm/test/Transforms/Coroutines/remarks.ll | 4 +-
.../test/Transforms/FunctionAttrs/noreturn.ll | 4 +-
.../Transforms/LICM/sink-with-coroutine.ll | 10 +-
.../test/Target/LLVMIR/llvmir-intrinsics.mlir | 4 +-
123 files changed, 615 insertions(+), 302 deletions(-)
diff --git a/clang/test/CodeGenCoroutines/coro-builtins.c b/clang/test/CodeGenCoroutines/coro-builtins.c
index e58820db6783987..a329200aa548dc0 100644
--- a/clang/test/CodeGenCoroutines/coro-builtins.c
+++ b/clang/test/CodeGenCoroutines/coro-builtins.c
@@ -37,7 +37,7 @@ void f(int n) {
// CHECK-NEXT: call ptr @llvm.coro.free(token %[[COROID]], ptr %[[FRAME]])
__builtin_coro_free(__builtin_coro_frame());
- // CHECK-NEXT: call i1 @llvm.coro.end(ptr %[[FRAME]], i1 false)
+ // CHECK-NEXT: call i1 (ptr, i1, ...) @llvm.coro.end(ptr %[[FRAME]], i1 false)
__builtin_coro_end(__builtin_coro_frame(), 0);
// CHECK-NEXT: call i8 @llvm.coro.suspend(token none, i1 true)
diff --git a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
index c4a6ae96f551e19..e055c4d7561b2c3 100644
--- a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
+++ b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
@@ -60,7 +60,7 @@ coro_t f() {
// CHECK: [[COROENDBB]]:
// CHECK-NEXT: %[[CLPAD:.+]] = cleanuppad within none
-// CHECK-NEXT: call i1 @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %[[CLPAD]]) ]
+// CHECK-NEXT: call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %[[CLPAD]]) ]
// CHECK-NEXT: cleanupret from %[[CLPAD]] unwind label
// CHECK-LPAD: @_Z1fv(
@@ -76,7 +76,7 @@ coro_t f() {
// CHECK-LPAD: to label %{{.+}} unwind label %[[UNWINDBB:.+]]
// CHECK-LPAD: [[UNWINDBB]]:
-// CHECK-LPAD: %[[I1RESUME:.+]] = call i1 @llvm.coro.end(ptr null, i1 true)
+// CHECK-LPAD: %[[I1RESUME:.+]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
// CHECK-LPAD: br i1 %[[I1RESUME]], label %[[EHRESUME:.+]], label
// CHECK-LPAD: [[EHRESUME]]:
// CHECK-LPAD-NEXT: %[[exn:.+]] = load ptr, ptr %exn.slot, align 8
diff --git a/clang/test/CodeGenCoroutines/coro-lambda.cpp b/clang/test/CodeGenCoroutines/coro-lambda.cpp
index 26c51070f9e2d05..06c18ddb8f640c8 100644
--- a/clang/test/CodeGenCoroutines/coro-lambda.cpp
+++ b/clang/test/CodeGenCoroutines/coro-lambda.cpp
@@ -55,4 +55,4 @@ void f() {
// CHECK: alloca %"struct.Task::promise_type"
// CHECK: call token @llvm.coro.id(
// CHECK: call i8 @llvm.coro.suspend(
-// CHECK: call i1 @llvm.coro.end(
+// CHECK: call i1 (ptr, i1, ...) @llvm.coro.end(
diff --git a/llvm/docs/Coroutines.rst b/llvm/docs/Coroutines.rst
index 0a65a39119fd83c..109d8a7f9971928 100644
--- a/llvm/docs/Coroutines.rst
+++ b/llvm/docs/Coroutines.rst
@@ -303,7 +303,7 @@ The LLVM IR for this coroutine looks like this:
call void @free(ptr %mem)
br label %suspend
suspend:
- %unused = call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -630,7 +630,7 @@ store the current value produced by a coroutine.
call void @free(ptr %mem)
br label %suspend
suspend:
- %unused = call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -1312,8 +1312,8 @@ Arguments:
""""""""""
As for ``llvm.core.id.retcon``, except that the return type of the
-continuation prototype must be `void` instead of matching the
-coroutine's return type.
+continuation prototype must represent the normal return type of the continuation
+(instead of matching the coroutine's return type).
Semantics:
""""""""""
@@ -1326,7 +1326,7 @@ A frontend should emit function attribute `presplitcoroutine` for the coroutine.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
- declare i1 @llvm.coro.end(ptr <handle>, i1 <unwind>)
+ declare i1 @llvm.coro.end(ptr <handle>, i1 <unwind>, ...)
Overview:
"""""""""
@@ -1347,6 +1347,21 @@ The second argument should be `true` if this coro.end is in the block that is
part of the unwind sequence leaving the coroutine body due to an exception and
`false` otherwise.
+Other arguments can only be specified for unique-suspend returned-continuation
+coroutines where they will be normal returns of a coroutine continuation
+function. The number of arguments must match the return type of the continuation
+function:
+
+- if the return type of the continuation function is ``void`` there must be no
+ extra argumets
+
+- if the return type of the continuation function is a ``struct``, the arguments
+ will be element types of that ``struct`` in order;
+
+- otherwise, it is just the return value of the continuation function.
+
+No extra arguments are allowed for coro.end calls in unwind sections
+
Semantics:
""""""""""
The purpose of this intrinsic is to allow frontends to mark the cleanup and
@@ -1378,7 +1393,7 @@ For landingpad based exception model, it is expected that frontend uses the
.. code-block:: llvm
ehcleanup:
- %InResumePart = call i1 @llvm.coro.end(ptr null, i1 true)
+ %InResumePart = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
br i1 %InResumePart, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -1403,7 +1418,7 @@ referring to an enclosing cleanuppad as follows:
ehcleanup:
%tok = cleanuppad within none []
- %unused = call i1 @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
+ %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
cleanupret from %tok unwind label %RestOfTheCleanup
The `CoroSplit` pass, if the funclet bundle is present, will insert
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index cd6061a190fbbc0..da186dec2cbca10 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -1643,7 +1643,7 @@ def int_coro_free : Intrinsic<[llvm_ptr_ty], [llvm_token_ty, llvm_ptr_ty],
[IntrReadMem, IntrArgMemOnly,
ReadOnly<ArgIndex<1>>,
NoCapture<ArgIndex<1>>]>;
-def int_coro_end : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty], []>;
+def int_coro_end : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty, llvm_vararg_ty], []>;
def int_coro_end_async
: Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty, llvm_vararg_ty], []>;
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index eedde64203e09cc..cca7649c7a61e43 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -951,6 +951,12 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
F->arg_begin()->getType());
return true;
}
+ if (Name.equals("coro.end") && !F->isVarArg()) {
+ rename(F);
+ NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::coro_end);
+ return true;
+ }
+
break;
}
case 'd':
@@ -4207,6 +4213,12 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
break;
}
+ case Intrinsic::coro_end: {
+ SmallVector<Value *, 2> Args(CI->args());
+ NewCall = Builder.CreateCall(NewFn, Args);
+ break;
+ }
+
case Intrinsic::vector_extract: {
StringRef Name = F->getName();
Name = Name.substr(5); // Strip llvm
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index a12dd710174f3f8..2ab0d7d5854d7bb 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -3046,7 +3046,8 @@ void coro::buildCoroutineFrame(
// Collect the spills for arguments and other not-materializable values.
for (Argument &A : F.args())
for (User *U : A.users())
- if (Checker.isDefinitionAcrossSuspend(A, U))
+ if (Checker.isDefinitionAcrossSuspend(A, U) ||
+ isa<CoroEndInst>(U))
FrameData.Spills[&A].push_back(cast<Instruction>(U));
const DominatorTree DT(F);
diff --git a/llvm/lib/Transforms/Coroutines/CoroInstr.h b/llvm/lib/Transforms/Coroutines/CoroInstr.h
index 014938c15a0a3e0..98fa03c68fc2e02 100644
--- a/llvm/lib/Transforms/Coroutines/CoroInstr.h
+++ b/llvm/lib/Transforms/Coroutines/CoroInstr.h
@@ -633,6 +633,23 @@ class LLVM_LIBRARY_VISIBILITY AnyCoroEndInst : public IntrinsicInst {
/// This represents the llvm.coro.end instruction.
class LLVM_LIBRARY_VISIBILITY CoroEndInst : public AnyCoroEndInst {
public:
+ op_iterator retval_begin() { return std::next(arg_begin(), 2); }
+ const_op_iterator retval_begin() const { return std::next(arg_begin(), 2); }
+
+ op_iterator retval_end() { return arg_end(); }
+ const_op_iterator retval_end() const { return arg_end(); }
+
+ iterator_range<op_iterator> return_values() {
+ return make_range(retval_begin(), retval_end());
+ }
+ iterator_range<const_op_iterator> return_values() const {
+ return make_range(retval_begin(), retval_end());
+ }
+
+ unsigned numReturns() const {
+ return std::distance(retval_begin(), retval_end());
+ }
+
// Methods to support type inquiry through isa, cast, and dyn_cast:
static bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::coro_end;
diff --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 933771c2d08984a..5b3f37a10a9d830 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -234,6 +234,8 @@ static void replaceFallthroughCoroEnd(AnyCoroEndInst *End,
switch (Shape.ABI) {
// The cloned functions in switch-lowering always return void.
case coro::ABI::Switch:
+ assert(cast<CoroEndInst>(End)->numReturns() == 0 &&
+ "switch coroutine should not return any values");
// coro.end doesn't immediately end the coroutine in the main function
// in this lowering, because we need to deallocate the coroutine.
if (!InResume)
@@ -251,14 +253,35 @@ static void replaceFallthroughCoroEnd(AnyCoroEndInst *End,
// In unique continuation lowering, the continuations always return void.
// But we may have implicitly allocated storage.
- case coro::ABI::RetconOnce:
+ case coro::ABI::RetconOnce: {
maybeFreeRetconStorage(Builder, Shape, FramePtr, CG);
- Builder.CreateRetVoid();
+ auto *CoroEnd = cast<CoroEndInst>(End);
+ auto *RetTy = Shape.getResumeFunctionType()->getReturnType();
+ unsigned NumReturns = CoroEnd->numReturns();
+
+ if (auto *RetStructTy = dyn_cast<StructType>(RetTy)) {
+ assert(RetStructTy->getNumElements() == NumReturns &&
+ "numbers of returns should match resume function singature");
+ Value *ReturnValue = UndefValue::get(RetStructTy);
+ unsigned Idx = 0;
+ for (Value *RetValEl : CoroEnd->return_values())
+ ReturnValue = Builder.CreateInsertValue(ReturnValue, RetValEl, Idx++);
+ Builder.CreateRet(ReturnValue);
+ } else if (NumReturns == 0) {
+ assert(RetTy->isVoidTy());
+ Builder.CreateRetVoid();
+ } else {
+ assert(NumReturns == 1);
+ Builder.CreateRet(*CoroEnd->retval_begin());
+ }
break;
+ }
// In non-unique continuation lowering, we signal completion by returning
// a null continuation.
case coro::ABI::Retcon: {
+ assert(cast<CoroEndInst>(End)->numReturns() == 0 &&
+ "retcon coroutine should not return any values");
maybeFreeRetconStorage(Builder, Shape, FramePtr, CG);
auto RetTy = Shape.getResumeFunctionType()->getReturnType();
auto RetStructTy = dyn_cast<StructType>(RetTy);
diff --git a/llvm/test/Assembler/auto_upgrade_intrinsics.ll b/llvm/test/Assembler/auto_upgrade_intrinsics.ll
index acca39e31403313..2b64b42d1ce224c 100644
--- a/llvm/test/Assembler/auto_upgrade_intrinsics.ll
+++ b/llvm/test/Assembler/auto_upgrade_intrinsics.ll
@@ -47,6 +47,13 @@ entry:
ret void
}
+declare i1 @llvm.coro.end(ptr, i1)
+define void @test.coro.end(ptr %ptr) {
+; CHECK-LABEL: @test.coro.end(
+; CHECK: call i1 (ptr, i1, ...) @llvm.coro.end(ptr %ptr, i1 false)
+ call i1 @llvm.coro.end(ptr %ptr, i1 false)
+ ret void
+}
@a = private global [60 x i8] zeroinitializer, align 1
diff --git a/llvm/test/Transforms/Coroutines/ArgAddr.ll b/llvm/test/Transforms/Coroutines/ArgAddr.ll
index a06dd66da1c5851..29925d39dd0cef0 100644
--- a/llvm/test/Transforms/Coroutines/ArgAddr.ll
+++ b/llvm/test/Transforms/Coroutines/ArgAddr.ll
@@ -45,7 +45,7 @@ coro_Cleanup:
br label %coro_Suspend
coro_Suspend:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret ptr %1
}
@@ -69,7 +69,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-align16.ll b/llvm/test/Transforms/Coroutines/coro-align16.ll
index fdd8af749768068..a8325166d5a2545 100644
--- a/llvm/test/Transforms/Coroutines/coro-align16.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align16.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align32.ll b/llvm/test/Transforms/Coroutines/coro-align32.ll
index 032fda5f3b2a74f..0801207daedf26c 100644
--- a/llvm/test/Transforms/Coroutines/coro-align32.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align32.ll
@@ -28,7 +28,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align64-02.ll b/llvm/test/Transforms/Coroutines/coro-align64-02.ll
index 2eab5c581db310c..106aabb349f1e31 100644
--- a/llvm/test/Transforms/Coroutines/coro-align64-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align64-02.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align64.ll b/llvm/test/Transforms/Coroutines/coro-align64.ll
index aff05b62f1ac9a7..d5f7583fe09a010 100644
--- a/llvm/test/Transforms/Coroutines/coro-align64.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align64.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align8-02.ll b/llvm/test/Transforms/Coroutines/coro-align8-02.ll
index 2bbdf0e0164ee44..59ddec051ce1798 100644
--- a/llvm/test/Transforms/Coroutines/coro-align8-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align8-02.ll
@@ -20,7 +20,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -40,7 +40,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @aligned_alloc(i32, i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-align8.ll b/llvm/test/Transforms/Coroutines/coro-align8.ll
index a8bdba356b1fb93..ac37677c3f503c6 100644
--- a/llvm/test/Transforms/Coroutines/coro-align8.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align8.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
index 31118c4c25770fc..8e094b1fc9e2550 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
@@ -24,7 +24,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -54,7 +54,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @myAlloc(i64, i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
index 9eae6cc2cfa7e99..f2b1e4fa93b724b 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
@@ -21,7 +21,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @myAlloc(i64, i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-01.ll b/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
index 9ba39491776ea1d..e43a736d718ebb3 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
@@ -33,7 +33,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -55,7 +55,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-02.ll b/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
index 76d9a0126382e0e..2879e44d3fb26dc 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
@@ -25,7 +25,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-03.ll b/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
index ec76a8a55365429..8c34f44f28fe021 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
@@ -23,7 +23,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-04.ll b/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
index e528d81986f1017..15e7c540eed5030 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
@@ -32,7 +32,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -53,7 +53,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-05.ll b/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
index 6529e8fda1be6c9..55acc9789dfa548 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
@@ -23,7 +23,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @print(i32)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-06.ll b/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
index a3444c30121ecef..1325db2e795849e 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-07.ll b/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
index 57dde64be6759d6..3647b7b896b1e06 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
@@ -36,7 +36,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-08.ll b/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
index b0aeadc81e9ff33..7496e55d7d9b9be 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
@@ -32,7 +32,7 @@ await.ready:
%StrayCoroSave = call token @llvm.coro.save(ptr null)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -59,7 +59,7 @@ await.ready:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -75,6 +75,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-09.ll b/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
index 2e0a8def2d54470..d6bc51f63406500 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
@@ -37,7 +37,7 @@ await.ready:
%StrayCoroSave = call token @llvm.coro.save(ptr null)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -52,6 +52,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll b/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
index ffdd0ab66359ff8..8642cc28ea4368f 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
@@ -68,7 +68,7 @@ loop:
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -80,6 +80,6 @@ declare i64 @llvm.coro.size.i64()
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare token @llvm.coro.save(ptr)
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.lifetime.start(i64, ptr nocapture)
declare void @llvm.lifetime.end(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
index d4415d38fd8b243..77f706c108d12e7 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
@@ -73,7 +73,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @context_alloc()
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
index 0f125ad274ea612..c709eee351d763e 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
@@ -97,7 +97,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @context_alloc()
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll b/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
index e962dc7090445a4..e0f32c990e79125 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
@@ -28,7 +28,7 @@ declare ptr @llvm.coro.async.resume()
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare swiftcc void @asyncReturn(ptr)
declare swiftcc void @asyncSuspend(ptr)
declare {ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
diff --git a/llvm/test/Transforms/Coroutines/coro-async.ll b/llvm/test/Transforms/Coroutines/coro-async.ll
index 4a49217e4df3df4..eaf01bfa3f03f82 100644
--- a/llvm/test/Transforms/Coroutines/coro-async.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async.ll
@@ -211,7 +211,7 @@ entry:
%continuation_actor_arg = extractvalue {ptr, ptr, ptr} %res.2, 1
tail call swiftcc void @asyncReturn(ptr %async.ctxt, ptr %continuation_task_arg, ptr %continuation_actor_arg)
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -501,7 +501,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @llvm.coro.async.context.alloc(ptr, ptr)
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-byval-param.ll b/llvm/test/Transforms/Coroutines/coro-byval-param.ll
index 5f7c1939f9f4708..62a924b7818dac4 100644
--- a/llvm/test/Transforms/Coroutines/coro-byval-param.ll
+++ b/llvm/test/Transforms/Coroutines/coro-byval-param.ll
@@ -52,7 +52,7 @@ coro.free: ; preds = %cleanup33
br label %coro.ret
coro.ret: ; preds = %coro.free, %cleanup33, %init.ready, %coro.init
- %10 = call i1 @llvm.coro.end(ptr null, i1 false) #10
+ %10 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #10
ret ptr %call2
}
@@ -102,7 +102,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare void @_ZN4task12promise_type13final_suspendEv(ptr nonnull dereferenceable(1)) local_unnamed_addr #7 align 2
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
; Function Attrs: nobuiltin nounwind
declare void @_ZdlPv(ptr) local_unnamed_addr #8
diff --git a/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll b/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
index f6f4607b3e810bd..ca5a230fd2ad057 100644
--- a/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
+++ b/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
catch.dispatch.1:
@@ -106,7 +106,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-catchswitch.ll b/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
index dca9a754c9f6ce5..20f8d0ee17d3b53 100644
--- a/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
+++ b/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
@@ -54,7 +54,7 @@ resume: ; preds = %await2.suspend
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret void
cleanuppad:
@@ -80,7 +80,7 @@ declare void @print(i32)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
; Function Attrs: nobuiltin nounwind
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-O2.ll b/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
index e857b0ddf2876b3..3bcdfa47f94cd1c 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
@@ -110,7 +110,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -126,7 +126,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll b/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
index dada825379137f5..b2d16ef1d3b3e8d 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
@@ -205,7 +205,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -334,7 +334,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -350,7 +350,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
index ed76c67860ee194..7e5c39f61c82ac5 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
@@ -123,7 +123,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -155,7 +155,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @new(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
index fa6c6e9b8d2cfed..ae3eb109f8a6ddd 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
@@ -154,7 +154,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -186,7 +186,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @new(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll b/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
index 7d9aa879fc5cb8a..d83d1c4f65ee71b 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
@@ -182,7 +182,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreachable: ; preds = %after.coro.free
@@ -197,7 +197,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll b/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
index d6606d7cd6ac51e..c313606830c3ee8 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
@@ -74,7 +74,7 @@ cleanup: ; preds = %resume, %coro.begin
br label %suspend
suspend: ; preds = %cleanup, %coro.begin
- %2 = call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ %2 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -104,7 +104,7 @@ declare i1 @llvm.coro.alloc(token) #4
declare ptr @llvm.coro.begin(token, ptr writeonly) #4
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1) #4
+declare i1 @llvm.coro.end(ptr, i1, ...) #4
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug.ll b/llvm/test/Transforms/Coroutines/coro-debug.ll
index dec20ab7a07447c..bc76992fad86382 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug.ll
@@ -70,7 +70,7 @@ coro_Cleanup: ; preds = %sw.epilog, %sw.bb1
br label %coro_Suspend, !dbg !24
coro_Suspend: ; preds = %coro_Cleanup, %sw.default
- %7 = call i1 @llvm.coro.end(ptr null, i1 false) #7, !dbg !24
+ %7 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #7, !dbg !24
%8 = load ptr, ptr %coro_hdl, align 8, !dbg !24
store i32 0, ptr %late_local, !dbg !24
ret ptr %8, !dbg !24
@@ -111,7 +111,7 @@ declare void @free(ptr) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1) #5
+declare i1 @llvm.coro.end(ptr, i1, ...) #5
; Function Attrs: alwaysinline
define private void @coro.devirt.trigger(ptr) #6 {
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
index e30b3fa55536c3c..e21b94969f66563 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
@@ -65,7 +65,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreach:
@@ -92,6 +92,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
index 3959229959f4300..d136cf2aa509056 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
@@ -59,7 +59,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreach:
@@ -86,6 +86,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
index 95a73bec09deced..a67090c491492b2 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
@@ -59,7 +59,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -83,6 +83,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll b/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
index 7d1a3f2e6ef803b..260514360c80a1f 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
@@ -30,7 +30,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -65,7 +65,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
index 0aee256d20e14ce..47083d477f690a9 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -66,7 +66,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
index a1d1134fab35f19..6988081277571dd 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
@@ -53,7 +53,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -68,6 +68,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
index 923a93ca1694b1e..c9c4b4290e5e6bc 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", %struct.big_structure, i1 }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
index 94032607d98d602..103724354235c8c 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -66,7 +66,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
index 65a38e6da0a4c7b..ed2de2ca0b90261 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", %struct.big_structure, i1, [26 x i8], %struct.big_structure.2 }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
index 2722c9ec4561633..87784ebb80d7317 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", i1, [14 x i8], %struct.big_structure }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll b/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
index 17d2250611b8e1b..f3a3150890f0736 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
no.predecessors:
@@ -43,7 +43,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i1)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame.ll b/llvm/test/Transforms/Coroutines/coro-frame.ll
index e7fa887a05fa229..1691ba757c9f604 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
pad:
%tok = cleanuppad within none []
@@ -58,7 +58,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-materialize.ll b/llvm/test/Transforms/Coroutines/coro-materialize.ll
index 7385337ab5750c2..195176e769aa652 100644
--- a/llvm/test/Transforms/Coroutines/coro-materialize.ll
+++ b/llvm/test/Transforms/Coroutines/coro-materialize.ll
@@ -41,7 +41,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -73,7 +73,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -109,7 +109,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -145,7 +145,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -186,7 +186,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -200,7 +200,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-noalias-param.ll b/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
index 67e51b1005f8071..3763d232d23d299 100644
--- a/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
+++ b/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
@@ -19,7 +19,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret void
}
@@ -33,7 +33,7 @@ declare i32 @llvm.coro.size.i32()
declare i8 @llvm.coro.suspend(token, i1)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-padding.ll b/llvm/test/Transforms/Coroutines/coro-padding.ll
index faed9b4b3b5491f..04913faae25fe3d 100644
--- a/llvm/test/Transforms/Coroutines/coro-padding.ll
+++ b/llvm/test/Transforms/Coroutines/coro-padding.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -54,7 +54,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-param-copy.ll b/llvm/test/Transforms/Coroutines/coro-param-copy.ll
index 6e80577b56b39eb..f6a8593c75b7854 100644
--- a/llvm/test/Transforms/Coroutines/coro-param-copy.ll
+++ b/llvm/test/Transforms/Coroutines/coro-param-copy.ll
@@ -41,7 +41,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -83,7 +83,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.memset.p0.i32(ptr, i8, i32, i1)
diff --git a/llvm/test/Transforms/Coroutines/coro-preserve-final.ll b/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
index 730868a9f1ccda1..dd4d73916273fe9 100644
--- a/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
+++ b/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
@@ -80,7 +80,7 @@ coro.free: ; preds = %cleanup62
br label %coro.ret
coro.ret: ; preds = %coro.free, %cleanup62, %final.suspend, %await2.suspend, %await.suspend, %init.suspend
- %20 = call i1 @llvm.coro.end(ptr null, i1 false) #13
+ %20 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #13
ret ptr %__promise
}
@@ -96,7 +96,7 @@ declare i8 @llvm.coro.suspend(token, i1) #3
declare dso_local ptr @_Z5Innerv() local_unnamed_addr #8
declare dso_local void @_ZdlPv(ptr noundef) local_unnamed_addr #9
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare dso_local void @_Z5_exiti(i32 noundef) local_unnamed_addr #10
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #11
diff --git a/llvm/test/Transforms/Coroutines/coro-readnone-02.ll b/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
index c96377fd1c6d8e6..160aa22d5b2ae99 100644
--- a/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
@@ -39,7 +39,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -75,7 +75,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-readnone.ll b/llvm/test/Transforms/Coroutines/coro-readnone.ll
index b7bcff45c4107a9..73b3bce4dd3cbf3 100644
--- a/llvm/test/Transforms/Coroutines/coro-readnone.ll
+++ b/llvm/test/Transforms/Coroutines/coro-readnone.ll
@@ -33,7 +33,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -83,7 +83,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll b/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
index 879e368489a6a29..60021056251d9ad 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
@@ -34,7 +34,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -69,7 +69,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -77,7 +77,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
declare void @llvm.coro.suspend.retcon.isVoid(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare token @llvm.coro.alloca.alloc.i32(i32, i32)
declare ptr @llvm.coro.alloca.get(token)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll b/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
index ab3da8cde729ac9..998cb09fe555c64 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
@@ -33,7 +33,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -69,7 +69,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -102,7 +102,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -170,7 +170,7 @@ forward:
br label %back
end:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -217,7 +217,7 @@ non_alloca_block:
br label %suspend
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -225,7 +225,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
declare void @llvm.coro.suspend.retcon.isVoid(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare token @llvm.coro.alloca.alloc.i32(i32, i32)
declare ptr @llvm.coro.alloca.get(token)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll b/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
index 3418e07a9b0aa38..910faabe10d6744 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
@@ -32,7 +32,7 @@ resume:
br label %end
end:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
; Make sure we don't lose writes to the frame.
@@ -52,5 +52,5 @@ end:
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
index 3476db91dc85f25..eb1a4691876c3c5 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
@@ -30,14 +30,14 @@ neg.cont:
br label %cleanup
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
index c76a76c5fb85a32..fb77bb3586b608c 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
@@ -1,21 +1,10 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
; RUN: opt < %s -passes='default<O2>' -S | FileCheck %s
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
define {ptr, i32} @f(ptr %buffer, ptr %array) {
-; CHECK-LABEL: @f(
-; CHECK-NEXT: PostSpill:
-; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[BUFFER:%.*]], align 8
-; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[ARRAY]], align 4
-; CHECK-NEXT: [[LOAD_POS:%.*]] = icmp sgt i32 [[LOAD]], 0
-; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[LOAD_POS]], ptr @f.resume.0, ptr @f.resume.1
-; CHECK-NEXT: [[SPEC_SELECT4:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD]], i32 0)
-; CHECK-NEXT: [[TMP0:%.*]] = insertvalue { ptr, i32 } poison, ptr [[SPEC_SELECT]], 0
-; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, i32 } [[TMP0]], i32 [[SPEC_SELECT4]], 1
-; CHECK-NEXT: ret { ptr, i32 } [[TMP1]]
-;
entry:
%id = call token @llvm.coro.id.retcon.once(i32 8, i32 8, ptr %buffer, ptr @prototype, ptr @allocate, ptr @deallocate)
%hdl = call ptr @llvm.coro.begin(token %id, ptr null)
@@ -40,23 +29,11 @@ neg.cont:
br label %cleanup
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
-define void @test(ptr %array) {
-; CHECK-LABEL: @test(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = alloca [8 x i8], align 8
-; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[TMP0]], align 8
-; CHECK-NEXT: [[LOAD_I:%.*]] = load i32, ptr [[ARRAY]], align 4
-; CHECK-NEXT: [[LOAD_POS_I:%.*]] = icmp sgt i32 [[LOAD_I]], 0
-; CHECK-NEXT: [[SPEC_SELECT_I:%.*]] = select i1 [[LOAD_POS_I]], ptr @f.resume.0, ptr @f.resume.1
-; CHECK-NEXT: [[SPEC_SELECT4_I:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD_I]], i32 0)
-; CHECK-NEXT: tail call void @print(i32 [[SPEC_SELECT4_I]])
-; CHECK-NEXT: call void [[SPEC_SELECT_I]](ptr nonnull [[TMP0]], i1 zeroext false)
-; CHECK-NEXT: ret void
-;
+define void @test.f(ptr %array) {
entry:
%0 = alloca [8 x i8], align 8
%prepare = call ptr @llvm.coro.prepare.retcon(ptr @f)
@@ -68,19 +45,177 @@ entry:
ret void
}
+define {ptr, i32} @g(ptr %buffer, ptr %array, i32 %val) {
+entry:
+ %id = call token @llvm.coro.id.retcon.once(i32 8, i32 8, ptr %buffer, ptr @prototype2, ptr @allocate, ptr @deallocate)
+ %hdl = call ptr @llvm.coro.begin(token %id, ptr null)
+ %load = load i32, ptr %array
+ %load.pos = icmp sgt i32 %load, 0
+ br i1 %load.pos, label %pos, label %neg
+
+pos:
+ %unwind0 = call i1 (...) @llvm.coro.suspend.retcon.i1(i32 %load)
+ br i1 %unwind0, label %cleanup, label %pos.cont
+
+pos.cont:
+ store i32 0, ptr %array, align 4
+ br label %cleanup
+
+neg:
+ %unwind1 = call i1 (...) @llvm.coro.suspend.retcon.i1(i32 0)
+ br i1 %unwind1, label %cleanup, label %neg.cont
+
+neg.cont:
+ store i32 10, ptr %array, align 4
+ br label %cleanup
+
+cleanup:
+ %new.val = add i32 %val, 123
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, ptr null, i32 %new.val, ptr @deallocate)
+ unreachable
+}
+
+define void @test.g(ptr %array) {
+entry:
+ %0 = alloca [8 x i8], align 8
+ %prepare = call ptr @llvm.coro.prepare.retcon(ptr @f)
+ %yield.result = call {ptr, i32} %prepare(ptr %0, ptr %array)
+ %value = extractvalue {ptr, i32} %yield.result, 1
+ call void @print(i32 %value)
+ %cont = extractvalue {ptr, i32} %yield.result, 0
+ %normal.result = call {ptr, i32, ptr} %cont(ptr %0, i1 zeroext 0)
+ %value2 = extractvalue {ptr, i32, ptr} %normal.result, 1
+ call void @print(i32 %value2)
+ ret void
+}
+
; Unfortunately, we don't seem to fully optimize this right now due
; to some sort of phase-ordering thing.
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @prototype(ptr, i1 zeroext)
+declare {ptr, i32, ptr} @prototype2(ptr, i1 zeroext)
declare noalias ptr @allocate(i32 %size)
declare void @deallocate(ptr %ptr)
declare void @print(i32)
+; CHECK-LABEL: @f(
+; CHECK-NEXT: PostSpill:
+; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[BUFFER:%.*]], align 8
+; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[ARRAY]], align 4
+; CHECK-NEXT: [[LOAD_POS:%.*]] = icmp sgt i32 [[LOAD]], 0
+; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[LOAD_POS]], ptr @f.resume.0, ptr @f.resume.1
+; CHECK-NEXT: [[SPEC_SELECT4:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD]], i32 0)
+; CHECK-NEXT: [[TMP0:%.*]] = insertvalue { ptr, i32 } poison, ptr [[SPEC_SELECT]], 0
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, i32 } [[TMP0]], i32 [[SPEC_SELECT4]], 1
+; CHECK-NEXT: ret { ptr, i32 } [[TMP1]]
+;
+;
+; CHECK-LABEL: @f.resume.0(
+; CHECK-NEXT: entryresume.0:
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CLEANUP_SINK_SPLIT:%.*]]
+; CHECK: cleanup.sink.split:
+; CHECK-NEXT: [[ARRAY_RELOAD:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: store i32 0, ptr [[ARRAY_RELOAD]], align 4
+; CHECK-NEXT: br label [[COROEND]]
+; CHECK: CoroEnd:
+; CHECK-NEXT: ret void
+;
+;
+; CHECK-LABEL: @f.resume.1(
+; CHECK-NEXT: entryresume.1:
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CLEANUP_SINK_SPLIT:%.*]]
+; CHECK: cleanup.sink.split:
+; CHECK-NEXT: [[ARRAY_RELOAD:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: store i32 10, ptr [[ARRAY_RELOAD]], align 4
+; CHECK-NEXT: br label [[COROEND]]
+; CHECK: CoroEnd:
+; CHECK-NEXT: ret void
+;
+;
+; CHECK-LABEL: @test.f(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = alloca [8 x i8], align 8
+; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[TMP0]], align 8
+; CHECK-NEXT: [[LOAD_I:%.*]] = load i32, ptr [[ARRAY]], align 4
+; CHECK-NEXT: [[LOAD_POS_I:%.*]] = icmp sgt i32 [[LOAD_I]], 0
+; CHECK-NEXT: [[SPEC_SELECT_I:%.*]] = select i1 [[LOAD_POS_I]], ptr @f.resume.0, ptr @f.resume.1
+; CHECK-NEXT: [[SPEC_SELECT4_I:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD_I]], i32 0)
+; CHECK-NEXT: tail call void @print(i32 [[SPEC_SELECT4_I]])
+; CHECK-NEXT: call void [[SPEC_SELECT_I]](ptr nonnull [[TMP0]], i1 zeroext false)
+; CHECK-NEXT: ret void
+;
+;
+; CHECK-LABEL: @g(
+; CHECK-NEXT: PostSpill:
+; CHECK-NEXT: [[TMP0:%.*]] = tail call ptr @allocate(i32 16)
+; CHECK-NEXT: store ptr [[TMP0]], ptr [[BUFFER:%.*]], align 8
+; CHECK-NEXT: [[VAL_SPILL_ADDR:%.*]] = getelementptr inbounds [[G_FRAME:%.*]], ptr [[TMP0]], i64 0, i32 1
+; CHECK-NEXT: store i32 [[VAL:%.*]], ptr [[VAL_SPILL_ADDR]], align 4
+; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[TMP0]], align 8
+; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[ARRAY]], align 4
+; CHECK-NEXT: [[LOAD_POS:%.*]] = icmp sgt i32 [[LOAD]], 0
+; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[LOAD_POS]], ptr @g.resume.0, ptr @g.resume.1
+; CHECK-NEXT: [[SPEC_SELECT4:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD]], i32 0)
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, i32 } poison, ptr [[SPEC_SELECT]], 0
+; CHECK-NEXT: [[TMP2:%.*]] = insertvalue { ptr, i32 } [[TMP1]], i32 [[SPEC_SELECT4]], 1
+; CHECK-NEXT: ret { ptr, i32 } [[TMP2]]
+;
+;
+; CHECK-LABEL: @g.resume.0(
+; CHECK-NEXT: entryresume.0:
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CLEANUP_SINK_SPLIT:%.*]]
+; CHECK: cleanup.sink.split:
+; CHECK-NEXT: [[ARRAY_RELOAD:%.*]] = load ptr, ptr [[TMP2]], align 8
+; CHECK-NEXT: store i32 0, ptr [[ARRAY_RELOAD]], align 4
+; CHECK-NEXT: br label [[COROEND]]
+; CHECK: CoroEnd:
+; CHECK-NEXT: [[VAL_RELOAD_ADDR:%.*]] = getelementptr inbounds [[G_FRAME:%.*]], ptr [[TMP2]], i64 0, i32 1
+; CHECK-NEXT: [[VAL_RELOAD:%.*]] = load i32, ptr [[VAL_RELOAD_ADDR]], align 4
+; CHECK-NEXT: [[NEW_VAL:%.*]] = add i32 [[VAL_RELOAD]], 123
+; CHECK-NEXT: tail call void @deallocate(ptr [[TMP2]])
+; CHECK-NEXT: [[TMP3:%.*]] = insertvalue { ptr, i32, ptr } { ptr null, i32 undef, ptr undef }, i32 [[NEW_VAL]], 1
+; CHECK-NEXT: [[TMP4:%.*]] = insertvalue { ptr, i32, ptr } [[TMP3]], ptr @deallocate, 2
+; CHECK-NEXT: ret { ptr, i32, ptr } [[TMP4]]
+;
+;
+; CHECK-LABEL: @g.resume.1(
+; CHECK-NEXT: entryresume.1:
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CLEANUP_SINK_SPLIT:%.*]]
+; CHECK: cleanup.sink.split:
+; CHECK-NEXT: [[ARRAY_RELOAD:%.*]] = load ptr, ptr [[TMP2]], align 8
+; CHECK-NEXT: store i32 10, ptr [[ARRAY_RELOAD]], align 4
+; CHECK-NEXT: br label [[COROEND]]
+; CHECK: CoroEnd:
+; CHECK-NEXT: [[VAL_RELOAD_ADDR:%.*]] = getelementptr inbounds [[G_FRAME:%.*]], ptr [[TMP2]], i64 0, i32 1
+; CHECK-NEXT: [[VAL_RELOAD:%.*]] = load i32, ptr [[VAL_RELOAD_ADDR]], align 4
+; CHECK-NEXT: [[NEW_VAL:%.*]] = add i32 [[VAL_RELOAD]], 123
+; CHECK-NEXT: tail call void @deallocate(ptr [[TMP2]])
+; CHECK-NEXT: [[TMP3:%.*]] = insertvalue { ptr, i32, ptr } { ptr null, i32 undef, ptr undef }, i32 [[NEW_VAL]], 1
+; CHECK-NEXT: [[TMP4:%.*]] = insertvalue { ptr, i32, ptr } [[TMP3]], ptr @deallocate, 2
+; CHECK-NEXT: ret { ptr, i32, ptr } [[TMP4]]
+;
+;
+; CHECK-LABEL: @test.g(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = alloca [8 x i8], align 8
+; CHECK-NEXT: store ptr [[ARRAY:%.*]], ptr [[TMP0]], align 8
+; CHECK-NEXT: [[LOAD_I:%.*]] = load i32, ptr [[ARRAY]], align 4
+; CHECK-NEXT: [[LOAD_POS_I:%.*]] = icmp sgt i32 [[LOAD_I]], 0
+; CHECK-NEXT: [[SPEC_SELECT_I:%.*]] = select i1 [[LOAD_POS_I]], ptr @f.resume.0, ptr @f.resume.1
+; CHECK-NEXT: [[SPEC_SELECT4_I:%.*]] = tail call i32 @llvm.smax.i32(i32 [[LOAD_I]], i32 0)
+; CHECK-NEXT: tail call void @print(i32 [[SPEC_SELECT4_I]])
+; CHECK-NEXT: [[NORMAL_RESULT:%.*]] = call { ptr, i32, ptr } [[SPEC_SELECT_I]](ptr nonnull [[TMP0]], i1 zeroext false)
+; CHECK-NEXT: [[VALUE2:%.*]] = extractvalue { ptr, i32, ptr } [[NORMAL_RESULT]], 1
+; CHECK-NEXT: call void @print(i32 [[VALUE2]])
+; CHECK-NEXT: ret void
+;
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
index 17a0a1d0e6b9e85..59e38bc31fee436 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
@@ -19,18 +19,62 @@ cont:
br label %cleanup
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
+define {ptr, ptr} @g(ptr %buffer, ptr %ptr, i8 %val) presplitcoroutine {
+entry:
+ %temp = alloca i32, align 4
+ %id = call token @llvm.coro.id.retcon.once(i32 8, i32 8, ptr %buffer, ptr @prototype2, ptr @allocate, ptr @deallocate)
+ %hdl = call ptr @llvm.coro.begin(token %id, ptr null)
+ %oldvalue = load i32, ptr %ptr
+ store i32 %oldvalue, ptr %temp
+ %unwind = call i1 (...) @llvm.coro.suspend.retcon.i1(ptr %temp)
+ br i1 %unwind, label %cleanup, label %cont
+
+cont:
+ %newvalue = load i32, ptr %temp
+ store i32 %newvalue, ptr %ptr
+ br label %cleanup
+
+cleanup:
+ %newval = add i8 %val, 42
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, i8 %newval)
+ unreachable
+}
+
+
+define {ptr, ptr} @h(ptr %buffer, ptr %ptr) presplitcoroutine {
+entry:
+ %temp = alloca i32, align 4
+ %id = call token @llvm.coro.id.retcon.once(i32 8, i32 8, ptr %buffer, ptr @prototype3, ptr @allocate, ptr @deallocate)
+ %hdl = call ptr @llvm.coro.begin(token %id, ptr null)
+ %oldvalue = load i32, ptr %ptr
+ store i32 %oldvalue, ptr %temp
+ %unwind = call i1 (...) @llvm.coro.suspend.retcon.i1(ptr %temp)
+ br i1 %unwind, label %cleanup, label %cont
+
+cont:
+ %newvalue = load i32, ptr %temp
+ store i32 %newvalue, ptr %ptr
+ br label %cleanup
+
+cleanup:
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, ptr null, i32 123, ptr @deallocate)
+ unreachable
+}
+
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @prototype(ptr, i1 zeroext)
+declare i8 @prototype2(ptr, i1 zeroext)
+declare {ptr, i32, ptr} @prototype3(ptr, i1 zeroext)
declare noalias ptr @allocate(i32 %size)
declare fastcc void @deallocate(ptr %ptr)
@@ -44,21 +88,80 @@ declare void @print(i32)
; CHECK-NEXT: store ptr [[PTR:%.*]], ptr [[TMP0]], align 8
; CHECK-NEXT: [[OLDVALUE:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: store i32 [[OLDVALUE]], ptr [[TEMP]], align 4
-; CHECK-NEXT: [[TMP2:%.*]] = insertvalue { ptr, ptr } { ptr @f.resume.0, ptr poison }, ptr [[TEMP]], 1
-; CHECK-NEXT: ret { ptr, ptr } [[TMP2]]
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, ptr } { ptr @f.resume.0, ptr poison }, ptr [[TEMP]], 1
+; CHECK-NEXT: ret { ptr, ptr } [[TMP1]]
;
;
; CHECK-LABEL: @f.resume.0(
; CHECK-NEXT: entryresume.0:
-; CHECK-NEXT: [[FRAMEPTR:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
-; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[F_FRAME:%.*]], ptr [[FRAMEPTR]], i32 0, i32 1
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[F_FRAME:%.*]], ptr [[TMP2]], i32 0, i32 1
; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CONT:%.*]]
; CHECK: cont:
-; CHECK-NEXT: [[PTR_RELOAD:%.*]] = load ptr, ptr [[FRAMEPTR]], align 8
+; CHECK-NEXT: [[PTR_RELOAD:%.*]] = load ptr, ptr [[TMP2]], align 8
; CHECK-NEXT: [[NEWVALUE:%.*]] = load i32, ptr [[TEMP]], align 4
; CHECK-NEXT: store i32 [[NEWVALUE]], ptr [[PTR_RELOAD]], align 4
; CHECK-NEXT: br label [[COROEND]]
; CHECK: CoroEnd:
-; CHECK-NEXT: call fastcc void @deallocate(ptr [[FRAMEPTR]])
+; CHECK-NEXT: call fastcc void @deallocate(ptr [[TMP2]])
; CHECK-NEXT: ret void
;
+;
+; CHECK-LABEL: @g(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @allocate(i32 16)
+; CHECK-NEXT: store ptr [[TMP0]], ptr [[BUFFER:%.*]], align 8
+; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[G_FRAME:%.*]], ptr [[TMP0]], i32 0, i32 1
+; CHECK-NEXT: [[VAL_SPILL_ADDR:%.*]] = getelementptr inbounds [[G_FRAME]], ptr [[TMP0]], i32 0, i32 2
+; CHECK-NEXT: store i8 [[VAL:%.*]], ptr [[VAL_SPILL_ADDR]], align 1
+; CHECK-NEXT: store ptr [[PTR:%.*]], ptr [[TMP0]], align 8
+; CHECK-NEXT: [[OLDVALUE:%.*]] = load i32, ptr [[PTR]], align 4
+; CHECK-NEXT: store i32 [[OLDVALUE]], ptr [[TEMP]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, ptr } { ptr @g.resume.0, ptr poison }, ptr [[TEMP]], 1
+; CHECK-NEXT: ret { ptr, ptr } [[TMP1]]
+;
+;
+; CHECK-LABEL: @g.resume.0(
+; CHECK-NEXT: entryresume.0:
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[G_FRAME:%.*]], ptr [[TMP2]], i32 0, i32 1
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[CLEANUP:%.*]], label [[CONT:%.*]]
+; CHECK: cont:
+; CHECK-NEXT: [[PTR_RELOAD:%.*]] = load ptr, ptr [[TMP2]], align 8
+; CHECK-NEXT: [[NEWVALUE:%.*]] = load i32, ptr [[TEMP]], align 4
+; CHECK-NEXT: store i32 [[NEWVALUE]], ptr [[PTR_RELOAD]], align 4
+; CHECK-NEXT: br label [[CLEANUP]]
+; CHECK: cleanup:
+; CHECK-NEXT: [[VAL_RELOAD_ADDR:%.*]] = getelementptr inbounds [[G_FRAME]], ptr [[TMP2]], i32 0, i32 2
+; CHECK-NEXT: [[VAL_RELOAD:%.*]] = load i8, ptr [[VAL_RELOAD_ADDR]], align 1
+; CHECK-NEXT: [[NEWVAL:%.*]] = add i8 [[VAL_RELOAD]], 42
+; CHECK-NEXT: call fastcc void @deallocate(ptr [[TMP2]])
+; CHECK-NEXT: ret i8 [[NEWVAL]]
+;
+;
+; CHECK-LABEL: @h(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @allocate(i32 16)
+; CHECK-NEXT: store ptr [[TMP0]], ptr [[BUFFER:%.*]], align 8
+; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[H_FRAME:%.*]], ptr [[TMP0]], i32 0, i32 1
+; CHECK-NEXT: store ptr [[PTR:%.*]], ptr [[TMP0]], align 8
+; CHECK-NEXT: [[OLDVALUE:%.*]] = load i32, ptr [[PTR]], align 4
+; CHECK-NEXT: store i32 [[OLDVALUE]], ptr [[TEMP]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr, ptr } { ptr @h.resume.0, ptr poison }, ptr [[TEMP]], 1
+; CHECK-NEXT: ret { ptr, ptr } [[TMP1]]
+;
+;
+; CHECK-LABEL: @h.resume.0(
+; CHECK-NEXT: entryresume.0:
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0:%.*]], align 8
+; CHECK-NEXT: [[TEMP:%.*]] = getelementptr inbounds [[H_FRAME:%.*]], ptr [[TMP2]], i32 0, i32 1
+; CHECK-NEXT: br i1 [[TMP1:%.*]], label [[COROEND:%.*]], label [[CONT:%.*]]
+; CHECK: cont:
+; CHECK-NEXT: [[PTR_RELOAD:%.*]] = load ptr, ptr [[TMP2]], align 8
+; CHECK-NEXT: [[NEWVALUE:%.*]] = load i32, ptr [[TEMP]], align 4
+; CHECK-NEXT: store i32 [[NEWVALUE]], ptr [[PTR_RELOAD]], align 4
+; CHECK-NEXT: br label [[COROEND]]
+; CHECK: CoroEnd:
+; CHECK-NEXT: call fastcc void @deallocate(ptr [[TMP2]])
+; CHECK-NEXT: ret { ptr, i32, ptr } { ptr null, i32 123, ptr @deallocate }
+;
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll b/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
index 559d3af0246941d..b42b9b0c001417d 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
@@ -26,7 +26,7 @@ resume: ; preds = %loop
br label %loop
cleanup: ; preds = %loop
- %0 = call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ %0 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
unreachable
}
@@ -70,14 +70,14 @@ resume: ; preds = %loop
br label %loop
cleanup: ; preds = %loop
- %0 = call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ %0 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll b/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
index 70de163caff5d91..5f9bb7479130c78 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
@@ -31,14 +31,14 @@ resume1:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare { ptr, i32 } @f_prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
index 09a17f8ab3b38d3..d2091b3734b3d9a 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
@@ -27,7 +27,7 @@ resume:
cleanup:
call void @print(i32 %n.val)
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -66,7 +66,7 @@ entry:
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare { i32, i1 } @llvm.coro.suspend.retcon.sl_i32i1s(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i32, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
index 7c00464211034b8..3e0af5ea9544fcd 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
@@ -15,14 +15,14 @@ entry:
%sum4 = call i32 @add(i32 %sum3, i32 %value1)
%sum5 = call i32 @add(i32 %sum4, i32 %value2)
call void @print(i32 %sum5)
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i32 @llvm.coro.suspend.retcon.i32(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll b/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
index f598e0a3e0d7c99..2d8417765f07340 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
@@ -23,7 +23,7 @@ define hidden swiftcc { ptr, ptr } @no_suspends(ptr %buffer, i64 %arg) #1 {
bb1:
call void @print(i64 %arg)
- call i1 @llvm.coro.end(ptr %begin, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %begin, i1 false)
unreachable
}
@@ -41,7 +41,7 @@ declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #6
declare i1 @llvm.coro.suspend.retcon.i1(...) #5
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #6
declare void @llvm.coro.alloca.free(token) #5
-declare i1 @llvm.coro.end(ptr, i1) #5
+declare i1 @llvm.coro.end(ptr, i1, ...) #5
declare void @llvm.trap()
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-value.ll b/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
index 0b0f5dfd56c953d..9eafa2f238c269d 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
@@ -25,7 +25,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -64,7 +64,7 @@ entry:
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend.retcon.i8(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare {ptr, i32} @prototype(ptr, i8 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon.ll b/llvm/test/Transforms/Coroutines/coro-retcon.ll
index 774c609ed6c441e..61ca4f82c6cc8a2 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon.ll
@@ -33,7 +33,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -103,7 +103,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -137,14 +137,14 @@ cleanup:
call void @use_var_ptr(ptr %a)
%al = load i32, ptr %a
call void @use_var(i32 %al)
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @use_var(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll b/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
index a464c8ac2e2215d..04afb9f06adde49 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare i32 @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll b/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
index 9653bd5b28eeae0..1d87ca5bc776360 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -62,7 +62,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print.i32(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll b/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
index 12b24df00c1de23..10bef085ebb66e8 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
@@ -36,7 +36,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
lpad:
@@ -70,7 +70,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare i32 @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll b/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
index 411067362825efa..79d0a58154625f2 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
@@ -29,7 +29,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -57,7 +57,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-promise.ll b/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
index 8e15d41a1c35b5d..f0a1bc97333e8d8 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
@@ -28,7 +28,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-00.ll b/llvm/test/Transforms/Coroutines/coro-split-00.ll
index c75aff50dab6c86..ee7c2bd1d88f4d2 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-00.ll
@@ -28,7 +28,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -72,7 +72,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") "alloc-family"="malloc"
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-01.ll b/llvm/test/Transforms/Coroutines/coro-split-01.ll
index 039f80db57acf8d..20519b894987e83 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-01.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
define i32 @main() {
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-02.ll b/llvm/test/Transforms/Coroutines/coro-split-02.ll
index ed09f009f9b83b0..fcdc6735c5f6916 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-02.ll
@@ -34,7 +34,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -60,6 +60,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-alloc.ll b/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
index 8759c525b65ab8e..2579c642420fa74 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -57,7 +57,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @custom_alloctor(i32, i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-dbg.ll b/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
index 781571d4a2ce406..c004e96eb085d32 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
@@ -38,7 +38,7 @@ coro_Cleanup: ; preds = %for.cond
br label %coro_Suspend, !dbg !36
coro_Suspend: ; preds = %for.cond, %if.then, %coro_Cleanup
- tail call i1 @llvm.coro.end(ptr null, i1 false) #9, !dbg !38
+ tail call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #9, !dbg !38
ret ptr %2, !dbg !39
}
@@ -57,7 +57,7 @@ declare i8 @llvm.coro.suspend(token, i1) #7
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #5
declare void @free(ptr nocapture) local_unnamed_addr #6
-declare i1 @llvm.coro.end(ptr, i1) #7
+declare i1 @llvm.coro.end(ptr, i1, ...) #7
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #5
declare void @llvm.dbg.value(metadata, metadata, metadata) #1
diff --git a/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll b/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
index d2bb1bbb988918e..eafdcac05daa179 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
@@ -17,7 +17,7 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
call void @print(i32 0) ; should not be present in f.resume
ret ptr %hdl
@@ -26,7 +26,7 @@ lpad:
cleanup
call void @print(i32 2)
- %need.resume = call i1 @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
br i1 %need.resume, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -80,7 +80,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll b/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
index 835d399d55b546f..5586119440dccf5 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
@@ -17,14 +17,14 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
call void @print(i32 0) ; should not be present in f.resume
ret ptr %hdl
lpad:
%tok = cleanuppad within none []
call void @print(i32 2)
- %unused = call i1 @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
+ %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
cleanupret from %tok unwind label %cleanup.cont
cleanup.cont:
@@ -74,7 +74,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll b/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
index df99e8905b7b9b5..4cbdbb369c59525 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
@@ -28,7 +28,7 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
call void @print(i32 0)
ret ptr %hdl
@@ -37,7 +37,7 @@ lpad:
cleanup
call void @print(i32 2)
- %need.resume = call i1 @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
br i1 %need.resume, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -97,7 +97,7 @@ resume:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
call void @print(i32 0)
ret ptr %hdl
}
@@ -122,7 +122,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-hidden.ll b/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
index aebc0bb8d93ba7f..c6a245b690570ae 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
@@ -30,7 +30,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -74,7 +74,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized")
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
index 41787c4a31ea957..5a7dcbc19e0e79c 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
@@ -36,7 +36,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -58,7 +58,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
index 718e272c1d46fb7..fb80999a08ae766 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
@@ -28,7 +28,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -51,7 +51,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
index 3a1e8694b2773b8..71930b977351174 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
@@ -48,7 +48,7 @@ final.suspend:
pre.exit:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreach:
unreachable
@@ -83,7 +83,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare i8 @switch_result()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
index c8f681cbcf6cd04..c096ed779998110 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
@@ -30,7 +30,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -44,7 +44,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
index e892fa9fc21cc93..54244c05fece974 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
@@ -30,7 +30,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -44,7 +44,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
index 66f640c34f7744b..3138b188355275d 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
@@ -55,7 +55,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -72,7 +72,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
index 29823cee57a08d6..e03f5972175d409 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
@@ -38,7 +38,7 @@ lpad:
%lpval = landingpad { ptr, i32 }
cleanup
- %need.resume = call i1 @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
resume { ptr, i32 } %lpval
coro.free:
@@ -46,7 +46,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -63,7 +63,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
index 8dc347b7c4ae969..c63da1df1545f81 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
@@ -36,7 +36,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -57,7 +57,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
index 30ab7a2e861ace6..b6afaec6490219d 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
@@ -44,7 +44,7 @@ final.suspend:
pre.exit:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
unreach:
unreachable
@@ -79,7 +79,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare i8 @switch_result()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
index 93bb7ef49f29058..d594d6bebd94949 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
@@ -38,7 +38,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -54,7 +54,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
index b892b6b30409923..a722df2404e32e3 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
@@ -32,7 +32,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -49,7 +49,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @consume(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
index 846d2b5ab6b2a1e..412e6f43f49bcc9 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
@@ -35,7 +35,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -83,7 +83,7 @@ coro.free:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -101,7 +101,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
index 3280bfd60327946..6dcc9632c03cb48 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
@@ -35,7 +35,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -83,7 +83,7 @@ coro.free:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -101,7 +101,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
index 25da65e2c4400fc..44c34d7d443626f 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
@@ -32,7 +32,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -46,7 +46,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @print()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
index 6b41cad6be35c15..0271b593771c37f 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
@@ -32,7 +32,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -46,7 +46,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1) #2
+declare i1 @llvm.coro.end(ptr, i1, ...) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @print()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll b/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
index bdd3747ecad67e6..c034ec68332277a 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -52,7 +52,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
index 442e1d24e85de22..7f88fb400a09c53 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
@@ -37,7 +37,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -76,7 +76,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -91,6 +91,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
index 771468cd4ac0205..a505f241a17ef0b 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
@@ -48,7 +48,7 @@ after.await:
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -68,6 +68,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
index 6b845f97368eb2b..14570d862f9134b 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
@@ -36,7 +36,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
; CHECK-LABEL: @a.gep.resume(
@@ -59,6 +59,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
index ddb45108d67868d..39e1a69903d9f3c 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
@@ -35,7 +35,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret void
}
@@ -61,6 +61,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1) #3
+declare i1 @llvm.coro.end(ptr, i1, ...) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-swifterror.ll b/llvm/test/Transforms/Coroutines/coro-swifterror.ll
index 1fba4e416310216..4c8813a46f01057 100644
--- a/llvm/test/Transforms/Coroutines/coro-swifterror.ll
+++ b/llvm/test/Transforms/Coroutines/coro-swifterror.ll
@@ -34,7 +34,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -76,7 +76,7 @@ resume:
br label %loop
cleanup:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
unreachable
}
@@ -86,7 +86,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare { i1, ptr } @llvm.coro.suspend.retcon.i1p0p0i8(...)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @f_prototype(ptr, i1 zeroext, ptr swifterror)
diff --git a/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll b/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
index 14a5be073211c05..16e7212dc81b0e9 100644
--- a/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
@@ -9,7 +9,7 @@ declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr)
declare i64 @llvm.coro.size.i64()
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
declare token @llvm.coro.save(ptr)
@@ -42,7 +42,7 @@ wakeup: ; preds = %entry
br label %cleanup
suspend: ; preds = %cleanup, %entry
- %unused = call i1 @llvm.coro.end(ptr %coro.state, i1 false)
+ %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %coro.state, i1 false)
ret void
cleanup: ; preds = %wakeup, %entry
diff --git a/llvm/test/Transforms/Coroutines/ex0.ll b/llvm/test/Transforms/Coroutines/ex0.ll
index 4ef0910e5e72d20..972306b6770464d 100644
--- a/llvm/test/Transforms/Coroutines/ex0.ll
+++ b/llvm/test/Transforms/Coroutines/ex0.ll
@@ -24,7 +24,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -52,7 +52,7 @@ declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/ex1.ll b/llvm/test/Transforms/Coroutines/ex1.ll
index fd969c2c1f6a89b..0d89913859c5369 100644
--- a/llvm/test/Transforms/Coroutines/ex1.ll
+++ b/llvm/test/Transforms/Coroutines/ex1.ll
@@ -20,7 +20,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex2.ll b/llvm/test/Transforms/Coroutines/ex2.ll
index ade3bc7b988529a..3adf9724ae0b676 100644
--- a/llvm/test/Transforms/Coroutines/ex2.ll
+++ b/llvm/test/Transforms/Coroutines/ex2.ll
@@ -29,7 +29,7 @@ dyn.free:
call void @CustomFree(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex3.ll b/llvm/test/Transforms/Coroutines/ex3.ll
index 60dfc33bf13591a..994ad8593b20754 100644
--- a/llvm/test/Transforms/Coroutines/ex3.ll
+++ b/llvm/test/Transforms/Coroutines/ex3.ll
@@ -32,7 +32,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -67,7 +67,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex4.ll b/llvm/test/Transforms/Coroutines/ex4.ll
index d4dba1cf818dd51..139a21c2d466417 100644
--- a/llvm/test/Transforms/Coroutines/ex4.ll
+++ b/llvm/test/Transforms/Coroutines/ex4.ll
@@ -27,7 +27,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex5.ll b/llvm/test/Transforms/Coroutines/ex5.ll
index e6daec528ce40f0..2c01c2e5766908e 100644
--- a/llvm/test/Transforms/Coroutines/ex5.ll
+++ b/llvm/test/Transforms/Coroutines/ex5.ll
@@ -31,7 +31,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret ptr %hdl
}
@@ -46,7 +46,7 @@ declare ptr @llvm.coro.begin(token, ptr)
declare token @llvm.coro.save(ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
; CHECK-LABEL: @main
define i32 @main() {
diff --git a/llvm/test/Transforms/Coroutines/no-suspend.ll b/llvm/test/Transforms/Coroutines/no-suspend.ll
index dbbdd7feda18704..4d17123d9015610 100644
--- a/llvm/test/Transforms/Coroutines/no-suspend.ll
+++ b/llvm/test/Transforms/Coroutines/no-suspend.ll
@@ -32,7 +32,7 @@ dyn.free:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
}
@@ -81,7 +81,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
}
@@ -129,7 +129,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -190,7 +190,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
}
@@ -244,7 +244,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
}
@@ -291,7 +291,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -343,7 +343,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
}
@@ -388,7 +388,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -410,7 +410,7 @@ declare ptr @llvm.coro.begin(token, ptr)
declare token @llvm.coro.save(ptr %hdl)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare ptr @llvm.coro.subfn.addr(ptr, i8)
diff --git a/llvm/test/Transforms/Coroutines/phi-coro-end.ll b/llvm/test/Transforms/Coroutines/phi-coro-end.ll
index 52cecce869e4d80..a7941e7f13359dc 100644
--- a/llvm/test/Transforms/Coroutines/phi-coro-end.ll
+++ b/llvm/test/Transforms/Coroutines/phi-coro-end.ll
@@ -17,7 +17,7 @@ cleanup:
suspend:
%r = phi i32 [%n, %entry], [1, %cleanup]
- call i1 @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
call void @print(i32 %r)
ret ptr %hdl
}
@@ -41,7 +41,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/remarks.ll b/llvm/test/Transforms/Coroutines/remarks.ll
index be1a213f67a9228..bd1f79bf2c711f1 100644
--- a/llvm/test/Transforms/Coroutines/remarks.ll
+++ b/llvm/test/Transforms/Coroutines/remarks.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
ret ptr %hdl
}
@@ -60,7 +60,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/FunctionAttrs/noreturn.ll b/llvm/test/Transforms/FunctionAttrs/noreturn.ll
index ae26eba6fc40ebf..fa80f6c2eced4fc 100644
--- a/llvm/test/Transforms/FunctionAttrs/noreturn.ll
+++ b/llvm/test/Transforms/FunctionAttrs/noreturn.ll
@@ -81,9 +81,9 @@ define void @unreachable() {
; CHECK: @coro
define void @coro() presplitcoroutine {
call token @llvm.coro.id.retcon.once(i32 0, i32 0, ptr null, ptr @coro, ptr null, ptr null)
- call i1 @llvm.coro.end(ptr null, i1 false)
+ call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
unreachable
}
declare token @llvm.coro.id.retcon.once(i32 %size, i32 %align, ptr %buffer, ptr %prototype, ptr %alloc, ptr %free)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
diff --git a/llvm/test/Transforms/LICM/sink-with-coroutine.ll b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
index 0b3f2e1c630a14a..67b4be9018b8fb7 100644
--- a/llvm/test/Transforms/LICM/sink-with-coroutine.ll
+++ b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
@@ -22,7 +22,7 @@ define i64 @licm(i64 %n) #0 {
; CHECK-NEXT: [[T6:%.*]] = icmp ult i64 [[T5]], [[N]]
; CHECK-NEXT: br i1 [[T6]], label [[LOOP]], label [[BB2]]
; CHECK: bb2:
-; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(ptr null, i1 false)
+; CHECK-NEXT: [[RES:%.*]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
; CHECK-NEXT: ret i64 0
;
entry:
@@ -46,7 +46,7 @@ await.ready:
br i1 %t6, label %loop, label %bb2
bb2:
- %res = call i1 @llvm.coro.end(ptr null, i1 false)
+ %res = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret i64 0
}
@@ -82,7 +82,7 @@ define i64 @hoist_threadlocal() presplitcoroutine {
; CHECK: loop.end:
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT]], label [[FOR_BODY]]
; CHECK: exit:
-; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(ptr null, i1 false)
+; CHECK-NEXT: [[RES:%.*]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
; CHECK-NEXT: ret i64 0
;
entry:
@@ -119,12 +119,12 @@ loop.end:
br i1 %cmp, label %exit, label %for.body
exit:
- %res = call i1 @llvm.coro.end(ptr null, i1 false)
+ %res = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
ret i64 0
}
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, ...)
declare nonnull ptr @readonly_funcs() readonly
declare nonnull ptr @llvm.threadlocal.address(ptr nonnull) nounwind readnone willreturn
declare void @not.reachable()
diff --git a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
index 2c37e53e4e556f2..0c42fabd0785ad4 100644
--- a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
@@ -690,7 +690,7 @@ llvm.func @coro_suspend(%arg0: i32, %arg1 : i1, %arg2 : !llvm.ptr) {
// CHECK-LABEL: @coro_end
llvm.func @coro_end(%arg0: !llvm.ptr, %arg1 : i1) {
- // CHECK: call i1 @llvm.coro.end
+ // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end
%0 = llvm.intr.coro.end %arg0, %arg1 : (!llvm.ptr, i1) -> i1
llvm.return
}
@@ -1043,7 +1043,7 @@ llvm.func @ssa_copy(%arg: f32) -> f32 {
// CHECK-DAG: declare i32 @llvm.coro.size.i32()
// CHECK-DAG: declare token @llvm.coro.save(ptr)
// CHECK-DAG: declare i8 @llvm.coro.suspend(token, i1)
-// CHECK-DAG: declare i1 @llvm.coro.end(ptr, i1)
+// CHECK-DAG: declare i1 @llvm.coro.end(ptr, i1, ...)
// CHECK-DAG: declare ptr @llvm.coro.free(token, ptr nocapture readonly)
// CHECK-DAG: declare void @llvm.coro.resume(ptr)
// CHECK-DAG: declare <8 x i32> @llvm.vp.add.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
>From 1bf9db2c24a9bcfd3e2ee268eef51e7cc166e814 Mon Sep 17 00:00:00 2001
From: Anton Korobeynikov <anton at korobeynikov.info>
Date: Thu, 14 Sep 2023 01:34:28 -0700
Subject: [PATCH 2/3] Add missed reference to `void` continuation result
---
llvm/docs/Coroutines.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/docs/Coroutines.rst b/llvm/docs/Coroutines.rst
index 109d8a7f9971928..a091c05117f966d 100644
--- a/llvm/docs/Coroutines.rst
+++ b/llvm/docs/Coroutines.rst
@@ -151,8 +151,8 @@ lowerings:
- In yield-once returned-continuation lowering, the coroutine must
suspend itself exactly once (or throw an exception). The ramp
function returns a continuation function pointer and yielded
- values, but the continuation function simply returns `void`
- when the coroutine has run to completion.
+ values, the continuation function may optionally return ordinary
+ results when the coroutine has run to completion.
The coroutine frame is maintained in a fixed-size buffer that is
passed to the `coro.id` intrinsic, which guarantees a certain size
>From 5c3019584fc9de8b5ee60cd7f1be49ca1291de0e Mon Sep 17 00:00:00 2001
From: Anton Korobeynikov <anton at korobeynikov.info>
Date: Fri, 15 Sep 2023 00:06:34 -0700
Subject: [PATCH 3/3] Introduce `llvm.coro.end.results` intrinsics and use it
to (optionally) return values from `retcon.once` coroutines.
---
clang/lib/CodeGen/CGCoroutine.cpp | 17 ++++-
clang/test/CodeGenCoroutines/coro-builtins.c | 2 +-
.../CodeGenCoroutines/coro-eh-cleanup.cpp | 4 +-
clang/test/CodeGenCoroutines/coro-lambda.cpp | 2 +-
llvm/docs/Coroutines.rst | 74 ++++++++++++++-----
llvm/include/llvm/IR/Intrinsics.td | 3 +-
llvm/lib/IR/AutoUpgrade.cpp | 5 +-
llvm/lib/Transforms/Coroutines/CoroFrame.cpp | 3 +-
llvm/lib/Transforms/Coroutines/CoroInstr.h | 57 +++++++++-----
llvm/lib/Transforms/Coroutines/CoroSplit.cpp | 20 +++--
.../test/Assembler/auto_upgrade_intrinsics.ll | 2 +-
llvm/test/Transforms/Coroutines/ArgAddr.ll | 4 +-
.../Transforms/Coroutines/coro-align16.ll | 4 +-
.../Transforms/Coroutines/coro-align32.ll | 4 +-
.../Transforms/Coroutines/coro-align64-02.ll | 4 +-
.../Transforms/Coroutines/coro-align64.ll | 4 +-
.../Transforms/Coroutines/coro-align8-02.ll | 4 +-
.../test/Transforms/Coroutines/coro-align8.ll | 4 +-
.../Coroutines/coro-alloc-with-param-O0.ll | 4 +-
.../Coroutines/coro-alloc-with-param-O2.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-01.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-02.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-03.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-04.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-05.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-06.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-07.ll | 4 +-
.../Transforms/Coroutines/coro-alloca-08.ll | 6 +-
.../Transforms/Coroutines/coro-alloca-09.ll | 4 +-
.../coro-alloca-loop-carried-address.ll | 4 +-
...o-async-addr-lifetime-infinite-loop-bug.ll | 2 +-
.../coro-async-addr-lifetime-start-bug.ll | 2 +-
.../Coroutines/coro-async-dyn-align.ll | 2 +-
llvm/test/Transforms/Coroutines/coro-async.ll | 4 +-
.../Transforms/Coroutines/coro-byval-param.ll | 4 +-
.../Coroutines/coro-catchswitch-cleanuppad.ll | 4 +-
.../Transforms/Coroutines/coro-catchswitch.ll | 4 +-
.../Transforms/Coroutines/coro-debug-O2.ll | 4 +-
.../Coroutines/coro-debug-coro-frame.ll | 6 +-
...coro-debug-dbg.values-not_used_in_frame.ll | 4 +-
.../Coroutines/coro-debug-dbg.values.ll | 4 +-
.../Coroutines/coro-debug-frame-variable.ll | 4 +-
.../coro-debug-spill-dbg.declare.ll | 4 +-
llvm/test/Transforms/Coroutines/coro-debug.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-00.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-01.ll | 4 +-
.../Coroutines/coro-eh-aware-edge-split-02.ll | 4 +-
.../Coroutines/coro-frame-arrayalloca.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-00.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-01.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-02.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-03.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-04.ll | 4 +-
.../Coroutines/coro-frame-reuse-alloca-05.ll | 4 +-
.../Coroutines/coro-frame-unreachable.ll | 4 +-
llvm/test/Transforms/Coroutines/coro-frame.ll | 4 +-
.../Transforms/Coroutines/coro-materialize.ll | 12 +--
.../Coroutines/coro-noalias-param.ll | 4 +-
.../Transforms/Coroutines/coro-padding.ll | 4 +-
.../Transforms/Coroutines/coro-param-copy.ll | 4 +-
.../Coroutines/coro-preserve-final.ll | 4 +-
.../Transforms/Coroutines/coro-readnone-02.ll | 4 +-
.../Transforms/Coroutines/coro-readnone.ll | 4 +-
.../coro-retcon-alloca-opaque-ptr.ll | 6 +-
.../Coroutines/coro-retcon-alloca.ll | 12 +--
.../Coroutines/coro-retcon-frame.ll | 4 +-
.../Coroutines/coro-retcon-once-private.ll | 4 +-
.../Coroutines/coro-retcon-once-value.ll | 8 +-
.../Coroutines/coro-retcon-once-value2.ll | 15 ++--
.../Coroutines/coro-retcon-opaque-ptr.ll | 6 +-
.../Coroutines/coro-retcon-remat.ll | 4 +-
.../Coroutines/coro-retcon-resume-values.ll | 4 +-
.../Coroutines/coro-retcon-resume-values2.ll | 4 +-
.../Coroutines/coro-retcon-unreachable.ll | 4 +-
.../Coroutines/coro-retcon-value.ll | 4 +-
.../test/Transforms/Coroutines/coro-retcon.ll | 8 +-
.../Coroutines/coro-spill-after-phi.ll | 4 +-
.../Coroutines/coro-spill-corobegin.ll | 4 +-
.../coro-spill-defs-before-corobegin.ll | 4 +-
.../Coroutines/coro-spill-promise-02.ll | 4 +-
.../Coroutines/coro-spill-promise.ll | 4 +-
.../Transforms/Coroutines/coro-split-00.ll | 4 +-
.../Transforms/Coroutines/coro-split-01.ll | 4 +-
.../Transforms/Coroutines/coro-split-02.ll | 4 +-
.../Transforms/Coroutines/coro-split-alloc.ll | 4 +-
.../Transforms/Coroutines/coro-split-dbg.ll | 4 +-
.../Transforms/Coroutines/coro-split-eh-00.ll | 6 +-
.../Transforms/Coroutines/coro-split-eh-01.ll | 6 +-
.../Coroutines/coro-split-final-suspend.ll | 8 +-
.../Coroutines/coro-split-hidden.ll | 4 +-
.../Coroutines/coro-split-musttail-ppc64le.ll | 4 +-
.../Coroutines/coro-split-musttail.ll | 4 +-
.../Coroutines/coro-split-musttail1.ll | 4 +-
.../Coroutines/coro-split-musttail10.ll | 4 +-
.../Coroutines/coro-split-musttail11.ll | 4 +-
.../Coroutines/coro-split-musttail12.ll | 4 +-
.../Coroutines/coro-split-musttail13.ll | 6 +-
.../Coroutines/coro-split-musttail2.ll | 4 +-
.../Coroutines/coro-split-musttail3.ll | 4 +-
.../Coroutines/coro-split-musttail4.ll | 4 +-
.../Coroutines/coro-split-musttail5.ll | 4 +-
.../Coroutines/coro-split-musttail6.ll | 6 +-
.../Coroutines/coro-split-musttail7.ll | 6 +-
.../Coroutines/coro-split-musttail8.ll | 4 +-
.../Coroutines/coro-split-musttail9.ll | 4 +-
.../Coroutines/coro-split-no-lieftime.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-01.ll | 6 +-
.../Coroutines/coro-split-sink-lifetime-02.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-03.ll | 4 +-
.../Coroutines/coro-split-sink-lifetime-04.ll | 4 +-
.../Transforms/Coroutines/coro-swifterror.ll | 6 +-
.../Transforms/Coroutines/coro-zero-alloca.ll | 4 +-
llvm/test/Transforms/Coroutines/ex0.ll | 4 +-
llvm/test/Transforms/Coroutines/ex1.ll | 4 +-
llvm/test/Transforms/Coroutines/ex2.ll | 4 +-
llvm/test/Transforms/Coroutines/ex3.ll | 4 +-
llvm/test/Transforms/Coroutines/ex4.ll | 4 +-
llvm/test/Transforms/Coroutines/ex5.ll | 4 +-
llvm/test/Transforms/Coroutines/no-suspend.ll | 18 ++---
.../Transforms/Coroutines/phi-coro-end.ll | 4 +-
llvm/test/Transforms/Coroutines/remarks.ll | 4 +-
.../Transforms/LICM/sink-with-coroutine.ll | 10 +--
.../mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td | 5 +-
mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td | 25 +++++++
.../Conversion/AsyncToLLVM/AsyncToLLVM.cpp | 3 +-
mlir/lib/Target/LLVMIR/ModuleImport.cpp | 5 ++
mlir/test/Target/LLVMIR/Import/intrinsic.ll | 4 +-
.../test/Target/LLVMIR/llvmir-intrinsics.mlir | 7 +-
128 files changed, 436 insertions(+), 321 deletions(-)
diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp
index 47c077be4138a6a..0e63ef91415ee13 100644
--- a/clang/lib/CodeGen/CGCoroutine.cpp
+++ b/clang/lib/CodeGen/CGCoroutine.cpp
@@ -403,8 +403,11 @@ struct CallCoroEnd final : public EHScopeStack::Cleanup {
llvm::Function *CoroEndFn = CGM.getIntrinsic(llvm::Intrinsic::coro_end);
// See if we have a funclet bundle to associate coro.end with. (WinEH)
auto Bundles = getBundlesForCoroEnd(CGF);
- auto *CoroEnd = CGF.Builder.CreateCall(
- CoroEndFn, {NullPtr, CGF.Builder.getTrue()}, Bundles);
+ auto *CoroEnd =
+ CGF.Builder.CreateCall(CoroEndFn,
+ {NullPtr, CGF.Builder.getTrue(),
+ llvm::ConstantTokenNone::get(CoroEndFn->getContext())},
+ Bundles);
if (Bundles.empty()) {
// Otherwise, (landingpad model), create a conditional branch that leads
// either to a cleanup block or a block with EH resume instruction.
@@ -755,7 +758,9 @@ void CodeGenFunction::EmitCoroutineBody(const CoroutineBodyStmt &S) {
// Emit coro.end before getReturnStmt (and parameter destructors), since
// resume and destroy parts of the coroutine should not include them.
llvm::Function *CoroEnd = CGM.getIntrinsic(llvm::Intrinsic::coro_end);
- Builder.CreateCall(CoroEnd, {NullPtr, Builder.getFalse()});
+ Builder.CreateCall(CoroEnd,
+ {NullPtr, Builder.getFalse(),
+ llvm::ConstantTokenNone::get(CoroEnd->getContext())});
if (Stmt *Ret = S.getReturnStmt()) {
// Since we already emitted the return value above, so we shouldn't
@@ -824,7 +829,11 @@ RValue CodeGenFunction::EmitCoroutineIntrinsic(const CallExpr *E,
}
for (const Expr *Arg : E->arguments())
Args.push_back(EmitScalarExpr(Arg));
-
+ // @llvm.coro.end takes a token parameter. Add token 'none' as the last
+ // argument.
+ if (IID == llvm::Intrinsic::coro_end)
+ Args.push_back(llvm::ConstantTokenNone::get(getLLVMContext()));
+
llvm::Function *F = CGM.getIntrinsic(IID);
llvm::CallInst *Call = Builder.CreateCall(F, Args);
diff --git a/clang/test/CodeGenCoroutines/coro-builtins.c b/clang/test/CodeGenCoroutines/coro-builtins.c
index a329200aa548dc0..79f119b2b60ff23 100644
--- a/clang/test/CodeGenCoroutines/coro-builtins.c
+++ b/clang/test/CodeGenCoroutines/coro-builtins.c
@@ -37,7 +37,7 @@ void f(int n) {
// CHECK-NEXT: call ptr @llvm.coro.free(token %[[COROID]], ptr %[[FRAME]])
__builtin_coro_free(__builtin_coro_frame());
- // CHECK-NEXT: call i1 (ptr, i1, ...) @llvm.coro.end(ptr %[[FRAME]], i1 false)
+ // CHECK-NEXT: call i1 @llvm.coro.end(ptr %[[FRAME]], i1 false, token none)
__builtin_coro_end(__builtin_coro_frame(), 0);
// CHECK-NEXT: call i8 @llvm.coro.suspend(token none, i1 true)
diff --git a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
index e055c4d7561b2c3..725cf8faa6b4c24 100644
--- a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
+++ b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp
@@ -60,7 +60,7 @@ coro_t f() {
// CHECK: [[COROENDBB]]:
// CHECK-NEXT: %[[CLPAD:.+]] = cleanuppad within none
-// CHECK-NEXT: call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %[[CLPAD]]) ]
+// CHECK-NEXT: call i1 @llvm.coro.end(ptr null, i1 true, token none) [ "funclet"(token %[[CLPAD]]) ]
// CHECK-NEXT: cleanupret from %[[CLPAD]] unwind label
// CHECK-LPAD: @_Z1fv(
@@ -76,7 +76,7 @@ coro_t f() {
// CHECK-LPAD: to label %{{.+}} unwind label %[[UNWINDBB:.+]]
// CHECK-LPAD: [[UNWINDBB]]:
-// CHECK-LPAD: %[[I1RESUME:.+]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
+// CHECK-LPAD: %[[I1RESUME:.+]] = call i1 @llvm.coro.end(ptr null, i1 true, token none)
// CHECK-LPAD: br i1 %[[I1RESUME]], label %[[EHRESUME:.+]], label
// CHECK-LPAD: [[EHRESUME]]:
// CHECK-LPAD-NEXT: %[[exn:.+]] = load ptr, ptr %exn.slot, align 8
diff --git a/clang/test/CodeGenCoroutines/coro-lambda.cpp b/clang/test/CodeGenCoroutines/coro-lambda.cpp
index 06c18ddb8f640c8..26c51070f9e2d05 100644
--- a/clang/test/CodeGenCoroutines/coro-lambda.cpp
+++ b/clang/test/CodeGenCoroutines/coro-lambda.cpp
@@ -55,4 +55,4 @@ void f() {
// CHECK: alloca %"struct.Task::promise_type"
// CHECK: call token @llvm.coro.id(
// CHECK: call i8 @llvm.coro.suspend(
-// CHECK: call i1 (ptr, i1, ...) @llvm.coro.end(
+// CHECK: call i1 @llvm.coro.end(
diff --git a/llvm/docs/Coroutines.rst b/llvm/docs/Coroutines.rst
index a091c05117f966d..5ab732f702c426f 100644
--- a/llvm/docs/Coroutines.rst
+++ b/llvm/docs/Coroutines.rst
@@ -303,7 +303,7 @@ The LLVM IR for this coroutine looks like this:
call void @free(ptr %mem)
br label %suspend
suspend:
- %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ %unused = call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -630,7 +630,7 @@ store the current value produced by a coroutine.
call void @free(ptr %mem)
br label %suspend
suspend:
- %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ %unused = call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -1326,7 +1326,7 @@ A frontend should emit function attribute `presplitcoroutine` for the coroutine.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
- declare i1 @llvm.coro.end(ptr <handle>, i1 <unwind>, ...)
+ declare i1 @llvm.coro.end(ptr <handle>, i1 <unwind>, token <result.token>)
Overview:
"""""""""
@@ -1347,20 +1347,11 @@ The second argument should be `true` if this coro.end is in the block that is
part of the unwind sequence leaving the coroutine body due to an exception and
`false` otherwise.
-Other arguments can only be specified for unique-suspend returned-continuation
-coroutines where they will be normal returns of a coroutine continuation
-function. The number of arguments must match the return type of the continuation
-function:
+Non-trivial (non-none) token argument can only be specified for unique-suspend
+returned-continuation coroutines where it must be a token value produced by
+'``llvm.coro.end.results``' intrinsic.
-- if the return type of the continuation function is ``void`` there must be no
- extra argumets
-
-- if the return type of the continuation function is a ``struct``, the arguments
- will be element types of that ``struct`` in order;
-
-- otherwise, it is just the return value of the continuation function.
-
-No extra arguments are allowed for coro.end calls in unwind sections
+Only none token is allowed for coro.end calls in unwind sections
Semantics:
""""""""""
@@ -1393,7 +1384,7 @@ For landingpad based exception model, it is expected that frontend uses the
.. code-block:: llvm
ehcleanup:
- %InResumePart = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
+ %InResumePart = call i1 @llvm.coro.end(ptr null, i1 true, token none)
br i1 %InResumePart, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -1418,7 +1409,7 @@ referring to an enclosing cleanuppad as follows:
ehcleanup:
%tok = cleanuppad within none []
- %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
+ %unused = call i1 @llvm.coro.end(ptr null, i1 true, token none) [ "funclet"(token %tok) ]
cleanupret from %tok unwind label %RestOfTheCleanup
The `CoroSplit` pass, if the funclet bundle is present, will insert
@@ -1443,6 +1434,53 @@ The following table summarizes the handling of `coro.end`_ intrinsic.
| | Landingpad | mark coroutine as done | mark coroutine done |
+------------+-------------+------------------------+---------------------------------+
+.. _coro.end.results:
+
+'llvm.coro.end.results' Intrinsic
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+ declare token @llvm.coro.end.results(...)
+
+Overview:
+"""""""""
+
+The '``llvm.coro.end.results``' intrinsic captures values to be returned from
+unique-suspend returned-continuation coroutines.
+
+Arguments:
+""""""""""
+
+The number of arguments must match the return type of the continuation function:
+
+- if the return type of the continuation function is ``void`` there must be no
+ arguments
+
+- if the return type of the continuation function is a ``struct``, the arguments
+ will be of element types of that ``struct`` in order;
+
+- otherwise, it is just the return value of the continuation function.
+
+.. code-block:: llvm
+
+ define {ptr, ptr} @g(ptr %buffer, ptr %ptr, i8 %val) presplitcoroutine {
+ entry:
+ %id = call token @llvm.coro.id.retcon.once(i32 8, i32 8, ptr %buffer,
+ ptr @prototype,
+ ptr @allocate, ptr @deallocate)
+ %hdl = call ptr @llvm.coro.begin(token %id, ptr null)
+
+ ...
+
+ cleanup:
+ %tok = call token (...) @llvm.coro.end.results(i8 %val)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token %tok)
+ unreachable
+
+ ...
+
+ declare i8 @prototype(ptr, i1 zeroext)
+
'llvm.coro.end.async' Intrinsic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index da186dec2cbca10..e94b59508de7b5e 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -1643,7 +1643,8 @@ def int_coro_free : Intrinsic<[llvm_ptr_ty], [llvm_token_ty, llvm_ptr_ty],
[IntrReadMem, IntrArgMemOnly,
ReadOnly<ArgIndex<1>>,
NoCapture<ArgIndex<1>>]>;
-def int_coro_end : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty, llvm_vararg_ty], []>;
+def int_coro_end : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty, llvm_token_ty], []>;
+def int_coro_end_results : Intrinsic<[llvm_token_ty], [llvm_vararg_ty]>;
def int_coro_end_async
: Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty, llvm_vararg_ty], []>;
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index cca7649c7a61e43..f57c8693e4996bc 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -951,7 +951,7 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
F->arg_begin()->getType());
return true;
}
- if (Name.equals("coro.end") && !F->isVarArg()) {
+ if (Name.equals("coro.end") && F->arg_size() == 2) {
rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::coro_end);
return true;
@@ -4214,7 +4214,8 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
}
case Intrinsic::coro_end: {
- SmallVector<Value *, 2> Args(CI->args());
+ SmallVector<Value *, 3> Args(CI->args());
+ Args.push_back(ConstantTokenNone::get(CI->getContext()));
NewCall = Builder.CreateCall(NewFn, Args);
break;
}
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index 2ab0d7d5854d7bb..a12dd710174f3f8 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -3046,8 +3046,7 @@ void coro::buildCoroutineFrame(
// Collect the spills for arguments and other not-materializable values.
for (Argument &A : F.args())
for (User *U : A.users())
- if (Checker.isDefinitionAcrossSuspend(A, U) ||
- isa<CoroEndInst>(U))
+ if (Checker.isDefinitionAcrossSuspend(A, U))
FrameData.Spills[&A].push_back(cast<Instruction>(U));
const DominatorTree DT(F);
diff --git a/llvm/lib/Transforms/Coroutines/CoroInstr.h b/llvm/lib/Transforms/Coroutines/CoroInstr.h
index 98fa03c68fc2e02..2e7d9b2ce028a3e 100644
--- a/llvm/lib/Transforms/Coroutines/CoroInstr.h
+++ b/llvm/lib/Transforms/Coroutines/CoroInstr.h
@@ -611,8 +611,37 @@ class LLVM_LIBRARY_VISIBILITY CoroAlignInst : public IntrinsicInst {
}
};
+/// This represents the llvm.end.results instruction.
+class LLVM_LIBRARY_VISIBILITY CoroEndResults : public IntrinsicInst {
+public:
+ op_iterator retval_begin() { return arg_begin(); }
+ const_op_iterator retval_begin() const { return arg_begin(); }
+
+ op_iterator retval_end() { return arg_end(); }
+ const_op_iterator retval_end() const { return arg_end(); }
+
+ iterator_range<op_iterator> return_values() {
+ return make_range(retval_begin(), retval_end());
+ }
+ iterator_range<const_op_iterator> return_values() const {
+ return make_range(retval_begin(), retval_end());
+ }
+
+ unsigned numReturns() const {
+ return std::distance(retval_begin(), retval_end());
+ }
+
+ // Methods to support type inquiry through isa, cast, and dyn_cast:
+ static bool classof(const IntrinsicInst *I) {
+ return I->getIntrinsicID() == Intrinsic::coro_end_results;
+ }
+ static bool classof(const Value *V) {
+ return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+ }
+};
+
class LLVM_LIBRARY_VISIBILITY AnyCoroEndInst : public IntrinsicInst {
- enum { FrameArg, UnwindArg };
+ enum { FrameArg, UnwindArg, TokenArg };
public:
bool isFallthrough() const { return !isUnwind(); }
@@ -620,6 +649,15 @@ class LLVM_LIBRARY_VISIBILITY AnyCoroEndInst : public IntrinsicInst {
return cast<Constant>(getArgOperand(UnwindArg))->isOneValue();
}
+ bool hasResults() const {
+ return !isa<ConstantTokenNone>(getArgOperand(TokenArg));
+ }
+
+ CoroEndResults *getResults() const {
+ assert(hasResults());
+ return cast<CoroEndResults>(getArgOperand(TokenArg));
+ }
+
// Methods to support type inquiry through isa, cast, and dyn_cast:
static bool classof(const IntrinsicInst *I) {
auto ID = I->getIntrinsicID();
@@ -633,23 +671,6 @@ class LLVM_LIBRARY_VISIBILITY AnyCoroEndInst : public IntrinsicInst {
/// This represents the llvm.coro.end instruction.
class LLVM_LIBRARY_VISIBILITY CoroEndInst : public AnyCoroEndInst {
public:
- op_iterator retval_begin() { return std::next(arg_begin(), 2); }
- const_op_iterator retval_begin() const { return std::next(arg_begin(), 2); }
-
- op_iterator retval_end() { return arg_end(); }
- const_op_iterator retval_end() const { return arg_end(); }
-
- iterator_range<op_iterator> return_values() {
- return make_range(retval_begin(), retval_end());
- }
- iterator_range<const_op_iterator> return_values() const {
- return make_range(retval_begin(), retval_end());
- }
-
- unsigned numReturns() const {
- return std::distance(retval_begin(), retval_end());
- }
-
// Methods to support type inquiry through isa, cast, and dyn_cast:
static bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::coro_end;
diff --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 5b3f37a10a9d830..614067fb197454f 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -234,7 +234,7 @@ static void replaceFallthroughCoroEnd(AnyCoroEndInst *End,
switch (Shape.ABI) {
// The cloned functions in switch-lowering always return void.
case coro::ABI::Switch:
- assert(cast<CoroEndInst>(End)->numReturns() == 0 &&
+ assert(!cast<CoroEndInst>(End)->hasResults() &&
"switch coroutine should not return any values");
// coro.end doesn't immediately end the coroutine in the main function
// in this lowering, because we need to deallocate the coroutine.
@@ -257,14 +257,22 @@ static void replaceFallthroughCoroEnd(AnyCoroEndInst *End,
maybeFreeRetconStorage(Builder, Shape, FramePtr, CG);
auto *CoroEnd = cast<CoroEndInst>(End);
auto *RetTy = Shape.getResumeFunctionType()->getReturnType();
- unsigned NumReturns = CoroEnd->numReturns();
+
+ if (!CoroEnd->hasResults()) {
+ assert(RetTy->isVoidTy());
+ Builder.CreateRetVoid();
+ break;
+ }
+
+ auto *CoroResults = CoroEnd->getResults();
+ unsigned NumReturns = CoroResults->numReturns();
if (auto *RetStructTy = dyn_cast<StructType>(RetTy)) {
assert(RetStructTy->getNumElements() == NumReturns &&
"numbers of returns should match resume function singature");
Value *ReturnValue = UndefValue::get(RetStructTy);
unsigned Idx = 0;
- for (Value *RetValEl : CoroEnd->return_values())
+ for (Value *RetValEl : CoroResults->return_values())
ReturnValue = Builder.CreateInsertValue(ReturnValue, RetValEl, Idx++);
Builder.CreateRet(ReturnValue);
} else if (NumReturns == 0) {
@@ -272,15 +280,17 @@ static void replaceFallthroughCoroEnd(AnyCoroEndInst *End,
Builder.CreateRetVoid();
} else {
assert(NumReturns == 1);
- Builder.CreateRet(*CoroEnd->retval_begin());
+ Builder.CreateRet(*CoroResults->retval_begin());
}
+ CoroResults->replaceAllUsesWith(ConstantTokenNone::get(CoroResults->getContext()));
+ CoroResults->eraseFromParent();
break;
}
// In non-unique continuation lowering, we signal completion by returning
// a null continuation.
case coro::ABI::Retcon: {
- assert(cast<CoroEndInst>(End)->numReturns() == 0 &&
+ assert(!cast<CoroEndInst>(End)->hasResults() &&
"retcon coroutine should not return any values");
maybeFreeRetconStorage(Builder, Shape, FramePtr, CG);
auto RetTy = Shape.getResumeFunctionType()->getReturnType();
diff --git a/llvm/test/Assembler/auto_upgrade_intrinsics.ll b/llvm/test/Assembler/auto_upgrade_intrinsics.ll
index 2b64b42d1ce224c..e3603846e9e9b4e 100644
--- a/llvm/test/Assembler/auto_upgrade_intrinsics.ll
+++ b/llvm/test/Assembler/auto_upgrade_intrinsics.ll
@@ -50,7 +50,7 @@ entry:
declare i1 @llvm.coro.end(ptr, i1)
define void @test.coro.end(ptr %ptr) {
; CHECK-LABEL: @test.coro.end(
-; CHECK: call i1 (ptr, i1, ...) @llvm.coro.end(ptr %ptr, i1 false)
+; CHECK: call i1 @llvm.coro.end(ptr %ptr, i1 false, token none)
call i1 @llvm.coro.end(ptr %ptr, i1 false)
ret void
}
diff --git a/llvm/test/Transforms/Coroutines/ArgAddr.ll b/llvm/test/Transforms/Coroutines/ArgAddr.ll
index 29925d39dd0cef0..1fbc8e1d49767de 100644
--- a/llvm/test/Transforms/Coroutines/ArgAddr.ll
+++ b/llvm/test/Transforms/Coroutines/ArgAddr.ll
@@ -45,7 +45,7 @@ coro_Cleanup:
br label %coro_Suspend
coro_Suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret ptr %1
}
@@ -69,7 +69,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-align16.ll b/llvm/test/Transforms/Coroutines/coro-align16.ll
index a8325166d5a2545..39902be9149e88d 100644
--- a/llvm/test/Transforms/Coroutines/coro-align16.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align16.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align32.ll b/llvm/test/Transforms/Coroutines/coro-align32.ll
index 0801207daedf26c..3d910e951259b99 100644
--- a/llvm/test/Transforms/Coroutines/coro-align32.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align32.ll
@@ -28,7 +28,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align64-02.ll b/llvm/test/Transforms/Coroutines/coro-align64-02.ll
index 106aabb349f1e31..3e2e33d2da260a0 100644
--- a/llvm/test/Transforms/Coroutines/coro-align64-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align64-02.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align64.ll b/llvm/test/Transforms/Coroutines/coro-align64.ll
index d5f7583fe09a010..9623a99a8b27edb 100644
--- a/llvm/test/Transforms/Coroutines/coro-align64.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align64.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-align8-02.ll b/llvm/test/Transforms/Coroutines/coro-align8-02.ll
index 59ddec051ce1798..758d4ce3e21b225 100644
--- a/llvm/test/Transforms/Coroutines/coro-align8-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align8-02.ll
@@ -20,7 +20,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -40,7 +40,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @aligned_alloc(i32, i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-align8.ll b/llvm/test/Transforms/Coroutines/coro-align8.ll
index ac37677c3f503c6..48a2687cc47992c 100644
--- a/llvm/test/Transforms/Coroutines/coro-align8.ll
+++ b/llvm/test/Transforms/Coroutines/coro-align8.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
index 8e094b1fc9e2550..bdd49413cf15b3b 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O0.ll
@@ -24,7 +24,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -54,7 +54,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @myAlloc(i64, i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
index f2b1e4fa93b724b..a0ab5b733fdf0a0 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloc-with-param-O2.ll
@@ -21,7 +21,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @myAlloc(i64, i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-01.ll b/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
index e43a736d718ebb3..5208c055c4fdf2c 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-01.ll
@@ -33,7 +33,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -55,7 +55,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-02.ll b/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
index 2879e44d3fb26dc..83f56009f00e33b 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-02.ll
@@ -25,7 +25,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-03.ll b/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
index 8c34f44f28fe021..7740ed440a0d5a1 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-03.ll
@@ -23,7 +23,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @capture_call(ptr)
declare void @nocapture_call(ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-04.ll b/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
index 15e7c540eed5030..c19cd253a9179c3 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-04.ll
@@ -32,7 +32,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -53,7 +53,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @print(ptr)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-05.ll b/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
index 55acc9789dfa548..96769e51fb80f6f 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-05.ll
@@ -23,7 +23,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -44,7 +44,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @print(i32)
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-06.ll b/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
index 1325db2e795849e..89149ceba4c14a5 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-06.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-07.ll b/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
index 3647b7b896b1e06..c81bf333f2059d5 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-07.ll
@@ -36,7 +36,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-08.ll b/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
index 7496e55d7d9b9be..5a14a0eb988697c 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-08.ll
@@ -32,7 +32,7 @@ await.ready:
%StrayCoroSave = call token @llvm.coro.save(ptr null)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -59,7 +59,7 @@ await.ready:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -75,6 +75,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-09.ll b/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
index d6bc51f63406500..5c60c5be46206be 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-09.ll
@@ -37,7 +37,7 @@ await.ready:
%StrayCoroSave = call token @llvm.coro.save(ptr null)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -52,6 +52,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll b/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
index 8642cc28ea4368f..412327a49dcf2b5 100644
--- a/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
+++ b/llvm/test/Transforms/Coroutines/coro-alloca-loop-carried-address.ll
@@ -68,7 +68,7 @@ loop:
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -80,6 +80,6 @@ declare i64 @llvm.coro.size.i64()
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare token @llvm.coro.save(ptr)
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.lifetime.start(i64, ptr nocapture)
declare void @llvm.lifetime.end(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
index 77f706c108d12e7..83212a79d69b65f 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-infinite-loop-bug.ll
@@ -73,7 +73,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @context_alloc()
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
index c709eee351d763e..6a6d839fae36182 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-addr-lifetime-start-bug.ll
@@ -97,7 +97,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @context_alloc()
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll b/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
index e0f32c990e79125..040c9881c1ab305 100644
--- a/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async-dyn-align.ll
@@ -28,7 +28,7 @@ declare ptr @llvm.coro.async.resume()
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare swiftcc void @asyncReturn(ptr)
declare swiftcc void @asyncSuspend(ptr)
declare {ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
diff --git a/llvm/test/Transforms/Coroutines/coro-async.ll b/llvm/test/Transforms/Coroutines/coro-async.ll
index eaf01bfa3f03f82..f796ce3dbb0d827 100644
--- a/llvm/test/Transforms/Coroutines/coro-async.ll
+++ b/llvm/test/Transforms/Coroutines/coro-async.ll
@@ -211,7 +211,7 @@ entry:
%continuation_actor_arg = extractvalue {ptr, ptr, ptr} %res.2, 1
tail call swiftcc void @asyncReturn(ptr %async.ctxt, ptr %continuation_task_arg, ptr %continuation_actor_arg)
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -501,7 +501,7 @@ declare ptr @llvm.coro.prepare.async(ptr)
declare token @llvm.coro.id.async(i32, i32, i32, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.end.async(ptr, i1, ...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare {ptr, ptr, ptr} @llvm.coro.suspend.async(i32, ptr, ptr, ...)
declare ptr @llvm.coro.async.context.alloc(ptr, ptr)
declare void @llvm.coro.async.context.dealloc(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-byval-param.ll b/llvm/test/Transforms/Coroutines/coro-byval-param.ll
index 62a924b7818dac4..47059182d8ed695 100644
--- a/llvm/test/Transforms/Coroutines/coro-byval-param.ll
+++ b/llvm/test/Transforms/Coroutines/coro-byval-param.ll
@@ -52,7 +52,7 @@ coro.free: ; preds = %cleanup33
br label %coro.ret
coro.ret: ; preds = %coro.free, %cleanup33, %init.ready, %coro.init
- %10 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #10
+ %10 = call i1 @llvm.coro.end(ptr null, i1 false, token none) #10
ret ptr %call2
}
@@ -102,7 +102,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare void @_ZN4task12promise_type13final_suspendEv(ptr nonnull dereferenceable(1)) local_unnamed_addr #7 align 2
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
; Function Attrs: nobuiltin nounwind
declare void @_ZdlPv(ptr) local_unnamed_addr #8
diff --git a/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll b/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
index ca5a230fd2ad057..2f6d23da8269294 100644
--- a/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
+++ b/llvm/test/Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
catch.dispatch.1:
@@ -106,7 +106,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-catchswitch.ll b/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
index 20f8d0ee17d3b53..3cf6dc86f2c6d6c 100644
--- a/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
+++ b/llvm/test/Transforms/Coroutines/coro-catchswitch.ll
@@ -54,7 +54,7 @@ resume: ; preds = %await2.suspend
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret void
cleanuppad:
@@ -80,7 +80,7 @@ declare void @print(i32)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
; Function Attrs: nobuiltin nounwind
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-O2.ll b/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
index 3bcdfa47f94cd1c..a668bd1a521960c 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-O2.ll
@@ -110,7 +110,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -126,7 +126,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll b/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
index b2d16ef1d3b3e8d..7f5679e4d522fd2 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-coro-frame.ll
@@ -205,7 +205,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -334,7 +334,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -350,7 +350,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
index 7e5c39f61c82ac5..1b9a1bd63a2e3e5 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
@@ -123,7 +123,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -155,7 +155,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @new(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
index ae3eb109f8a6ddd..54cdde8ae4ac0cb 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-dbg.values.ll
@@ -154,7 +154,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -186,7 +186,7 @@ declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @new(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll b/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
index d83d1c4f65ee71b..37b4126ce37304c 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-frame-variable.ll
@@ -182,7 +182,7 @@ cleanup.cont: ; preds = %after.coro.free
br label %coro.ret
coro.ret: ; preds = %cleanup.cont, %after.coro.free, %final.suspend, %await.suspend, %init.suspend
- %end = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %end = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreachable: ; preds = %after.coro.free
@@ -197,7 +197,7 @@ declare token @llvm.coro.save(ptr)
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @new(i64)
declare void @delete(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll b/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
index c313606830c3ee8..e7a271a96ead125 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
@@ -74,7 +74,7 @@ cleanup: ; preds = %resume, %coro.begin
br label %suspend
suspend: ; preds = %cleanup, %coro.begin
- %2 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ %2 = call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -104,7 +104,7 @@ declare i1 @llvm.coro.alloc(token) #4
declare ptr @llvm.coro.begin(token, ptr writeonly) #4
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...) #4
+declare i1 @llvm.coro.end(ptr, i1, token) #4
declare noalias ptr @malloc(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-debug.ll b/llvm/test/Transforms/Coroutines/coro-debug.ll
index bc76992fad86382..064693c80ad233c 100644
--- a/llvm/test/Transforms/Coroutines/coro-debug.ll
+++ b/llvm/test/Transforms/Coroutines/coro-debug.ll
@@ -70,7 +70,7 @@ coro_Cleanup: ; preds = %sw.epilog, %sw.bb1
br label %coro_Suspend, !dbg !24
coro_Suspend: ; preds = %coro_Cleanup, %sw.default
- %7 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #7, !dbg !24
+ %7 = call i1 @llvm.coro.end(ptr null, i1 false, token none) #7, !dbg !24
%8 = load ptr, ptr %coro_hdl, align 8, !dbg !24
store i32 0, ptr %late_local, !dbg !24
ret ptr %8, !dbg !24
@@ -111,7 +111,7 @@ declare void @free(ptr) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...) #5
+declare i1 @llvm.coro.end(ptr, i1, token) #5
; Function Attrs: alwaysinline
define private void @coro.devirt.trigger(ptr) #6 {
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
index e21b94969f66563..2f5b989a620e0af 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-00.ll
@@ -65,7 +65,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreach:
@@ -92,6 +92,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
index d136cf2aa509056..d896c6a18b23381 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-01.ll
@@ -59,7 +59,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreach:
@@ -86,6 +86,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
index a67090c491492b2..79aa58b85eda80f 100644
--- a/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-eh-aware-edge-split-02.ll
@@ -59,7 +59,7 @@ cleanup: ; preds = %invoke.cont15, %if.el
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -83,6 +83,6 @@ declare void @use_val(i32)
declare void @__cxa_end_catch()
; Function Attrs: nounwind
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @free(ptr)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll b/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
index 260514360c80a1f..7d5ddabf7ea8e92 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-arrayalloca.ll
@@ -30,7 +30,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -65,7 +65,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
index 47083d477f690a9..c9700c8a099610f 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-00.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -66,7 +66,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
index 6988081277571dd..584caa356e9b8bb 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-01.ll
@@ -53,7 +53,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -68,6 +68,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
index c9c4b4290e5e6bc..f916ebb9159824b 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-02.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", %struct.big_structure, i1 }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
index 103724354235c8c..525df873a0f0cd8 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-03.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -66,7 +66,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
index ed2de2ca0b90261..27e0c47cb904215 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-04.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", %struct.big_structure, i1, [26 x i8], %struct.big_structure.2 }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
index 87784ebb80d7317..6d93eeaa3211e47 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-reuse-alloca-05.ll
@@ -55,7 +55,7 @@ cleanup:
call ptr @llvm.coro.free(token %0, ptr %1)
br label %coro.ret
coro.ret:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
; CHECK: %a.Frame = type { ptr, ptr, %"struct.task::promise_type", i1, [14 x i8], %struct.big_structure }
@@ -69,6 +69,6 @@ declare token @llvm.coro.save(ptr) #3
declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll b/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
index f3a3150890f0736..b81f7d0ed7eac7e 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame-unreachable.ll
@@ -24,7 +24,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
no.predecessors:
@@ -43,7 +43,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i1)
diff --git a/llvm/test/Transforms/Coroutines/coro-frame.ll b/llvm/test/Transforms/Coroutines/coro-frame.ll
index 1691ba757c9f604..c20be8ce2ff68c8 100644
--- a/llvm/test/Transforms/Coroutines/coro-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-frame.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
pad:
%tok = cleanuppad within none []
@@ -58,7 +58,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-materialize.ll b/llvm/test/Transforms/Coroutines/coro-materialize.ll
index 195176e769aa652..8de81c3b8cfd3eb 100644
--- a/llvm/test/Transforms/Coroutines/coro-materialize.ll
+++ b/llvm/test/Transforms/Coroutines/coro-materialize.ll
@@ -41,7 +41,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -73,7 +73,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -109,7 +109,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -145,7 +145,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -186,7 +186,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -200,7 +200,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-noalias-param.ll b/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
index 3763d232d23d299..943d2a67978facc 100644
--- a/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
+++ b/llvm/test/Transforms/Coroutines/coro-noalias-param.ll
@@ -19,7 +19,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret void
}
@@ -33,7 +33,7 @@ declare i32 @llvm.coro.size.i32()
declare i8 @llvm.coro.suspend(token, i1)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-padding.ll b/llvm/test/Transforms/Coroutines/coro-padding.ll
index 04913faae25fe3d..452b83bad388afe 100644
--- a/llvm/test/Transforms/Coroutines/coro-padding.ll
+++ b/llvm/test/Transforms/Coroutines/coro-padding.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -54,7 +54,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-param-copy.ll b/llvm/test/Transforms/Coroutines/coro-param-copy.ll
index f6a8593c75b7854..83fa06b1a8cf653 100644
--- a/llvm/test/Transforms/Coroutines/coro-param-copy.ll
+++ b/llvm/test/Transforms/Coroutines/coro-param-copy.ll
@@ -41,7 +41,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -83,7 +83,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.memset.p0.i32(ptr, i8, i32, i1)
diff --git a/llvm/test/Transforms/Coroutines/coro-preserve-final.ll b/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
index dd4d73916273fe9..16eeb84e7915ae2 100644
--- a/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
+++ b/llvm/test/Transforms/Coroutines/coro-preserve-final.ll
@@ -80,7 +80,7 @@ coro.free: ; preds = %cleanup62
br label %coro.ret
coro.ret: ; preds = %coro.free, %cleanup62, %final.suspend, %await2.suspend, %await.suspend, %init.suspend
- %20 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #13
+ %20 = call i1 @llvm.coro.end(ptr null, i1 false, token none) #13
ret ptr %__promise
}
@@ -96,7 +96,7 @@ declare i8 @llvm.coro.suspend(token, i1) #3
declare dso_local ptr @_Z5Innerv() local_unnamed_addr #8
declare dso_local void @_ZdlPv(ptr noundef) local_unnamed_addr #9
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare dso_local void @_Z5_exiti(i32 noundef) local_unnamed_addr #10
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #11
diff --git a/llvm/test/Transforms/Coroutines/coro-readnone-02.ll b/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
index 160aa22d5b2ae99..4ed962816154b85 100644
--- a/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-readnone-02.ll
@@ -39,7 +39,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -75,7 +75,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-readnone.ll b/llvm/test/Transforms/Coroutines/coro-readnone.ll
index 73b3bce4dd3cbf3..1fc91cefaf97599 100644
--- a/llvm/test/Transforms/Coroutines/coro-readnone.ll
+++ b/llvm/test/Transforms/Coroutines/coro-readnone.ll
@@ -33,7 +33,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -83,7 +83,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @free(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll b/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
index 60021056251d9ad..112ffd215b1be4c 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-alloca-opaque-ptr.ll
@@ -34,7 +34,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -69,7 +69,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -77,7 +77,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
declare void @llvm.coro.suspend.retcon.isVoid(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare token @llvm.coro.alloca.alloc.i32(i32, i32)
declare ptr @llvm.coro.alloca.get(token)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll b/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
index 998cb09fe555c64..fc009520fe4fa00 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-alloca.ll
@@ -33,7 +33,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -69,7 +69,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -102,7 +102,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -170,7 +170,7 @@ forward:
br label %back
end:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -217,7 +217,7 @@ non_alloca_block:
br label %suspend
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -225,7 +225,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
declare void @llvm.coro.suspend.retcon.isVoid(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare token @llvm.coro.alloca.alloc.i32(i32, i32)
declare ptr @llvm.coro.alloca.get(token)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll b/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
index 910faabe10d6744..a81cdf475ae31ad 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-frame.ll
@@ -32,7 +32,7 @@ resume:
br label %end
end:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
; Make sure we don't lose writes to the frame.
@@ -52,5 +52,5 @@ end:
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
index eb1a4691876c3c5..e7593cc8c6f81bb 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll
@@ -30,14 +30,14 @@ neg.cont:
br label %cleanup
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
index fb77bb3586b608c..b67abfb051f3502 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-value.ll
@@ -29,7 +29,7 @@ neg.cont:
br label %cleanup
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -71,7 +71,8 @@ neg.cont:
cleanup:
%new.val = add i32 %val, 123
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, ptr null, i32 %new.val, ptr @deallocate)
+ %tok = call token (...) @llvm.coro.end.results(ptr null, i32 %new.val, ptr @deallocate)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token %tok)
unreachable
}
@@ -95,7 +96,8 @@ entry:
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
+declare token @llvm.coro.end.results(...)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
index 59e38bc31fee436..c33e60e98cd8b8c 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-value2.ll
@@ -19,7 +19,7 @@ cont:
br label %cleanup
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -40,8 +40,8 @@ cont:
br label %cleanup
cleanup:
- %newval = add i8 %val, 42
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, i8 %newval)
+ %tok = call token (...) @llvm.coro.end.results(i8 %val)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token %tok)
unreachable
}
@@ -62,7 +62,8 @@ cont:
br label %cleanup
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0, ptr null, i32 123, ptr @deallocate)
+ %tok = call token (...) @llvm.coro.end.results(ptr null, i32 123, ptr @deallocate)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token %tok)
unreachable
}
@@ -70,7 +71,8 @@ cleanup:
declare token @llvm.coro.id.retcon.once(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
+declare token @llvm.coro.end.results(...)
declare void @prototype(ptr, i1 zeroext)
declare i8 @prototype2(ptr, i1 zeroext)
@@ -134,9 +136,8 @@ declare void @print(i32)
; CHECK: cleanup:
; CHECK-NEXT: [[VAL_RELOAD_ADDR:%.*]] = getelementptr inbounds [[G_FRAME]], ptr [[TMP2]], i32 0, i32 2
; CHECK-NEXT: [[VAL_RELOAD:%.*]] = load i8, ptr [[VAL_RELOAD_ADDR]], align 1
-; CHECK-NEXT: [[NEWVAL:%.*]] = add i8 [[VAL_RELOAD]], 42
; CHECK-NEXT: call fastcc void @deallocate(ptr [[TMP2]])
-; CHECK-NEXT: ret i8 [[NEWVAL]]
+; CHECK-NEXT: ret i8 [[VAL_RELOAD]]
;
;
; CHECK-LABEL: @h(
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll b/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
index b42b9b0c001417d..f456b6e7bc85835 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-opaque-ptr.ll
@@ -26,7 +26,7 @@ resume: ; preds = %loop
br label %loop
cleanup: ; preds = %loop
- %0 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ %0 = call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
unreachable
}
@@ -70,14 +70,14 @@ resume: ; preds = %loop
br label %loop
cleanup: ; preds = %loop
- %0 = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ %0 = call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll b/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
index 5f9bb7479130c78..fd16ba96181b9de 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-remat.ll
@@ -31,14 +31,14 @@ resume1:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare { ptr, i32 } @f_prototype(ptr, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
index d2091b3734b3d9a..f4333a12bb34a86 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values.ll
@@ -27,7 +27,7 @@ resume:
cleanup:
call void @print(i32 %n.val)
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -66,7 +66,7 @@ entry:
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare { i32, i1 } @llvm.coro.suspend.retcon.sl_i32i1s(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i32, i1 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
index 3e0af5ea9544fcd..2caa6430ca0124b 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-resume-values2.ll
@@ -15,14 +15,14 @@ entry:
%sum4 = call i32 @add(i32 %sum3, i32 %value1)
%sum5 = call i32 @add(i32 %sum4, i32 %value2)
call void @print(i32 %sum5)
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i32 @llvm.coro.suspend.retcon.i32(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @prototype(ptr, i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll b/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
index 2d8417765f07340..8ed03849fb63b14 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-unreachable.ll
@@ -23,7 +23,7 @@ define hidden swiftcc { ptr, ptr } @no_suspends(ptr %buffer, i64 %arg) #1 {
bb1:
call void @print(i64 %arg)
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %begin, i1 false)
+ call i1 @llvm.coro.end(ptr %begin, i1 false, token none)
unreachable
}
@@ -41,7 +41,7 @@ declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #6
declare i1 @llvm.coro.suspend.retcon.i1(...) #5
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #6
declare void @llvm.coro.alloca.free(token) #5
-declare i1 @llvm.coro.end(ptr, i1, ...) #5
+declare i1 @llvm.coro.end(ptr, i1, token) #5
declare void @llvm.trap()
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-value.ll b/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
index 9eafa2f238c269d..6a150c6a798078b 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon-value.ll
@@ -25,7 +25,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -64,7 +64,7 @@ entry:
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend.retcon.i8(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare {ptr, i32} @prototype(ptr, i8 zeroext)
diff --git a/llvm/test/Transforms/Coroutines/coro-retcon.ll b/llvm/test/Transforms/Coroutines/coro-retcon.ll
index 61ca4f82c6cc8a2..b12a646ef53f9f4 100644
--- a/llvm/test/Transforms/Coroutines/coro-retcon.ll
+++ b/llvm/test/Transforms/Coroutines/coro-retcon.ll
@@ -33,7 +33,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -103,7 +103,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -137,14 +137,14 @@ cleanup:
call void @use_var_ptr(ptr %a)
%al = load i32, ptr %a
call void @use_var(i32 %al)
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare void @use_var(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll b/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
index 04afb9f06adde49..cbe57a8d611323e 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-after-phi.ll
@@ -50,7 +50,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare i32 @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll b/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
index 1d87ca5bc776360..f238955d1c3e937 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-corobegin.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -62,7 +62,7 @@ declare i8 @llvm.coro.suspend(token, i1)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print.i32(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll b/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
index 10bef085ebb66e8..801c4a177613532 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-defs-before-corobegin.ll
@@ -36,7 +36,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
lpad:
@@ -70,7 +70,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare i32 @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll b/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
index 79d0a58154625f2..3293e5c84b9874d 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-promise-02.ll
@@ -29,7 +29,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -57,7 +57,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-spill-promise.ll b/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
index f0a1bc97333e8d8..47e891a57d222c2 100644
--- a/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
+++ b/llvm/test/Transforms/Coroutines/coro-spill-promise.ll
@@ -28,7 +28,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare double @print(double)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-00.ll b/llvm/test/Transforms/Coroutines/coro-split-00.ll
index ee7c2bd1d88f4d2..b35bd720b86f965 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-00.ll
@@ -28,7 +28,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -72,7 +72,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") "alloc-family"="malloc"
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-01.ll b/llvm/test/Transforms/Coroutines/coro-split-01.ll
index 20519b894987e83..7a03495e75d8d83 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-01.ll
@@ -26,7 +26,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
define i32 @main() {
@@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-02.ll b/llvm/test/Transforms/Coroutines/coro-split-02.ll
index fcdc6735c5f6916..31e8e8155035ca3 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-02.ll
@@ -34,7 +34,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -60,6 +60,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-alloc.ll b/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
index 2579c642420fa74..f6f50e2f3c76c47 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-alloc.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -57,7 +57,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @custom_alloctor(i32, i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-dbg.ll b/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
index c004e96eb085d32..184d4a564ab7239 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-dbg.ll
@@ -38,7 +38,7 @@ coro_Cleanup: ; preds = %for.cond
br label %coro_Suspend, !dbg !36
coro_Suspend: ; preds = %for.cond, %if.then, %coro_Cleanup
- tail call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false) #9, !dbg !38
+ tail call i1 @llvm.coro.end(ptr null, i1 false, token none) #9, !dbg !38
ret ptr %2, !dbg !39
}
@@ -57,7 +57,7 @@ declare i8 @llvm.coro.suspend(token, i1) #7
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #5
declare void @free(ptr nocapture) local_unnamed_addr #6
-declare i1 @llvm.coro.end(ptr, i1, ...) #7
+declare i1 @llvm.coro.end(ptr, i1, token) #7
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #5
declare void @llvm.dbg.value(metadata, metadata, metadata) #1
diff --git a/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll b/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
index eafdcac05daa179..d7d60bb2bfa2296 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-eh-00.ll
@@ -17,7 +17,7 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
call void @print(i32 0) ; should not be present in f.resume
ret ptr %hdl
@@ -26,7 +26,7 @@ lpad:
cleanup
call void @print(i32 2)
- %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 @llvm.coro.end(ptr null, i1 true, token none)
br i1 %need.resume, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -80,7 +80,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll b/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
index 5586119440dccf5..b25c4b9f5a7008a 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-eh-01.ll
@@ -17,14 +17,14 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
call void @print(i32 0) ; should not be present in f.resume
ret ptr %hdl
lpad:
%tok = cleanuppad within none []
call void @print(i32 2)
- %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true) [ "funclet"(token %tok) ]
+ %unused = call i1 @llvm.coro.end(ptr null, i1 true, token none) [ "funclet"(token %tok) ]
cleanupret from %tok unwind label %cleanup.cont
cleanup.cont:
@@ -74,7 +74,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll b/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
index 4cbdbb369c59525..fbefd43f73c36c7 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-final-suspend.ll
@@ -28,7 +28,7 @@ resume:
invoke void @print(i32 1) to label %suspend unwind label %lpad
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
call void @print(i32 0)
ret ptr %hdl
@@ -37,7 +37,7 @@ lpad:
cleanup
call void @print(i32 2)
- %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 @llvm.coro.end(ptr null, i1 true, token none)
br i1 %need.resume, label %eh.resume, label %cleanup.cont
cleanup.cont:
@@ -97,7 +97,7 @@ resume:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
call void @print(i32 0)
ret ptr %hdl
}
@@ -122,7 +122,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-hidden.ll b/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
index c6a245b690570ae..fa4f0ab13bebc1b 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-hidden.ll
@@ -30,7 +30,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -74,7 +74,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized")
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
index 5a7dcbc19e0e79c..e8596b78460a5fa 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail-ppc64le.ll
@@ -36,7 +36,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -58,7 +58,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
index fb80999a08ae766..0406135687904bf 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail.ll
@@ -28,7 +28,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -51,7 +51,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
index 71930b977351174..cd1635b93d2cc24 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail1.ll
@@ -48,7 +48,7 @@ final.suspend:
pre.exit:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreach:
unreachable
@@ -83,7 +83,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare i8 @switch_result()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
index c096ed779998110..9d73c8bbc57b81a 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail10.ll
@@ -30,7 +30,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -44,7 +44,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
index 54244c05fece974..9bc5b4f0c65d91e 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail11.ll
@@ -30,7 +30,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -44,7 +44,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
index 3138b188355275d..e7f4bcb9b0ff29a 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail12.ll
@@ -55,7 +55,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -72,7 +72,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
index e03f5972175d409..2384f9382685bd0 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail13.ll
@@ -38,7 +38,7 @@ lpad:
%lpval = landingpad { ptr, i32 }
cleanup
- %need.resume = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 true)
+ %need.resume = call i1 @llvm.coro.end(ptr null, i1 true, token none)
resume { ptr, i32 } %lpval
coro.free:
@@ -46,7 +46,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -63,7 +63,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
index c63da1df1545f81..38fc12815c033e7 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail2.ll
@@ -36,7 +36,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -57,7 +57,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
index b6afaec6490219d..b777f000e33a6d3 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail3.ll
@@ -44,7 +44,7 @@ final.suspend:
pre.exit:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
unreach:
unreachable
@@ -79,7 +79,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare i8 @switch_result()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
index d594d6bebd94949..1e0fcdb87a72d30 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail4.ll
@@ -38,7 +38,7 @@ coro.free:
br label %coro.end
coro.end:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -54,7 +54,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
index a722df2404e32e3..d19606491335e50 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail5.ll
@@ -32,7 +32,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -49,7 +49,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @consume(ptr)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
index 412e6f43f49bcc9..eea711861c488c5 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail6.ll
@@ -35,7 +35,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -83,7 +83,7 @@ coro.free:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -101,7 +101,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
index 6dcc9632c03cb48..c32fe9b0ee304c2 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail7.ll
@@ -35,7 +35,7 @@ await.ready:
call void @llvm.lifetime.end.p0(i64 1, ptr %alloc.var)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -83,7 +83,7 @@ coro.free:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -101,7 +101,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @delete(ptr nonnull) #2
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
index 44c34d7d443626f..31b18d746be5f75 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail8.ll
@@ -32,7 +32,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -46,7 +46,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @print()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll b/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
index 0271b593771c37f..76376dbbbe3d8c0 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-musttail9.ll
@@ -32,7 +32,7 @@ await.ready:
i8 1, label %exit
]
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -46,7 +46,7 @@ declare token @llvm.coro.save(ptr) #2
declare ptr @llvm.coro.frame() #3
declare i8 @llvm.coro.suspend(token, i1) #2
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1
-declare i1 @llvm.coro.end(ptr, i1, ...) #2
+declare i1 @llvm.coro.end(ptr, i1, token) #2
declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1
declare ptr @malloc(i64)
declare void @print()
diff --git a/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll b/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
index c034ec68332277a..157807dc05363fc 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-no-lieftime.ll
@@ -37,7 +37,7 @@ cleanup:
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -52,7 +52,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
index 7f88fb400a09c53..1d0cf94c1a97991 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
@@ -37,7 +37,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -76,7 +76,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -91,6 +91,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
index a505f241a17ef0b..38a2a33efe051d8 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-02.ll
@@ -48,7 +48,7 @@ after.await:
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -68,6 +68,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
index 14570d862f9134b..de377a6a38b94cb 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-03.ll
@@ -36,7 +36,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
; CHECK-LABEL: @a.gep.resume(
@@ -59,6 +59,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
index 39e1a69903d9f3c..821045583092dbc 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-04.ll
@@ -35,7 +35,7 @@ await.ready:
call void @print(i32 %val)
br label %exit
exit:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret void
}
@@ -61,6 +61,6 @@ declare ptr @llvm.coro.frame() #5
declare i8 @llvm.coro.suspend(token, i1) #3
declare void @"\01??3 at YAXPEAX@Z"(ptr) local_unnamed_addr #10
declare ptr @llvm.coro.free(token, ptr nocapture readonly) #2
-declare i1 @llvm.coro.end(ptr, i1, ...) #3
+declare i1 @llvm.coro.end(ptr, i1, token) #3
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #4
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #4
diff --git a/llvm/test/Transforms/Coroutines/coro-swifterror.ll b/llvm/test/Transforms/Coroutines/coro-swifterror.ll
index 4c8813a46f01057..f192dbac3197e33 100644
--- a/llvm/test/Transforms/Coroutines/coro-swifterror.ll
+++ b/llvm/test/Transforms/Coroutines/coro-swifterror.ll
@@ -34,7 +34,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -76,7 +76,7 @@ resume:
br label %loop
cleanup:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
unreachable
}
@@ -86,7 +86,7 @@ declare token @llvm.coro.id.retcon(i32, i32, ptr, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
declare { i1, ptr } @llvm.coro.suspend.retcon.i1p0p0i8(...)
declare i1 @llvm.coro.suspend.retcon.i1(...)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.prepare.retcon(ptr)
declare ptr @f_prototype(ptr, i1 zeroext, ptr swifterror)
diff --git a/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll b/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
index 16e7212dc81b0e9..e3f09ba29cbf718 100644
--- a/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
+++ b/llvm/test/Transforms/Coroutines/coro-zero-alloca.ll
@@ -9,7 +9,7 @@ declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr)
declare i64 @llvm.coro.size.i64()
declare ptr @llvm.coro.begin(token, ptr writeonly)
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
declare token @llvm.coro.save(ptr)
@@ -42,7 +42,7 @@ wakeup: ; preds = %entry
br label %cleanup
suspend: ; preds = %cleanup, %entry
- %unused = call i1 (ptr, i1, ...) @llvm.coro.end(ptr %coro.state, i1 false)
+ %unused = call i1 @llvm.coro.end(ptr %coro.state, i1 false, token none)
ret void
cleanup: ; preds = %wakeup, %entry
diff --git a/llvm/test/Transforms/Coroutines/ex0.ll b/llvm/test/Transforms/Coroutines/ex0.ll
index 972306b6770464d..9809488c85b3762 100644
--- a/llvm/test/Transforms/Coroutines/ex0.ll
+++ b/llvm/test/Transforms/Coroutines/ex0.ll
@@ -24,7 +24,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -52,7 +52,7 @@ declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/ex1.ll b/llvm/test/Transforms/Coroutines/ex1.ll
index 0d89913859c5369..2db5ef6067cad97 100644
--- a/llvm/test/Transforms/Coroutines/ex1.ll
+++ b/llvm/test/Transforms/Coroutines/ex1.ll
@@ -20,7 +20,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -48,7 +48,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex2.ll b/llvm/test/Transforms/Coroutines/ex2.ll
index 3adf9724ae0b676..d9999d46b38cfe3 100644
--- a/llvm/test/Transforms/Coroutines/ex2.ll
+++ b/llvm/test/Transforms/Coroutines/ex2.ll
@@ -29,7 +29,7 @@ dyn.free:
call void @CustomFree(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex3.ll b/llvm/test/Transforms/Coroutines/ex3.ll
index 994ad8593b20754..e7fbc97d8f14fab 100644
--- a/llvm/test/Transforms/Coroutines/ex3.ll
+++ b/llvm/test/Transforms/Coroutines/ex3.ll
@@ -32,7 +32,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -67,7 +67,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex4.ll b/llvm/test/Transforms/Coroutines/ex4.ll
index 139a21c2d466417..7c7a869e4a5001f 100644
--- a/llvm/test/Transforms/Coroutines/ex4.ll
+++ b/llvm/test/Transforms/Coroutines/ex4.ll
@@ -27,7 +27,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -63,7 +63,7 @@ declare i32 @llvm.coro.size.i32()
declare ptr @llvm.coro.begin(token, ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare void @llvm.coro.resume(ptr)
declare void @llvm.coro.destroy(ptr)
diff --git a/llvm/test/Transforms/Coroutines/ex5.ll b/llvm/test/Transforms/Coroutines/ex5.ll
index 2c01c2e5766908e..bf5cbec266c91aa 100644
--- a/llvm/test/Transforms/Coroutines/ex5.ll
+++ b/llvm/test/Transforms/Coroutines/ex5.ll
@@ -31,7 +31,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret ptr %hdl
}
@@ -46,7 +46,7 @@ declare ptr @llvm.coro.begin(token, ptr)
declare token @llvm.coro.save(ptr)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
; CHECK-LABEL: @main
define i32 @main() {
diff --git a/llvm/test/Transforms/Coroutines/no-suspend.ll b/llvm/test/Transforms/Coroutines/no-suspend.ll
index 4d17123d9015610..53eb98f1273a990 100644
--- a/llvm/test/Transforms/Coroutines/no-suspend.ll
+++ b/llvm/test/Transforms/Coroutines/no-suspend.ll
@@ -32,7 +32,7 @@ dyn.free:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
}
@@ -81,7 +81,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
}
@@ -129,7 +129,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -190,7 +190,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
}
@@ -244,7 +244,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
}
@@ -291,7 +291,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -343,7 +343,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
}
@@ -388,7 +388,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
ret void
lpad:
%lpval = landingpad { ptr, i32 }
@@ -410,7 +410,7 @@ declare ptr @llvm.coro.begin(token, ptr)
declare token @llvm.coro.save(ptr %hdl)
declare i8 @llvm.coro.suspend(token, i1)
declare ptr @llvm.coro.free(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.subfn.addr(ptr, i8)
diff --git a/llvm/test/Transforms/Coroutines/phi-coro-end.ll b/llvm/test/Transforms/Coroutines/phi-coro-end.ll
index a7941e7f13359dc..aab76faed3f1ab1 100644
--- a/llvm/test/Transforms/Coroutines/phi-coro-end.ll
+++ b/llvm/test/Transforms/Coroutines/phi-coro-end.ll
@@ -17,7 +17,7 @@ cleanup:
suspend:
%r = phi i32 [%n, %entry], [1, %cleanup]
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 false)
+ call i1 @llvm.coro.end(ptr %hdl, i1 false, token none)
call void @print(i32 %r)
ret ptr %hdl
}
@@ -41,7 +41,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/Coroutines/remarks.ll b/llvm/test/Transforms/Coroutines/remarks.ll
index bd1f79bf2c711f1..5eaddbfc3d10789 100644
--- a/llvm/test/Transforms/Coroutines/remarks.ll
+++ b/llvm/test/Transforms/Coroutines/remarks.ll
@@ -33,7 +33,7 @@ cleanup:
call void @free(ptr %mem)
br label %suspend
suspend:
- call i1 (ptr, i1, ...) @llvm.coro.end(ptr %hdl, i1 0)
+ call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
ret ptr %hdl
}
@@ -60,7 +60,7 @@ declare void @llvm.coro.destroy(ptr)
declare token @llvm.coro.id(i32, ptr, ptr, ptr)
declare i1 @llvm.coro.alloc(token)
declare ptr @llvm.coro.begin(token, ptr)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare noalias ptr @malloc(i32)
declare void @print(i32)
diff --git a/llvm/test/Transforms/LICM/sink-with-coroutine.ll b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
index 67b4be9018b8fb7..2013df11d9c44dd 100644
--- a/llvm/test/Transforms/LICM/sink-with-coroutine.ll
+++ b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
@@ -22,7 +22,7 @@ define i64 @licm(i64 %n) #0 {
; CHECK-NEXT: [[T6:%.*]] = icmp ult i64 [[T5]], [[N]]
; CHECK-NEXT: br i1 [[T6]], label [[LOOP]], label [[BB2]]
; CHECK: bb2:
-; CHECK-NEXT: [[RES:%.*]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(ptr null, i1 false, token none)
; CHECK-NEXT: ret i64 0
;
entry:
@@ -46,7 +46,7 @@ await.ready:
br i1 %t6, label %loop, label %bb2
bb2:
- %res = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %res = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret i64 0
}
@@ -82,7 +82,7 @@ define i64 @hoist_threadlocal() presplitcoroutine {
; CHECK: loop.end:
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT]], label [[FOR_BODY]]
; CHECK: exit:
-; CHECK-NEXT: [[RES:%.*]] = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(ptr null, i1 false, token none)
; CHECK-NEXT: ret i64 0
;
entry:
@@ -119,12 +119,12 @@ loop.end:
br i1 %cmp, label %exit, label %for.body
exit:
- %res = call i1 (ptr, i1, ...) @llvm.coro.end(ptr null, i1 false)
+ %res = call i1 @llvm.coro.end(ptr null, i1 false, token none)
ret i64 0
}
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1, ...)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare nonnull ptr @readonly_funcs() readonly
declare nonnull ptr @llvm.threadlocal.address(ptr nonnull) nounwind readnone willreturn
declare void @not.reachable()
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
index 1492a38e5e06200..51017b5e050ffef 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
@@ -503,8 +503,9 @@ def LLVM_CoroSuspendOp : LLVM_IntrOp<"coro.suspend", [], [], [], 1> {
def LLVM_CoroEndOp : LLVM_IntrOp<"coro.end", [], [], [], 1> {
let arguments = (ins LLVM_i8Ptr:$handle,
- I1:$unwind);
- let assemblyFormat = "$handle `,` $unwind attr-dict `:` functional-type(operands, results)";
+ I1:$unwind,
+ LLVM_TokenType:$retvals);
+ let assemblyFormat = "$handle `,` $unwind `,` $retvals attr-dict `:` functional-type(operands, results)";
}
def LLVM_CoroFreeOp : LLVM_IntrOp<"coro.free", [], [], [], 1> {
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
index 57dce72e102e7a4..72ceac8b6f6baf6 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
@@ -1465,6 +1465,31 @@ def LLVM_NullOp
let assemblyFormat = "attr-dict `:` qualified(type($res))";
}
+def LLVM_NoneTokenOp
+ : LLVM_Op<"mlir.none", [Pure]> {
+ let summary = "Defines a value containing an empty token to LLVM type.";
+ let description = [{
+ Unlike LLVM IR, MLIR does not have first-class token values. They must be
+ explicitly created as SSA values using `llvm.mlir.none`. This operation has
+ no operands or attributes, and returns a none token value of a wrapped LLVM IR
+ pointer type.
+
+ Examples:
+
+ ```mlir
+ %0 = llvm.mlir.none : !llvm.token
+ ```
+ }];
+
+ string llvmBuilder = [{
+ $res = llvm::ConstantTokenNone::get(builder.getContext());
+ }];
+
+ let results = (outs LLVM_TokenType:$res);
+ let builders = [LLVM_OneResultOpBuilder];
+ let assemblyFormat = "attr-dict `:` type($res)";
+}
+
def LLVM_UndefOp : LLVM_Op<"mlir.undef", [Pure]>,
LLVM_Builder<"$res = llvm::UndefValue::get($_resultType);"> {
let summary = "Creates an undefined value of LLVM dialect type.";
diff --git a/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp b/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp
index 234d06c08da6dcf..1c3fbe8057c5bee 100644
--- a/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp
+++ b/mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp
@@ -534,11 +534,12 @@ class CoroEndOpConversion : public OpConversionPattern<CoroEndOp> {
// We are not in the block that is part of the unwind sequence.
auto constFalse = rewriter.create<LLVM::ConstantOp>(
op->getLoc(), rewriter.getI1Type(), rewriter.getBoolAttr(false));
+ auto noneToken = rewriter.create<LLVM::NoneTokenOp>(op->getLoc());
// Mark the end of a coroutine: @llvm.coro.end.
auto coroHdl = adaptor.getHandle();
rewriter.create<LLVM::CoroEndOp>(op->getLoc(), rewriter.getI1Type(),
- ValueRange({coroHdl, constFalse}));
+ ValueRange({coroHdl, constFalse, noneToken}));
rewriter.eraseOp(op);
return success();
diff --git a/mlir/lib/Target/LLVMIR/ModuleImport.cpp b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
index 35b2fcd3d3abe4e..e82f85c822a015b 100644
--- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
@@ -990,6 +990,11 @@ FailureOr<Value> ModuleImport::convertConstant(llvm::Constant *constant) {
return builder.create<NullOp>(loc, type).getResult();
}
+ // Convert none token constants.
+ if (auto *noneToken = dyn_cast<llvm::ConstantTokenNone>(constant)) {
+ return builder.create<NoneTokenOp>(loc).getResult();
+ }
+
// Convert poison.
if (auto *poisonVal = dyn_cast<llvm::PoisonValue>(constant)) {
Type type = convertType(poisonVal->getType());
diff --git a/mlir/test/Target/LLVMIR/Import/intrinsic.ll b/mlir/test/Target/LLVMIR/Import/intrinsic.ll
index 6067c73067e3ff3..56c3cfbb5c7c2b7 100644
--- a/mlir/test/Target/LLVMIR/Import/intrinsic.ll
+++ b/mlir/test/Target/LLVMIR/Import/intrinsic.ll
@@ -701,7 +701,7 @@ define void @coro_suspend(i32 %0, i1 %1, ptr %2) {
; CHECK-LABEL: llvm.func @coro_end
define void @coro_end(ptr %0, i1 %1) {
; CHECK: llvm.intr.coro.end
- call i1 @llvm.coro.end(ptr %0, i1 %1)
+ call i1 @llvm.coro.end(ptr %0, i1 %1, token none)
ret void
}
@@ -1021,7 +1021,7 @@ declare i64 @llvm.coro.align.i64()
declare i32 @llvm.coro.align.i32()
declare token @llvm.coro.save(ptr)
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(ptr, i1)
+declare i1 @llvm.coro.end(ptr, i1, token)
declare ptr @llvm.coro.free(token, ptr nocapture readonly)
declare void @llvm.coro.resume(ptr)
declare i32 @llvm.eh.typeid.for(ptr)
diff --git a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
index 0c42fabd0785ad4..427c09976ef14c4 100644
--- a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
@@ -690,8 +690,9 @@ llvm.func @coro_suspend(%arg0: i32, %arg1 : i1, %arg2 : !llvm.ptr) {
// CHECK-LABEL: @coro_end
llvm.func @coro_end(%arg0: !llvm.ptr, %arg1 : i1) {
- // CHECK: call i1 (ptr, i1, ...) @llvm.coro.end
- %0 = llvm.intr.coro.end %arg0, %arg1 : (!llvm.ptr, i1) -> i1
+ %none = llvm.mlir.none : !llvm.token
+ // CHECK: call i1 @llvm.coro.end
+ %0 = llvm.intr.coro.end %arg0, %arg1, %none : (!llvm.ptr, i1, !llvm.token) -> i1
llvm.return
}
@@ -1043,7 +1044,7 @@ llvm.func @ssa_copy(%arg: f32) -> f32 {
// CHECK-DAG: declare i32 @llvm.coro.size.i32()
// CHECK-DAG: declare token @llvm.coro.save(ptr)
// CHECK-DAG: declare i8 @llvm.coro.suspend(token, i1)
-// CHECK-DAG: declare i1 @llvm.coro.end(ptr, i1, ...)
+// CHECK-DAG: declare i1 @llvm.coro.end(ptr, i1, token)
// CHECK-DAG: declare ptr @llvm.coro.free(token, ptr nocapture readonly)
// CHECK-DAG: declare void @llvm.coro.resume(ptr)
// CHECK-DAG: declare <8 x i32> @llvm.vp.add.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
More information about the cfe-commits
mailing list