Compiler projects using llvm
; 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
}