[llvm] 8d4d85d - Revert "[Coroutines] Always set the calling convention of generated resuming call from 'llvm.coro.await.suspend.handle' as fast"

Chuanqi Xu via llvm-commits llvm-commits at lists.llvm.org
Thu May 23 03:32:34 PDT 2024


Author: Chuanqi Xu
Date: 2024-05-23T18:31:55+08:00
New Revision: 8d4d85de1eeb23bc13a51bffbc12d9f158ca1921

URL: https://github.com/llvm/llvm-project/commit/8d4d85de1eeb23bc13a51bffbc12d9f158ca1921
DIFF: https://github.com/llvm/llvm-project/commit/8d4d85de1eeb23bc13a51bffbc12d9f158ca1921.diff

LOG: Revert "[Coroutines] Always set the calling convention of generated resuming call from 'llvm.coro.await.suspend.handle' as fast"

This reverts commit 31f1590e4fb324c43dc36199587c453e27b6f6fa.

It looks like some bots are not happy about the FileChecks

Added: 
    

Modified: 
    llvm/lib/Transforms/Coroutines/CoroSplit.cpp

Removed: 
    llvm/test/Transforms/Coroutines/coro-await-suspend-handle-in-ramp.ll


################################################################################
diff  --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 5a58a99d2879e..1d9cf185b75a7 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -227,7 +227,6 @@ static void lowerAwaitSuspend(IRBuilder<> &Builder, CoroAwaitSuspendInst *CB,
     FunctionType *ResumeTy = FunctionType::get(
         Type::getVoidTy(Ctx), PointerType::getUnqual(Ctx), false);
     auto *ResumeCall = Builder.CreateCall(ResumeTy, ResumeAddr, {NewCall});
-    ResumeCall->setCallingConv(CallingConv::Fast);
 
     // We can't insert the 'ret' instruction and adjust the cc until the
     // function has been split, so remember this for later.
@@ -1089,6 +1088,7 @@ void CoroCloner::create() {
   // Turn symmetric transfers into musttail calls.
   for (CallInst *ResumeCall : Shape.SymmetricTransfers) {
     ResumeCall = cast<CallInst>(VMap[ResumeCall]);
+    ResumeCall->setCallingConv(NewF->getCallingConv());
     if (TTI.supportsTailCallFor(ResumeCall)) {
       // FIXME: Could we support symmetric transfer effectively without
       // musttail?

diff  --git a/llvm/test/Transforms/Coroutines/coro-await-suspend-handle-in-ramp.ll b/llvm/test/Transforms/Coroutines/coro-await-suspend-handle-in-ramp.ll
deleted file mode 100644
index 85e8bb52fee35..0000000000000
--- a/llvm/test/Transforms/Coroutines/coro-await-suspend-handle-in-ramp.ll
+++ /dev/null
@@ -1,59 +0,0 @@
-; Tests lowerings of 
diff erent versions of coro.await.suspend
-; RUN: opt < %s -passes='module(coro-early),cgscc(coro-split),simplifycfg' -S | FileCheck %s
-
-%Awaiter = type {}
-
-define void @f() presplitcoroutine {
-entry:
-  %awaiter = alloca %Awaiter
-  %id = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr null)
-  %size = call i32 @llvm.coro.size.i32()
-  %alloc = call ptr @malloc(i32 %size)
-  %hdl = call ptr @llvm.coro.begin(token %id, ptr %alloc)
-  call void @llvm.coro.await.suspend.handle(ptr %awaiter, ptr %hdl, ptr @await_suspend_wrapper_handle)
-  %suspend.init = call i8 @llvm.coro.suspend(token none, i1 false)
-  switch i8 %suspend.init, label %ret [
-    i8 0, label %step
-    i8 1, label %cleanup
-  ]
-
-; Check the calling convention for resuming function is fastcc
-; CHECK:     define {{[^@]*}} @f()
-; CHECK:      entry:
-; CHECK:        %[[NEXT_HDL:.+]] = call ptr @await_suspend_wrapper_handle(
-; CHECK-NEXT:   %[[CONT:.+]] = call ptr @llvm.coro.subfn.addr(ptr %[[NEXT_HDL]], i8 0)
-; CHECK-NEXT:   musttail call fastcc void %[[CONT]](ptr %[[NEXT_HDL]])
-step:
-  br label %cleanup
-
-cleanup:
-  %mem = call ptr @llvm.coro.free(token %id, ptr %hdl)
-  call void @free(ptr %mem)
-  br label %ret
-
-ret:
-  call i1 @llvm.coro.end(ptr %hdl, i1 0, token none)
-  ret void
-}
-
-; check that we were haven't accidentally went out of @f body
-; CHECK-LABEL: @f.resume(
-; CHECK-LABEL: @f.destroy(
-; CHECK-LABEL: @f.cleanup(
-
-declare ptr @await_suspend_wrapper_handle(ptr, ptr)
-
-declare ptr @llvm.coro.free(token, ptr)
-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 token @llvm.coro.id(i32, ptr, ptr, ptr)
-declare i1 @llvm.coro.alloc(token)
-declare ptr @llvm.coro.begin(token, ptr)
-declare void @llvm.coro.await.suspend.handle(ptr, ptr, ptr)
-declare i1 @llvm.coro.end(ptr, i1, token)
-
-declare noalias ptr @malloc(i32)
-declare void @free(ptr)


        


More information about the llvm-commits mailing list