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