xref: /llvm-project/llvm/test/Transforms/SCCP/return-constant.ll (revision 16bb8c16aab32e2ee623a2b64d976548be247180)
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