junparser added a comment. In D98638#2630786 <https://reviews.llvm.org/D98638#2630786>, @lxfind wrote:
> Well, I guess another potential solution is to force emitting lifetime > intrinsics for this part of coroutine in the front-end. > Like this: > > diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp > index 243d93a8c165..ef76e8dcb7c9 100644 > --- a/clang/lib/CodeGen/CGDecl.cpp > +++ b/clang/lib/CodeGen/CGDecl.cpp > @@ -1317,7 +1317,7 @@ void CodeGenFunction::EmitAutoVarDecl(const VarDecl > &D) { > /// otherwise > llvm::Value *CodeGenFunction::EmitLifetimeStart(uint64_t Size, > llvm::Value *Addr) { > - if (!ShouldEmitLifetimeMarkers) > + if (!ShouldEmitLifetimeMarkers && !isCoroutine()) > return nullptr; > > assert(Addr->getType()->getPointerAddressSpace() == > diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp > index 18f1468dcb86..2e6e6808db7f 100644 > --- a/clang/lib/CodeGen/CGExpr.cpp > +++ b/clang/lib/CodeGen/CGExpr.cpp > @@ -535,7 +535,7 @@ EmitMaterializeTemporaryExpr(const > MaterializeTemporaryExpr *M) { > break; > > case SD_FullExpression: { > - if (!ShouldEmitLifetimeMarkers) > + if (!ShouldEmitLifetimeMarkers && !isCoroutine()) > break; > > // Avoid creating a conditional cleanup just to hold an > llvm.lifetime.end We have already allowed to emit lifetime intrinsics for always inlined function under O2 <https://reviews.llvm.org/owners/package/2/>, so IMOO emitting lifetime intrinsics for coroutine function is OK since stack coloring has less effect on coroutine function. 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