; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree < %s | FileCheck %s declare void @foo(i32) define void @br_undef_simple() { ; CHECK-LABEL: @br_undef_simple( ; CHECK-NEXT: call void @foo(i32 0) ; CHECK-NEXT: br i1 undef, label [[IF:%.*]], label [[ELSE:%.*]] ; CHECK: common.ret: ; CHECK-NEXT: ret void ; CHECK: if: ; CHECK-NEXT: call void @foo(i32 1) ; CHECK-NEXT: br label [[COMMON_RET:%.*]] ; CHECK: else: ; CHECK-NEXT: call void @foo(i32 2) ; CHECK-NEXT: br label [[COMMON_RET]] ; call void @foo(i32 0) br i1 undef, label %if, label %else if: call void @foo(i32 1) ret void else: call void @foo(i32 2) ret void } define void @br_poison_simple() { ; CHECK-LABEL: @br_poison_simple( ; CHECK-NEXT: call void @foo(i32 0) ; CHECK-NEXT: br i1 poison, label [[IF:%.*]], label [[ELSE:%.*]] ; CHECK: common.ret: ; CHECK-NEXT: ret void ; CHECK: if: ; CHECK-NEXT: call void @foo(i32 1) ; CHECK-NEXT: br label [[COMMON_RET:%.*]] ; CHECK: else: ; CHECK-NEXT: call void @foo(i32 2) ; CHECK-NEXT: br label [[COMMON_RET]] ; call void @foo(i32 0) br i1 poison, label %if, label %else if: call void @foo(i32 1) ret void else: call void @foo(i32 2) ret void } define void @br_poison_succs_used(i32 %v) { ; CHECK-LABEL: @br_poison_succs_used( ; CHECK-NEXT: entry: ; CHECK-NEXT: switch i32 [[V:%.*]], label [[BR:%.*]] [ ; CHECK-NEXT: i32 1, label [[IF:%.*]] ; CHECK-NEXT: i32 2, label [[ELSE:%.*]] ; CHECK-NEXT: ] ; CHECK: br: ; CHECK-NEXT: call void @foo(i32 0) ; CHECK-NEXT: br i1 poison, label [[IF]], label [[ELSE]] ; CHECK: common.ret: ; CHECK-NEXT: ret void ; CHECK: if: ; CHECK-NEXT: [[PHI1:%.*]] = phi i32 [ 1, [[BR]] ], [ 2, [[ENTRY:%.*]] ] ; CHECK-NEXT: call void @foo(i32 [[PHI1]]) ; CHECK-NEXT: br label [[COMMON_RET:%.*]] ; CHECK: else: ; CHECK-NEXT: [[PHI2:%.*]] = phi i32 [ 3, [[BR]] ], [ 4, [[ENTRY]] ] ; CHECK-NEXT: call void @foo(i32 [[PHI2]]) ; CHECK-NEXT: br label [[COMMON_RET]] ; entry: switch i32 %v, label %br [ i32 1, label %if i32 2, label %else ] br: call void @foo(i32 0) br i1 poison, label %if, label %else if: %phi1 = phi i32 [ 1, %br ], [ 2, %entry ] call void @foo(i32 %phi1) ret void else: %phi2 = phi i32 [ 3, %br ], [ 4, %entry ] call void @foo(i32 %phi2) ret void }