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