xref: /llvm-project/llvm/test/CodeGen/PowerPC/branch-hint.ll (revision 65539e3c943704727b5b4cffca8fe0fb4bf0c14d)
1*65539e3cSHal Finkel; RUN: llc < %s -O1 -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -ppc-use-branch-hint=false | FileCheck %s
2*65539e3cSHal Finkel; RUN: llc < %s -O1 -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -ppc-use-branch-hint=true | FileCheck %s -check-prefix=CHECK-HINT
3*65539e3cSHal Finkeldefine void @branch_hint_1(i32 %src) {
4*65539e3cSHal Finkelentry:
5*65539e3cSHal Finkel  %cmp = icmp eq i32 %src, 0
6*65539e3cSHal Finkel  br i1 %cmp, label %if.then, label %if.end
7*65539e3cSHal Finkel
8*65539e3cSHal Finkelif.then:
9*65539e3cSHal Finkel  tail call void @foo() #0
10*65539e3cSHal Finkel  unreachable
11*65539e3cSHal Finkel
12*65539e3cSHal Finkelif.end:
13*65539e3cSHal Finkel  call void @goo()
14*65539e3cSHal Finkel  ret void
15*65539e3cSHal Finkel
16*65539e3cSHal Finkel; CHECK-LABEL: branch_hint_1:
17*65539e3cSHal Finkel; CHECK: beq
18*65539e3cSHal Finkel
19*65539e3cSHal Finkel; CHECK-HINT-LABEL: branch_hint_1:
20*65539e3cSHal Finkel; CHECK-HINT: beq-
21*65539e3cSHal Finkel}
22*65539e3cSHal Finkel
23*65539e3cSHal Finkeldefine void @branch_hint_2(i32 %src) {
24*65539e3cSHal Finkelentry:
25*65539e3cSHal Finkel  %cmp = icmp eq i32 %src, 0
26*65539e3cSHal Finkel  br i1 %cmp, label %if.then, label %if.end
27*65539e3cSHal Finkel
28*65539e3cSHal Finkelif.then:
29*65539e3cSHal Finkel  call void @goo()
30*65539e3cSHal Finkel  ret void
31*65539e3cSHal Finkel
32*65539e3cSHal Finkelif.end:
33*65539e3cSHal Finkel  tail call void @foo() #0
34*65539e3cSHal Finkel  unreachable
35*65539e3cSHal Finkel
36*65539e3cSHal Finkel; CHECK-LABEL: @branch_hint_2
37*65539e3cSHal Finkel; CHECK: bne
38*65539e3cSHal Finkel
39*65539e3cSHal Finkel; CHECK-HINT-LABEL: @branch_hint_2
40*65539e3cSHal Finkel; CHECK-HINT: bne-
41*65539e3cSHal Finkel}
42*65539e3cSHal Finkel
43*65539e3cSHal Finkeldeclare void @foo()
44*65539e3cSHal Finkelattributes #0 = { noreturn }
45*65539e3cSHal Finkel
46*65539e3cSHal Finkeldefine void @branch_hint_3(i32 %src) {
47*65539e3cSHal Finkelentry:
48*65539e3cSHal Finkel  %cmp = icmp eq i32 %src, 0
49*65539e3cSHal Finkel  br i1 %cmp, label %if.then, label %if.end, !prof !0
50*65539e3cSHal Finkel
51*65539e3cSHal Finkelif.then:
52*65539e3cSHal Finkel  call void @foo()
53*65539e3cSHal Finkel  ret void
54*65539e3cSHal Finkel
55*65539e3cSHal Finkelif.end:
56*65539e3cSHal Finkel  call void @goo()
57*65539e3cSHal Finkel  ret void
58*65539e3cSHal Finkel
59*65539e3cSHal Finkel; CHECK-LABEL: @branch_hint_3
60*65539e3cSHal Finkel; CHECK: bne
61*65539e3cSHal Finkel
62*65539e3cSHal Finkel; CHECK-HINT-LABEL: @branch_hint_3
63*65539e3cSHal Finkel; CHECK-HINT: bne
64*65539e3cSHal Finkel}
65*65539e3cSHal Finkel
66*65539e3cSHal Finkel!0 = !{!"branch_weights", i32 64, i32 4}
67*65539e3cSHal Finkel
68*65539e3cSHal Finkeldefine void @branch_hint_4(i32 %src) {
69*65539e3cSHal Finkelentry:
70*65539e3cSHal Finkel  %cmp = icmp eq i32 %src, 0
71*65539e3cSHal Finkel  br i1 %cmp, label %if.then, label %if.end, !prof !1
72*65539e3cSHal Finkel
73*65539e3cSHal Finkelif.then:
74*65539e3cSHal Finkel  call void @foo()
75*65539e3cSHal Finkel  ret void
76*65539e3cSHal Finkel
77*65539e3cSHal Finkelif.end:
78*65539e3cSHal Finkel  call void @goo()
79*65539e3cSHal Finkel  ret void
80*65539e3cSHal Finkel
81*65539e3cSHal Finkel; CHECK-HINT-LABEL: branch_hint_4
82*65539e3cSHal Finkel; CHECK-HINT: bne
83*65539e3cSHal Finkel}
84*65539e3cSHal Finkel
85*65539e3cSHal Finkel!1 = !{!"branch_weights", i32 64, i32 8}
86*65539e3cSHal Finkel
87*65539e3cSHal Finkeldefine void @branch_hint_5(i32 %src) {
88*65539e3cSHal Finkelentry:
89*65539e3cSHal Finkel  %cmp = icmp eq i32 %src, 0
90*65539e3cSHal Finkel  br i1 %cmp, label %if.then, label %if.end
91*65539e3cSHal Finkel
92*65539e3cSHal Finkelif.then:
93*65539e3cSHal Finkel  ret void
94*65539e3cSHal Finkel
95*65539e3cSHal Finkelif.end:
96*65539e3cSHal Finkel  call void @goo()
97*65539e3cSHal Finkel  ret void
98*65539e3cSHal Finkel
99*65539e3cSHal Finkel; CHECK-HINT-LABEL: branch_hint_5:
100*65539e3cSHal Finkel; CHECK-HINT: beq
101*65539e3cSHal Finkel}
102*65539e3cSHal Finkel
103*65539e3cSHal Finkeldeclare void @goo()
104*65539e3cSHal Finkel
105*65539e3cSHal Finkeldefine void @branch_hint_6(i32 %src1, i32 %src2, i32 %src3) {
106*65539e3cSHal Finkelentry:
107*65539e3cSHal Finkel  %cmp = icmp eq i32 %src1, 0
108*65539e3cSHal Finkel  br i1 %cmp, label %if.end.6, label %if.end, !prof !3
109*65539e3cSHal Finkel
110*65539e3cSHal Finkelif.end:
111*65539e3cSHal Finkel  %cmp1 = icmp eq i32 %src2, 0
112*65539e3cSHal Finkel  br i1 %cmp1, label %if.end.3, label %if.then.2
113*65539e3cSHal Finkel
114*65539e3cSHal Finkelif.then.2:
115*65539e3cSHal Finkel  tail call void @foo() #0
116*65539e3cSHal Finkel  unreachable
117*65539e3cSHal Finkel
118*65539e3cSHal Finkelif.end.3:
119*65539e3cSHal Finkel  %cmp4 = icmp eq i32 %src3, 1
120*65539e3cSHal Finkel  br i1 %cmp4, label %if.then.5, label %if.end.6
121*65539e3cSHal Finkel
122*65539e3cSHal Finkelif.then.5:
123*65539e3cSHal Finkel  tail call void @foo() #0
124*65539e3cSHal Finkel  unreachable
125*65539e3cSHal Finkel
126*65539e3cSHal Finkelif.end.6:
127*65539e3cSHal Finkel  ret void
128*65539e3cSHal Finkel
129*65539e3cSHal Finkel; CHECK-HINT-LABEL: branch_hint_6:
130*65539e3cSHal Finkel; CHECK-HINT: bne
131*65539e3cSHal Finkel; CHECK-HINT: bne-
132*65539e3cSHal Finkel; CHECK-HINT: bne+
133*65539e3cSHal Finkel}
134*65539e3cSHal Finkel
135*65539e3cSHal Finkel!3 = !{!"branch_weights", i32 64, i32 4}
136