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