1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
; 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
}
|