|  | ; RUN: llc < %s -O1 -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -ppc-use-branch-hint=false | FileCheck %s | 
|  | ; RUN: llc < %s -O1 -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -ppc-use-branch-hint=true | FileCheck %s -check-prefix=CHECK-HINT | 
|  | define void @branch_hint_1(i32 %src) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src, 0 | 
|  | br i1 %cmp, label %if.then, label %if.end | 
|  |  | 
|  | if.then: | 
|  | tail call void @foo() #0 | 
|  | unreachable | 
|  |  | 
|  | if.end: | 
|  | call void @goo() | 
|  | ret void | 
|  |  | 
|  | ; CHECK-LABEL: branch_hint_1: | 
|  | ; CHECK: beq | 
|  |  | 
|  | ; CHECK-HINT-LABEL: branch_hint_1: | 
|  | ; CHECK-HINT: beq- | 
|  | } | 
|  |  | 
|  | define void @branch_hint_2(i32 %src) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src, 0 | 
|  | br i1 %cmp, label %if.then, label %if.end | 
|  |  | 
|  | if.then: | 
|  | call void @goo() | 
|  | ret void | 
|  |  | 
|  | if.end: | 
|  | tail call void @foo() #0 | 
|  | unreachable | 
|  |  | 
|  | ; CHECK-LABEL: @branch_hint_2 | 
|  | ; CHECK: bne | 
|  |  | 
|  | ; CHECK-HINT-LABEL: @branch_hint_2 | 
|  | ; CHECK-HINT: bne- | 
|  | } | 
|  |  | 
|  | declare void @foo() | 
|  | attributes #0 = { noreturn } | 
|  |  | 
|  | define void @branch_hint_3(i32 %src) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src, 0 | 
|  | br i1 %cmp, label %if.then, label %if.end, !prof !0 | 
|  |  | 
|  | if.then: | 
|  | call void @foo() | 
|  | ret void | 
|  |  | 
|  | if.end: | 
|  | call void @goo() | 
|  | ret void | 
|  |  | 
|  | ; CHECK-LABEL: @branch_hint_3 | 
|  | ; CHECK: bne | 
|  |  | 
|  | ; CHECK-HINT-LABEL: @branch_hint_3 | 
|  | ; CHECK-HINT: bne | 
|  | } | 
|  |  | 
|  | !0 = !{!"branch_weights", i32 64, i32 4} | 
|  |  | 
|  | define void @branch_hint_4(i32 %src) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src, 0 | 
|  | br i1 %cmp, label %if.then, label %if.end, !prof !1 | 
|  |  | 
|  | if.then: | 
|  | call void @foo() | 
|  | ret void | 
|  |  | 
|  | if.end: | 
|  | call void @goo() | 
|  | ret void | 
|  |  | 
|  | ; CHECK-HINT-LABEL: branch_hint_4 | 
|  | ; CHECK-HINT: bne | 
|  | } | 
|  |  | 
|  | !1 = !{!"branch_weights", i32 64, i32 8} | 
|  |  | 
|  | define void @branch_hint_5(i32 %src) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src, 0 | 
|  | br i1 %cmp, label %if.then, label %if.end | 
|  |  | 
|  | if.then: | 
|  | ret void | 
|  |  | 
|  | if.end: | 
|  | call void @goo() | 
|  | ret void | 
|  |  | 
|  | ; CHECK-HINT-LABEL: branch_hint_5: | 
|  | ; CHECK-HINT: beq | 
|  | } | 
|  |  | 
|  | declare void @goo() | 
|  |  | 
|  | define void @branch_hint_6(i32 %src1, i32 %src2, i32 %src3) { | 
|  | entry: | 
|  | %cmp = icmp eq i32 %src1, 0 | 
|  | br i1 %cmp, label %if.end.6, label %if.end, !prof !3 | 
|  |  | 
|  | if.end: | 
|  | %cmp1 = icmp eq i32 %src2, 0 | 
|  | br i1 %cmp1, label %if.end.3, label %if.then.2 | 
|  |  | 
|  | if.then.2: | 
|  | tail call void @foo() #0 | 
|  | unreachable | 
|  |  | 
|  | if.end.3: | 
|  | %cmp4 = icmp eq i32 %src3, 1 | 
|  | br i1 %cmp4, label %if.then.5, label %if.end.6 | 
|  |  | 
|  | if.then.5: | 
|  | tail call void @foo() #0 | 
|  | unreachable | 
|  |  | 
|  | if.end.6: | 
|  | ret void | 
|  |  | 
|  | ; CHECK-HINT-LABEL: branch_hint_6: | 
|  | ; CHECK-HINT: bne | 
|  | ; CHECK-HINT: bne- | 
|  | ; CHECK-HINT: bne+ | 
|  | } | 
|  |  | 
|  | !3 = !{!"branch_weights", i32 64, i32 4} |