xref: /llvm-project/llvm/test/Transforms/SCCP/solve-after-each-resolving-undefs-for-function.ll (revision 9bf6365237f3a8a401afc0a69d2fb6d1b809ce68)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
3
4;
5define internal i32 @testf(i1 %c) {
6; CHECK-LABEL: define internal i32 @testf(
7; CHECK-SAME: i1 [[C:%.*]]) {
8; CHECK-NEXT:  [[ENTRY:.*:]]
9; CHECK-NEXT:    br i1 [[C]], label %[[IF_COND:.*]], label %[[IF_END:.*]]
10; CHECK:       [[IF_COND]]:
11; CHECK-NEXT:    unreachable
12; CHECK:       [[IF_END]]:
13; CHECK-NEXT:    ret i32 poison
14;
15entry:
16  br i1 %c, label %if.cond, label %if.end
17
18if.cond:
19  br i1 poison, label %if.then, label %if.end
20
21if.then:                                          ; preds = %entry, %if.then
22  ret i32 11
23
24if.end:                                          ; preds = %if.then1, %entry
25  ret i32 10
26}
27
28;
29define internal i32 @test1(i1 %c) {
30; CHECK-LABEL: define internal i32 @test1(
31; CHECK-SAME: i1 [[C:%.*]]) {
32; CHECK-NEXT:  [[ENTRY:.*:]]
33; CHECK-NEXT:    br label %[[IF_THEN:.*]]
34; CHECK:       [[IF_THEN]]:
35; CHECK-NEXT:    [[CALL:%.*]] = call i32 @testf(i1 [[C]])
36; CHECK-NEXT:    br label %[[RET1:.*]]
37; CHECK:       [[RET1]]:
38; CHECK-NEXT:    ret i32 poison
39;
40entry:
41  br label %if.then
42
43if.then:                                          ; preds = %entry, %if.then
44  %call = call i32 @testf(i1 %c)
45  %res = icmp eq i32 %call, 10
46  br i1 %res, label %ret1, label %ret2
47
48ret1:                                           ; preds = %if.then, %entry
49  ret i32 99
50
51ret2:                                           ; preds = %if.then, %entry
52  ret i32 0
53}
54
55;
56define i32 @main(i1 %c) {
57; CHECK-LABEL: define i32 @main(
58; CHECK-SAME: i1 [[C:%.*]]) {
59; CHECK-NEXT:    [[RES:%.*]] = call i32 @test1(i1 [[C]])
60; CHECK-NEXT:    ret i32 99
61;
62  %res = call i32 @test1(i1 %c)
63  ret i32 %res
64}
65