• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -simplifycfg -S -o - < %s | FileCheck %s
2
3declare void @helper(i32)
4
5define void @test1(i1 %a, i1 %b) {
6; CHECK: @test1
7entry:
8  br i1 %a, label %Y, label %X, !prof !0
9; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !0
10
11X:
12  %c = or i1 %b, false
13  br i1 %c, label %Z, label %Y, !prof !1
14
15Y:
16  call void @helper(i32 0)
17  ret void
18
19Z:
20  call void @helper(i32 1)
21  ret void
22}
23
24define void @test2(i1 %a, i1 %b) {
25; CHECK: @test2
26entry:
27  br i1 %a, label %X, label %Y, !prof !1
28; CHECK: br i1 %or.cond, label %Z, label %Y, !prof !1
29; CHECK-NOT: !prof
30
31X:
32  %c = or i1 %b, false
33  br i1 %c, label %Z, label %Y, !prof !2
34
35Y:
36  call void @helper(i32 0)
37  ret void
38
39Z:
40  call void @helper(i32 1)
41  ret void
42}
43
44define void @test3(i1 %a, i1 %b) {
45; CHECK: @test3
46; CHECK-NOT: !prof
47entry:
48  br i1 %a, label %X, label %Y, !prof !1
49
50X:
51  %c = or i1 %b, false
52  br i1 %c, label %Z, label %Y
53
54Y:
55  call void @helper(i32 0)
56  ret void
57
58Z:
59  call void @helper(i32 1)
60  ret void
61}
62
63define void @test4(i1 %a, i1 %b) {
64; CHECK: @test4
65; CHECK-NOT: !prof
66entry:
67  br i1 %a, label %X, label %Y
68
69X:
70  %c = or i1 %b, false
71  br i1 %c, label %Z, label %Y, !prof !1
72
73Y:
74  call void @helper(i32 0)
75  ret void
76
77Z:
78  call void @helper(i32 1)
79  ret void
80}
81
82!0 = metadata !{metadata !"branch_weights", i32 3, i32 5}
83!1 = metadata !{metadata !"branch_weights", i32 1, i32 1}
84!2 = metadata !{metadata !"branch_weights", i32 1, i32 2}
85
86; CHECK: !0 = metadata !{metadata !"branch_weights", i32 5, i32 11}
87; CHECK: !1 = metadata !{metadata !"branch_weights", i32 1, i32 5}
88; CHECK-NOT: !2
89