; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -structurizecfg %s -o - | FileCheck %s
define void @test(i1 %b1, i1 %b2, i1 %b3, i1 %b4) {
; CHECK-LABEL: @test(
; CHECK-NEXT: A:
; CHECK-NEXT: [[B2_INV:%.*]] = xor i1 [[B2:%.*]], true
; CHECK-NEXT: br i1 [[B1:%.*]], label [[B:%.*]], label [[H:%.*]]
; CHECK: B:
; CHECK-NEXT: br label [[C:%.*]]
; CHECK: C:
; CHECK-NEXT: br i1 [[B2_INV]], label [[E:%.*]], label [[FLOW:%.*]]
; CHECK: Flow:
; CHECK-NEXT: [[TMP0:%.*]] = phi i1 [ [[B3:%.*]], [[E]] ], [ true, [[C]] ]
; CHECK-NEXT: [[TMP1:%.*]] = phi i1 [ false, [[E]] ], [ true, [[C]] ]
; CHECK-NEXT: br i1 [[TMP0]], label [[FLOW1:%.*]], label [[C]]
; CHECK: Flow1:
; CHECK-NEXT: br i1 [[TMP1]], label [[D:%.*]], label [[F:%.*]]
; CHECK: D:
; CHECK-NEXT: br label [[F]]
; CHECK: E:
; CHECK-NEXT: br label [[FLOW]]
; CHECK: F:
; CHECK-NEXT: br label [[G:%.*]]
; CHECK: G:
; CHECK-NEXT: br i1 [[B4:%.*]], label [[FLOW2:%.*]], label [[B]]
; CHECK: Flow2:
; CHECK-NEXT: br label [[H]]
; CHECK: H:
; CHECK-NEXT: ret void
;
A:
br i1 %b1, label %B, label %H
B:
br label %C
C:
br i1 %b2, label %D, label %E
D:
br label %F
E:
br i1 %b3, label %F, label %C
F:
br label %G
G:
br i1 %b4, label %H, label %B
H:
ret void
}