1cee313d2SEric Christopher; RUN: opt -jump-threading -S < %s | FileCheck %s
2cee313d2SEric Christopher; RUN: opt -passes=jump-threading -S < %s | FileCheck %s
3cee313d2SEric Christopher
4cee313d2SEric Christopherdefine void @test() {
5cee313d2SEric Christopher; CHECK-LABEL: @test()
6cee313d2SEric Christopherbb:
7cee313d2SEric Christopher  %tmp = call i32 @a()
8cee313d2SEric Christopher  %tmp1 = icmp eq i32 %tmp, 1
9cee313d2SEric Christopher  br i1 %tmp1, label %bb5, label %bb2
10cee313d2SEric Christopher; CHECK: br i1 %tmp1,{{.*}} !prof ![[PROF1:[0-9]+]]
11cee313d2SEric Christopher
12cee313d2SEric Christopherbb2:                                              ; preds = %bb
13cee313d2SEric Christopher  %tmp3 = call i32 @b()
14cee313d2SEric Christopher  %tmp4 = icmp ne i32 %tmp3, 1
15cee313d2SEric Christopher  br label %bb5
16cee313d2SEric Christopher; CHECK: br i1 %tmp4, {{.*}} !prof ![[PROF2:[0-9]+]]
17cee313d2SEric Christopher
18cee313d2SEric Christopherbb5:                                              ; preds = %bb2, %bb
19cee313d2SEric Christopher  %tmp6 = phi i1 [ false, %bb ], [ %tmp4, %bb2 ]
20cee313d2SEric Christopher  br i1 %tmp6, label %bb8, label %bb7, !prof !0
21cee313d2SEric Christopher
22cee313d2SEric Christopherbb7:                                              ; preds = %bb5
23cee313d2SEric Christopher  call void @bar()
24cee313d2SEric Christopher  br label %bb8
25cee313d2SEric Christopher
26cee313d2SEric Christopherbb8:                                              ; preds = %bb7, %bb5
27cee313d2SEric Christopher  ret void
28cee313d2SEric Christopher}
29cee313d2SEric Christopher
30cee313d2SEric Christopherdefine void @test_single_pred1() {
31cee313d2SEric Christopher; CHECK-LABEL: @test_single_pred1()
32cee313d2SEric Christopherbb:
33cee313d2SEric Christopher  %tmp = call i32 @a()
34cee313d2SEric Christopher  %tmp1 = icmp eq i32 %tmp, 1
35cee313d2SEric Christopher  br i1 %tmp1, label %bb5_1, label %bb2
36cee313d2SEric Christopher; CHECK: br i1 %tmp1,{{.*}} !prof ![[PROF1:[0-9]+]]
37cee313d2SEric Christopher
38cee313d2SEric Christopherbb5_1:
39cee313d2SEric Christopher  br label %bb5;
40cee313d2SEric Christopher
41cee313d2SEric Christopherbb2:
42cee313d2SEric Christopher  %tmp3 = call i32 @b()
43cee313d2SEric Christopher  %tmp4 = icmp ne i32 %tmp3, 1
44cee313d2SEric Christopher  br label %bb5
45cee313d2SEric Christopher; CHECK: br i1 %tmp4, {{.*}} !prof ![[PROF2:[0-9]+]]
46cee313d2SEric Christopher
47cee313d2SEric Christopherbb5:
48cee313d2SEric Christopher  %tmp6 = phi i1 [ false, %bb5_1 ], [ %tmp4, %bb2 ]
49cee313d2SEric Christopher  br i1 %tmp6, label %bb8, label %bb7, !prof !0
50cee313d2SEric Christopher
51cee313d2SEric Christopherbb7:
52cee313d2SEric Christopher  call void @bar()
53cee313d2SEric Christopher  br label %bb8
54cee313d2SEric Christopher
55cee313d2SEric Christopherbb8:
56cee313d2SEric Christopher  ret void
57cee313d2SEric Christopher}
58cee313d2SEric Christopher
59cee313d2SEric Christopherdefine void @test_single_pred2() {
60cee313d2SEric Christopher; CHECK-LABEL: @test_single_pred2()
61cee313d2SEric Christopherbb:
62cee313d2SEric Christopher  %tmp = call i32 @a()
63cee313d2SEric Christopher  %tmp1 = icmp eq i32 %tmp, 1
64cee313d2SEric Christopher  br i1 %tmp1, label %bb5_1, label %bb2
65cee313d2SEric Christopher; CHECK: br i1 %tmp1,{{.*}} !prof ![[PROF1:[0-9]+]]
66cee313d2SEric Christopher
67cee313d2SEric Christopherbb5_1:
68cee313d2SEric Christopher  br label %bb5_2;
69cee313d2SEric Christopher
70cee313d2SEric Christopherbb5_2:
71cee313d2SEric Christopher  br label %bb5;
72cee313d2SEric Christopher
73cee313d2SEric Christopherbb2:
74cee313d2SEric Christopher  %tmp3 = call i32 @b()
75cee313d2SEric Christopher  %tmp4 = icmp ne i32 %tmp3, 1
76cee313d2SEric Christopher  br label %bb5
77cee313d2SEric Christopher; CHECK: br i1 %tmp4, {{.*}} !prof ![[PROF2:[0-9]+]]
78cee313d2SEric Christopher
79cee313d2SEric Christopherbb5:
80cee313d2SEric Christopher  %tmp6 = phi i1 [ false, %bb5_2 ], [ %tmp4, %bb2 ]
81cee313d2SEric Christopher  br i1 %tmp6, label %bb8, label %bb7, !prof !0
82cee313d2SEric Christopher
83cee313d2SEric Christopherbb7:
84cee313d2SEric Christopher  call void @bar()
85cee313d2SEric Christopher  br label %bb8
86cee313d2SEric Christopher
87cee313d2SEric Christopherbb8:
88cee313d2SEric Christopher  ret void
89cee313d2SEric Christopher}
90cee313d2SEric Christopher
91cee313d2SEric Christopherdeclare void @bar()
92cee313d2SEric Christopher
93cee313d2SEric Christopherdeclare i32 @a()
94cee313d2SEric Christopher
95cee313d2SEric Christopherdeclare i32 @b()
96cee313d2SEric Christopher
97*5c31b8b9SArthur Eubanks!0 = !{!"branch_weights", i32 2146410443, i32 1073205}
98*5c31b8b9SArthur Eubanks;CHECK: ![[PROF1]] = !{!"branch_weights", i32 1073205, i32 2146410443}
99*5c31b8b9SArthur Eubanks;CHECK: ![[PROF2]] = !{!"branch_weights", i32 2146410443, i32 1073205}
100