[clang] [clang][CodeGen] Promote point of GRO(CWG2563) (PR #151067)
Chuanqi Xu via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 30 18:43:35 PST 2025
================
@@ -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
More information about the cfe-commits
mailing list