136 lines
2.4 KiB
LLVM
136 lines
2.4 KiB
LLVM
; 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}
|