1 ; RUN: opt -simplifycfg -S -o - < %s | FileCheck %s
3 declare void @helper(i32)
5 define void @test1(i1 %a, i1 %b) {
8 br i1 %a, label %Y, label %X, !prof !0
9 ; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !0
13 br i1 %c, label %Z, label %Y, !prof !1
16 call void @helper(i32 0)
20 call void @helper(i32 1)
24 define void @test2(i1 %a, i1 %b) {
27 br i1 %a, label %X, label %Y, !prof !1
28 ; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !1
33 br i1 %c, label %Z, label %Y, !prof !2
36 call void @helper(i32 0)
40 call void @helper(i32 1)
44 define void @test3(i1 %a, i1 %b) {
48 br i1 %a, label %X, label %Y, !prof !1
52 br i1 %c, label %Z, label %Y
55 call void @helper(i32 0)
59 call void @helper(i32 1)
63 define void @test4(i1 %a, i1 %b) {
67 br i1 %a, label %X, label %Y
71 br i1 %c, label %Z, label %Y, !prof !1
74 call void @helper(i32 0)
78 call void @helper(i32 1)
82 ;; test5 - The case where it jumps to the default target will be removed.
83 define void @test5(i32 %M, i32 %N) nounwind uwtable {
85 switch i32 %N, label %sw2 [
91 ; CHECK: switch i32 %N, label %sw2 [
92 ; CHECK: i32 3, label %sw.bb1
93 ; CHECK: i32 2, label %sw.bb
97 call void @helper(i32 0)
101 call void @helper(i32 1)
105 call void @helper(i32 2)
112 !0 = metadata !{metadata !"branch_weights", i32 3, i32 5}
113 !1 = metadata !{metadata !"branch_weights", i32 1, i32 1}
114 !2 = metadata !{metadata !"branch_weights", i32 1, i32 2}
115 !3 = metadata !{metadata !"branch_weights", i32 4, i32 3, i32 2, i32 1}
117 ; CHECK: !0 = metadata !{metadata !"branch_weights", i32 5, i32 11}
118 ; CHECK: !1 = metadata !{metadata !"branch_weights", i32 1, i32 5}
119 ; CHECK: !2 = metadata !{metadata !"branch_weights", i32 7, i32 1, i32 2}