[clang] [llvm] Revert "[CoroSplit] Erase trivially dead allocas after spilling" (PR #189311)
Weibo He via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 29 21:22:49 PDT 2026
https://github.com/NewSigma created https://github.com/llvm/llvm-project/pull/189311
I think I forgot to update the FrameData after erasing. I'll check it locally.
Reverts llvm/llvm-project#189295
>From 448f2c60dcff8df6a39b06fd95e92f6cc86e185e Mon Sep 17 00:00:00 2001
From: Weibo He <NewSigma at 163.com>
Date: Mon, 30 Mar 2026 12:11:31 +0800
Subject: [PATCH] Revert "[CoroSplit] Erase trivially dead allocas after
spilling (#189295)"
This reverts commit 14e7dbd99a70258a0deb283785996f2e11be7e2b.
---
clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp | 2 ++
llvm/lib/Transforms/Coroutines/CoroFrame.cpp | 3 ---
.../Transforms/Coroutines/coro-await-suspend-lower-invoke.ll | 1 +
llvm/test/Transforms/Coroutines/coro-await-suspend-lower.ll | 1 +
llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll | 1 +
5 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp b/clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp
index 5872a75b26de5..77abc53ce2e71 100644
--- a/clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp
+++ b/clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp
@@ -39,6 +39,8 @@ coroutine ArrayInitCoro() {
// - We activate the cleanup after the first element and deactivate it in await.ready (see cleanup.isactive).
// CHECK-LABEL: define dso_local void @_Z13ArrayInitCorov
+ // CHECK: %arrayinit.endOfInit = alloca ptr, align 8
+ // CHECK: %cleanup.isactive = alloca i1, align 1
Printy arr[2] = {
Printy("a"),
// CHECK: store i1 true, ptr %cleanup.isactive.reload.addr, align 1
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index 96dad79374160..83b40ee927b51 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -1212,9 +1212,6 @@ static void insertSpills(const FrameDataInfo &FrameData, coro::Shape &Shape) {
for (Instruction *I : UsersToUpdate)
I->replaceUsesOfWith(Alloca, G);
-
- if (Alloca->user_empty())
- Alloca->eraseFromParent();
}
Builder.SetInsertPoint(&*Shape.getInsertPtAfterFramePtr());
for (const auto &A : FrameData.Allocas) {
diff --git a/llvm/test/Transforms/Coroutines/coro-await-suspend-lower-invoke.ll b/llvm/test/Transforms/Coroutines/coro-await-suspend-lower-invoke.ll
index 87309042f18bf..78540d9363cc6 100644
--- a/llvm/test/Transforms/Coroutines/coro-await-suspend-lower-invoke.ll
+++ b/llvm/test/Transforms/Coroutines/coro-await-suspend-lower-invoke.ll
@@ -105,6 +105,7 @@ declare noalias ptr @malloc(i32)
declare void @free(ptr)
; CHECK-LABEL: define void @f() personality i32 0 {
; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[AWAITER:%.*]] = alloca [[AWAITER:%.*]], align 8
; CHECK-NEXT: [[ID:%.*]] = call token @llvm.coro.id(i32 0, ptr null, ptr @f, ptr @f.resumers)
; CHECK-NEXT: [[ALLOC:%.*]] = call ptr @malloc(i32 24)
; CHECK-NEXT: [[HDL:%.*]] = call noalias nonnull ptr @llvm.coro.begin(token [[ID]], ptr [[ALLOC]])
diff --git a/llvm/test/Transforms/Coroutines/coro-await-suspend-lower.ll b/llvm/test/Transforms/Coroutines/coro-await-suspend-lower.ll
index bb3fa099de763..d6c93cad08a90 100644
--- a/llvm/test/Transforms/Coroutines/coro-await-suspend-lower.ll
+++ b/llvm/test/Transforms/Coroutines/coro-await-suspend-lower.ll
@@ -82,6 +82,7 @@ declare noalias ptr @malloc(i32)
declare void @free(ptr)
; CHECK-LABEL: define void @f() {
; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[AWAITER:%.*]] = alloca [[AWAITER:%.*]], align 8
; CHECK-NEXT: [[ID:%.*]] = call token @llvm.coro.id(i32 0, ptr null, ptr @f, ptr @f.resumers)
; CHECK-NEXT: [[ALLOC:%.*]] = call ptr @malloc(i32 24)
; CHECK-NEXT: [[HDL:%.*]] = call noalias nonnull ptr @llvm.coro.begin(token [[ID]], ptr [[ALLOC]])
diff --git a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
index 4cacbcf402adf..2ebd52328de52 100644
--- a/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
+++ b/llvm/test/Transforms/Coroutines/coro-split-sink-lifetime-01.ll
@@ -105,6 +105,7 @@ declare void @llvm.lifetime.end.p0(ptr nocapture) #4
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[REF_TMP7:%.*]] = alloca %"struct.lean_future<int>::Awaiter", align 8
+; CHECK-NEXT: [[TESTVAL:%.*]] = alloca i32, align 4
; CHECK-NEXT: [[ID:%.*]] = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr @a_optnone.resumers)
; CHECK-NEXT: [[ALLOC:%.*]] = call ptr @malloc(i64 16)
; CHECK-NEXT: [[VFRAME:%.*]] = call noalias nonnull ptr @llvm.coro.begin(token [[ID]], ptr [[ALLOC]])
More information about the llvm-commits
mailing list