[llvm] [CoroSplit] Fix infinite loop in CoroSplit (PR #185599)
Felipe de Azevedo Piovezan via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 10 02:05:08 PDT 2026
https://github.com/felipepiovezan created https://github.com/llvm/llvm-project/pull/185599
Optimized code may generate an uncoditional branch to the same BB.
>From b8dc51c62b11517a93b9434cbccb9fd86abbed4e Mon Sep 17 00:00:00 2001
From: Felipe de Azevedo Piovezan <fpiovezan at apple.com>
Date: Tue, 10 Mar 2026 07:35:54 +0000
Subject: [PATCH] [CoroSplit] Fix infinite loop in CoroSplit
Optimized code may generate an uncoditional branch to the same BB.
---
llvm/lib/Transforms/Coroutines/CoroSplit.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 587f581ded8d5..0430d50f642f5 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -819,7 +819,8 @@ static void updateScopeLine(Instruction *ActiveSuspend,
// Corosplit splits the BB around ActiveSuspend, so the meaningful
// instructions are not in the same BB.
while (auto *Branch = dyn_cast_or_null<BranchInst>(Successor)) {
- if (!Branch->isUnconditional())
+ if (!Branch->isUnconditional() ||
+ Branch->getSuccessor(0) == Branch->getParent())
break;
Successor = Branch->getSuccessor(0)->getFirstNonPHIOrDbg();
}
More information about the llvm-commits
mailing list