[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