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