1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s 3 4%0 = type { ptr, ptr } 5%1 = type { ptr } 6%2 = type { ptr, ptr } 7 8define void @eggs(i1 %arg, i1 %arg16, ptr %arg17, ptr %arg18, ptr %arg19) { 9; CHECK-LABEL: @eggs( 10; CHECK-NEXT: bb: 11; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB20:%.*]], label [[BB21:%.*]] 12; CHECK: bb20: 13; CHECK-NEXT: call void @wombat() 14; CHECK-NEXT: unreachable 15; CHECK: bb21: 16; CHECK-NEXT: [[I:%.*]] = icmp eq ptr [[ARG17:%.*]], null 17; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[I]], true 18; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]]) 19; CHECK-NEXT: call void @hoge() 20; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[ARG16:%.*]], true 21; CHECK-NEXT: call void @llvm.assume(i1 [[TMP1]]) 22; CHECK-NEXT: [[I28:%.*]] = load ptr, ptr [[ARG19:%.*]], align 8 23; CHECK-NEXT: call void @pluto.1(ptr [[I28]]) 24; CHECK-NEXT: call void @pluto() 25; CHECK-NEXT: ret void 26; 27bb: 28 br i1 %arg, label %bb20, label %bb21 29 30bb20: ; preds = %bb 31 call void @wombat() 32 br label %bb24 33 34bb21: ; preds = %bb 35 %i = icmp eq ptr %arg17, null 36 br i1 %i, label %bb24, label %bb22 37 38bb22: ; preds = %bb21 39 call void @hoge() 40 br i1 %arg16, label %bb24, label %bb23 41 42bb23: ; preds = %bb22 43 br label %bb24 44 45bb24: ; preds = %bb23, %bb22, %bb21, %bb20 46 %i25 = phi i1 [ false, %bb21 ], [ false, %bb20 ], [ false, %bb23 ], [ false, %bb22 ] 47 %i26 = phi ptr [ null, %bb21 ], [ null, %bb20 ], [ %arg19, %bb23 ], [ null, %bb22 ] 48 %i28 = load ptr, ptr %i26, align 8 49 call void @pluto.1(ptr %i28) 50 br i1 %i25, label %bb30, label %bb29 51 52bb29: ; preds = %bb24 53 call void @pluto() 54 ret void 55 56bb30: ; preds = %bb24 57 call void @spam() 58 ret void 59} 60 61declare void @wombat() 62declare void @pluto() 63declare void @spam() 64declare void @hoge() 65declare void @pluto.1(ptr) 66