[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / PowerPC / branch-hint.ll
blob46160507105facb4c81dc3f3360a178762221504
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
8 if.then:
9   tail call void @foo() #0
10   unreachable
12 if.end:
13   call void @goo()
14   ret void
16 ; CHECK-LABEL: branch_hint_1:
17 ; CHECK: beq
19 ; CHECK-HINT-LABEL: branch_hint_1:
20 ; CHECK-HINT: beq-
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
28 if.then:
29   call void @goo()
30   ret void
32 if.end:
33   tail call void @foo() #0
34   unreachable
36 ; CHECK-LABEL: @branch_hint_2
37 ; CHECK: bne
39 ; CHECK-HINT-LABEL: @branch_hint_2
40 ; CHECK-HINT: bne-
43 declare void @foo()
44 attributes #0 = { noreturn }
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
51 if.then:
52   call void @foo()
53   ret void
55 if.end:
56   call void @goo()
57   ret void
59 ; CHECK-LABEL: @branch_hint_3
60 ; CHECK: bne
62 ; CHECK-HINT-LABEL: @branch_hint_3
63 ; CHECK-HINT: bne
66 !0 = !{!"branch_weights", i32 64, i32 4}
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
73 if.then:
74   call void @foo()
75   ret void
77 if.end:
78   call void @goo()
79   ret void
81 ; CHECK-HINT-LABEL: branch_hint_4
82 ; CHECK-HINT: bne
85 !1 = !{!"branch_weights", i32 64, i32 8}
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
92 if.then:
93   ret void
95 if.end:
96   call void @goo()
97   ret void
99 ; CHECK-HINT-LABEL: branch_hint_5:
100 ; CHECK-HINT: beq
103 declare void @goo()
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
110 if.end:
111   %cmp1 = icmp eq i32 %src2, 0
112   br i1 %cmp1, label %if.end.3, label %if.then.2
114 if.then.2:
115   tail call void @foo() #0
116   unreachable
118 if.end.3:
119   %cmp4 = icmp eq i32 %src3, 1
120   br i1 %cmp4, label %if.then.5, label %if.end.6
122 if.then.5:
123   tail call void @foo() #0
124   unreachable
126 if.end.6:
127   ret void
129 ; CHECK-HINT-LABEL: branch_hint_6:
130 ; CHECK-HINT: bne
131 ; CHECK-HINT: bne-
132 ; CHECK-HINT: bne+
135 !3 = !{!"branch_weights", i32 64, i32 4}