| ; 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 | |
| } |