================
@@ -768,6 +779,41 @@ struct GetReturnObjectManager {
CGF.EmitAutoVarInit(GroEmission);
Builder.CreateStore(Builder.getTrue(), GroActiveFlag);
}
+
+ void EmitGroConv() {
+ // GRO conversion is unnecessary when get_return_object's type matches the
+ // coroutine return type.
+ if (DirectEmit)
+ return;
+
+ auto *InsertPt = Builder.GetInsertBlock();
+ auto *PreConvBB = CGF.CurCoro.Data->SuspendBB;
+ auto *AfterConvBB =
+ CGF.createBasicBlock("after.gro.conv", CGF.CurFn, InsertPt);
+ Builder.SetInsertPoint(AfterConvBB);
+ BasicBlock *AfterFinalBB = InsertPt->getSinglePredecessor();
----------------
ChuanqiXu9 wrote:
This is an implicit assumption that InsertPt has only one Predecessor. Let's
add it as an explicit assumption.
https://github.com/llvm/llvm-project/pull/151067
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits