[llvm] [FixIrreducible] Handle conditional branch with both successors as header (PR #206057)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 29 00:05:01 PDT 2026
================
@@ -0,0 +1,48 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -passes=fix-irreducible < %s | FileCheck %s
+
+; Regression test for https://github.com/llvm/llvm-project/issues/191979.
+declare i1 @sideeffect()
+
+define void @foo(i1 %c1) {
+; CHECK-LABEL: define void @foo(
+; CHECK-SAME: i1 [[C1:%.*]]) {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[C1_INV:%.*]] = xor i1 [[C1]], true
+; CHECK-NEXT: br label %[[PAD0:.*]]
+; CHECK: [[PAD0]]:
+; CHECK-NEXT: br label %[[PAD1:.*]]
+; CHECK: [[PAD1]]:
+; CHECK-NEXT: br label %[[IRR_GUARD:.*]]
+; CHECK: [[A:.*]]:
+; CHECK-NEXT: [[C2_A:%.*]] = call i1 @sideeffect()
+; CHECK-NEXT: br label %[[IRR_GUARD]]
+; CHECK: [[B:.*]]:
+; CHECK-NEXT: [[C2_B:%.*]] = call i1 @sideeffect()
+; CHECK-NEXT: br i1 [[C2_B]], label %[[EXIT:.*]], label %[[A]]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: ret void
+; CHECK: [[IRR_GUARD]]:
+; CHECK-NEXT: [[GUARD_B:%.*]] = phi i1 [ true, %[[A]] ], [ [[C1_INV]], %[[PAD1]] ]
+; CHECK-NEXT: br i1 [[GUARD_B]], label %[[B]], label %[[A]]
+;
+entry:
+ br label %pad0
----------------
lijinpei-amd wrote:
It is necessary: https://godbolt.org/z/7MxKxzo7T .
Otherwise, dom-tree update will build a fresh new one, instead of doing incremental update, and the core dump won't be triggered.
https://github.com/llvm/llvm-project/pull/206057
More information about the llvm-commits
mailing list