[llvm] [CoroSplit] Always erase lifetime intrinsics for spilled allocas (PR #142551)
Weibo He via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 3 00:48:12 PDT 2025
================
@@ -1212,14 +1212,26 @@ static void insertSpills(const FrameDataInfo &FrameData, coro::Shape &Shape) {
Builder.SetInsertPoint(Shape.AllocaSpillBlock,
Shape.AllocaSpillBlock->begin());
SmallVector<Instruction *, 4> UsersToUpdate;
+ SmallVector<Instruction *, 4> Lifetimes;
for (const auto &A : FrameData.Allocas) {
AllocaInst *Alloca = A.Alloca;
UsersToUpdate.clear();
+ Lifetimes.clear();
for (User *U : Alloca->users()) {
auto *I = cast<Instruction>(U);
- if (DT.dominates(Shape.CoroBegin, I))
+ if (I->isLifetimeStartOrEnd())
+ Lifetimes.push_back(I);
+ else if (DT.dominates(Shape.CoroBegin, I))
UsersToUpdate.push_back(I);
}
+
+ // If it is hard to analyze, we will give up and put allocas to frame,
+ // even if they never cross suspend points.
+ // Lifetime intrinsics referring to alloca may fail guard storing to frame.
+ // Lifetime intrinsics referring to frames may block further optimizations.
----------------
NewSigma wrote:
Done
https://github.com/llvm/llvm-project/pull/142551
More information about the llvm-commits
mailing list