[llvm] [Coroutines] Verify normalization was not missed (PR #108096)
Tyler Nowicki via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 11 07:32:33 PDT 2024
https://github.com/TylerNowicki updated https://github.com/llvm/llvm-project/pull/108096
>From 8f7c72951eb65f70d256d731908e0b52043eece0 Mon Sep 17 00:00:00 2001
From: tnowicki <tnowicki.nowicki at amd.com>
Date: Tue, 10 Sep 2024 17:32:24 -0400
Subject: [PATCH] [Coroutines] Verify normalization was not missed
* Add asserts to verify normalization of the coroutine happened.
* This will be important if/when normalization becomes part of an ABI
object.
---
llvm/lib/Transforms/Coroutines/CoroFrame.cpp | 2 +-
.../Transforms/Coroutines/SuspendCrossingInfo.cpp | 12 +++++++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index 8ee4bfa3b888df..b792835159a8a3 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -1284,7 +1284,7 @@ static void insertSpills(const FrameDataInfo &FrameData, coro::Shape &Shape) {
// If we have a single edge PHINode, remove it and replace it with a
// reload from the coroutine frame. (We already took care of multi edge
- // PHINodes by rewriting them in the rewritePHIs function).
+ // PHINodes by normalizing them in the rewritePHIs function).
if (auto *PN = dyn_cast<PHINode>(U)) {
assert(PN->getNumIncomingValues() == 1 &&
"unexpected number of incoming "
diff --git a/llvm/lib/Transforms/Coroutines/SuspendCrossingInfo.cpp b/llvm/lib/Transforms/Coroutines/SuspendCrossingInfo.cpp
index 6b0dc126d5471a..84699e653db602 100644
--- a/llvm/lib/Transforms/Coroutines/SuspendCrossingInfo.cpp
+++ b/llvm/lib/Transforms/Coroutines/SuspendCrossingInfo.cpp
@@ -165,8 +165,13 @@ SuspendCrossingInfo::SuspendCrossingInfo(
// Mark all CoroEnd Blocks. We do not propagate Kills beyond coro.ends as
// the code beyond coro.end is reachable during initial invocation of the
// coroutine.
- for (auto *CE : CoroEnds)
+ for (auto *CE : CoroEnds) {
+ // Verify CoroEnd was normalized
+ assert(CE->getParent()->getFirstInsertionPt() == CE->getIterator() &&
+ CE->getParent()->size() <= 2 && "CoroEnd must be in its own BB");
+
getBlockData(CE->getParent()).End = true;
+ }
// Mark all suspend blocks and indicate that they kill everything they
// consume. Note, that crossing coro.save also requires a spill, as any code
@@ -179,6 +184,11 @@ SuspendCrossingInfo::SuspendCrossingInfo(
B.Kills |= B.Consumes;
};
for (auto *CSI : CoroSuspends) {
+ // Verify CoroSuspend was normalized
+ assert(CSI->getParent()->getFirstInsertionPt() == CSI->getIterator() &&
+ CSI->getParent()->size() <= 2 &&
+ "CoroSuspend must be in its own BB");
+
markSuspendBlock(CSI);
if (auto *Save = CSI->getCoroSave())
markSuspendBlock(Save);
More information about the llvm-commits
mailing list