ChuanqiXu added inline comments.
================ Comment at: clang/lib/CodeGen/CGCoroutine.cpp:221 CGF.EmitBlock(RealSuspendBlock); + } else if (ForcestackStart) { + Builder.CreateCall( ---------------- lxfind wrote: > ChuanqiXu wrote: > > ChuanqiXu wrote: > > > can we rewrite it into: > > > ``` > > > else if (SuspendRet != nullptr && SuspendRet->getType()->isClassType()) { > > > // generate: > > > // llvm.coro.forcestack(SuspendRet) > > > } > > > ``` > > Sorry I find we can't did it directly. As you said, we need to traverse > > down SuspendRet. And I still think we should did it only at CodeGen part > > since it looks not so hard. I guess we could make it in above 10~15 lines > > of codes. > Traversing down AST isn't the hard part. The hard part is to search the > emitted IR, and look for the temporary alloca used to store the returned > handle. Yes, I get your point. If we want to traverse the emitted IR, we could only search for the use-chain backward, which is also very odd. Let's see if there is other ways to modify the ASTNodes to make it more naturally. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D98638/new/ https://reviews.llvm.org/D98638 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits