================
@@ -973,8 +1028,27 @@ void CodeGenFunction::EmitCoroutineBody(const 
CoroutineBodyStmt &S) {
     // shouldn't change the AST.
     if (PreviousRetValue)
       cast<ReturnStmt>(Ret)->setRetValue(PreviousRetValue);
-  }
 
+    if (!GroManager.DirectEmit) {
+      // Send GRO conversion to ConvBB
+      auto *ConvBB =
+          cast<llvm::BranchInst>(PreConvBB->getTerminator())->getSuccessor(0);
+      auto FromIt = ++RetBB->getFirstInsertionPt();
+      auto ToIt = RetBB->getTerminator()->getIterator();
+      ConvBB->splice(ConvBB->getFirstNonPHIIt(), RetBB, FromIt, ToIt);
+
+      // After gro conversion, destroy the coroutine if it finishes execution.
+      BasicBlock *AfterConvBB =
+          cast<llvm::BranchInst>(PreConvBB->getTerminator())->getSuccessor(1);
+      BasicBlock *CleanupBB = AfterConvBB->getSingleSuccessor();
----------------
ChuanqiXu9 wrote:

This is not obvious. How can we know its successor is Cleanup? And please make 
it explicit.

https://github.com/llvm/llvm-project/pull/151067
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to