; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s %0 = type { ptr, ptr } %1 = type { ptr } %2 = type { ptr, ptr } define void @eggs(i1 %arg, i1 %arg16, ptr %arg17, ptr %arg18, ptr %arg19) { ; CHECK-LABEL: @eggs( ; CHECK-NEXT: bb: ; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB20:%.*]], label [[BB21:%.*]] ; CHECK: bb20: ; CHECK-NEXT: call void @wombat() ; CHECK-NEXT: unreachable ; CHECK: bb21: ; CHECK-NEXT: [[I:%.*]] = icmp eq ptr [[ARG17:%.*]], null ; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[I]], true ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]]) ; CHECK-NEXT: call void @hoge() ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[ARG16:%.*]], true ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP1]]) ; CHECK-NEXT: [[I28:%.*]] = load ptr, ptr [[ARG19:%.*]], align 8 ; CHECK-NEXT: call void @pluto.1(ptr [[I28]]) ; CHECK-NEXT: call void @pluto() ; CHECK-NEXT: ret void ; bb: br i1 %arg, label %bb20, label %bb21 bb20: ; preds = %bb call void @wombat() br label %bb24 bb21: ; preds = %bb %i = icmp eq ptr %arg17, null br i1 %i, label %bb24, label %bb22 bb22: ; preds = %bb21 call void @hoge() br i1 %arg16, label %bb24, label %bb23 bb23: ; preds = %bb22 br label %bb24 bb24: ; preds = %bb23, %bb22, %bb21, %bb20 %i25 = phi i1 [ false, %bb21 ], [ false, %bb20 ], [ false, %bb23 ], [ false, %bb22 ] %i26 = phi ptr [ null, %bb21 ], [ null, %bb20 ], [ %arg19, %bb23 ], [ null, %bb22 ] %i28 = load ptr, ptr %i26, align 8 call void @pluto.1(ptr %i28) br i1 %i25, label %bb30, label %bb29 bb29: ; preds = %bb24 call void @pluto() ret void bb30: ; preds = %bb24 call void @spam() ret void } declare void @wombat() declare void @pluto() declare void @spam() declare void @hoge() declare void @pluto.1(ptr)