56 lines
1.3 KiB
LLVM
56 lines
1.3 KiB
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
|
||
|
}
|