[llvm-branch-commits] [llvm] 6f5c887 - [GVN] Check IndirectBr in Predecessor Terminators (#151188)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 11 05:10:46 PDT 2025
Author: hanbeom
Date: 2025-08-11T14:12:09+02:00
New Revision: 6f5c887e557ff6baa98c871541e6b901de211739
URL: https://github.com/llvm/llvm-project/commit/6f5c887e557ff6baa98c871541e6b901de211739
DIFF: https://github.com/llvm/llvm-project/commit/6f5c887e557ff6baa98c871541e6b901de211739.diff
LOG: [GVN] Check IndirectBr in Predecessor Terminators (#151188)
Critical edges with an IndirectBr terminator cannot be split.
Add a check it to prevent assertion failures.
Fixes: #150229
(cherry picked from commit a750fcb52bbf0ec0dc2022f73b1d48a4d43d8a07)
Added:
Modified:
llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
llvm/test/Transforms/GVN/cond_br.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
index ddd203f3acf71..42b1fdf17f389 100644
--- a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
+++ b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
@@ -111,15 +111,14 @@ BasicBlock *
llvm::SplitKnownCriticalEdge(Instruction *TI, unsigned SuccNum,
const CriticalEdgeSplittingOptions &Options,
const Twine &BBName) {
- assert(!isa<IndirectBrInst>(TI) &&
- "Cannot split critical edge from IndirectBrInst");
-
BasicBlock *TIBB = TI->getParent();
BasicBlock *DestBB = TI->getSuccessor(SuccNum);
- // Splitting the critical edge to a pad block is non-trivial. Don't do
- // it in this generic function.
- if (DestBB->isEHPad()) return nullptr;
+ // Splitting the critical edge to a pad block is non-trivial.
+ // And we cannot split block with IndirectBr as a terminator.
+ // Don't do it in this generic function.
+ if (DestBB->isEHPad() || isa<IndirectBrInst>(TI))
+ return nullptr;
if (Options.IgnoreUnreachableDests &&
isa<UnreachableInst>(DestBB->getFirstNonPHIOrDbgOrLifetime()))
diff --git a/llvm/test/Transforms/GVN/cond_br.ll b/llvm/test/Transforms/GVN/cond_br.ll
index 19166d17a8320..fb84b626c7455 100644
--- a/llvm/test/Transforms/GVN/cond_br.ll
+++ b/llvm/test/Transforms/GVN/cond_br.ll
@@ -53,3 +53,22 @@ if.end: ; preds = %if.else, %if.then
}
declare void @bar(i32)
+
+define void @indirectbr_could_not_split() {
+; CHECK-LABEL: define void @indirectbr_could_not_split() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: br i1 false, label %[[IBR:.*]], label %[[EXIT:.*]]
+; CHECK: [[IBR]]:
+; CHECK-NEXT: indirectbr ptr null, [label %[[EXIT]], label %exit]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: ret void
+;
+entry:
+ br i1 false, label %ibr, label %exit
+
+ibr:
+ indirectbr ptr null, [label %exit, label %exit]
+
+exit:
+ ret void
+}
More information about the llvm-branch-commits
mailing list