xref: /llvm-project/llvm/test/Examples/IRTransforms/SimplifyCFG/tut-simplify-cfg3-phis.ll (revision d291f1fd094538af705541045c0d9c3ceb85e71d)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v1 -S < %s | FileCheck %s
3; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v2 -S < %s | FileCheck %s
4; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v3 -S < %s | FileCheck %s
5
6define i32 @phi_cond_branch_eliminated() {
7; CHECK-LABEL: @phi_cond_branch_eliminated(
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    ret i32 20
10;
11entry:
12  br i1 true, label %bb.2, label %bb.3
13
14bb.2:
15  br label %bb.3
16
17bb.3:
18  %ret = phi i32 [ 10, %entry ], [ 20, %bb.2 ]
19  ret i32 %ret
20}
21
22define i32 @phi_removed() {
23; CHECK-LABEL: @phi_removed(
24; CHECK-NEXT:  entry:
25; CHECK-NEXT:    br label [[BB_3:%.*]]
26; CHECK:       bb.3:
27; CHECK-NEXT:    ret i32 0
28;
29entry:
30  br i1 false, label %bb.2, label %bb.3
31
32bb.2:
33  %pv = phi i32 [ 10, %entry ]
34  br label %bb.3
35
36bb.3:
37  ret i32 0
38}
39
40define i32 @phi_in_dead_region() {
41; CHECK-LABEL: @phi_in_dead_region(
42; CHECK-NEXT:  entry:
43; CHECK-NEXT:    ret i32 1
44;
45entry:
46  ret i32 1
47
48bb.1:
49  br i1 true, label %bb.2, label %bb.3
50
51bb.2:
52  br label %bb.3
53
54bb.3:
55  %ret = phi i32 [ 10, %bb.1 ], [ 20, %bb.2 ]
56  ret i32 %ret
57}
58
59define i32 @phi_in_mergable_blocks() {
60; CHECK-LABEL: @phi_in_mergable_blocks(
61; CHECK-NEXT:  entry:
62; CHECK-NEXT:    ret i32 10
63;
64entry:
65  br label %bb.1
66
67bb.1:
68  %pv = phi i32 [ 10, %entry ]
69  ret i32 %pv
70}
71