1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=ipsccp,instcombine -S | FileCheck %s 3 4define internal i32 @foo(i1 %C) { 5; CHECK-LABEL: @foo( 6; CHECK-NEXT: br i1 [[C:%.*]], label [[T:%.*]], label [[F:%.*]] 7; CHECK: T: 8; CHECK-NEXT: ret i32 poison 9; CHECK: F: 10; CHECK-NEXT: ret i32 poison 11; 12 br i1 %C, label %T, label %F 13 14T: ; preds = %0 15 ret i32 52 16 17F: ; preds = %0 18 ret i32 52 19} 20 21define i1 @caller(i1 %C) { 22; CHECK-LABEL: @caller( 23; CHECK-NEXT: [[X:%.*]] = call i32 @foo(i1 [[C:%.*]]) 24; CHECK-NEXT: ret i1 true 25; 26 %X = call i32 @foo( i1 %C ) ; <i32> [#uses=1] 27 %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1] 28 ret i1 %Y 29} 30 31define i1 @invokecaller(i1 %C) personality ptr @__gxx_personality_v0 { 32; CHECK-LABEL: @invokecaller( 33; CHECK-NEXT: [[X:%.*]] = invoke i32 @foo(i1 [[C:%.*]]) 34; CHECK-NEXT: to label [[OK:%.*]] unwind label [[FAIL:%.*]] 35; CHECK: OK: 36; CHECK-NEXT: ret i1 true 37; CHECK: FAIL: 38; CHECK-NEXT: [[EXN:%.*]] = landingpad { ptr, i32 } 39; CHECK-NEXT: cleanup 40; CHECK-NEXT: ret i1 false 41; 42 %X = invoke i32 @foo( i1 %C ) to label %OK unwind label %FAIL ; <i32> [#uses=1] 43OK: 44 %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1] 45 ret i1 %Y 46FAIL: 47 %exn = landingpad {ptr, i32} 48 cleanup 49 ret i1 false 50} 51 52declare i32 @__gxx_personality_v0(...) 53