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 7 8 if.then: 9 tail call void @foo() #0 10 unreachable 11 12 if.end: 13 call void @goo() 14 ret void 15 16 ; CHECK-LABEL: branch_hint_1: 17 ; CHECK: beq 18 19 ; CHECK-HINT-LABEL: branch_hint_1: 20 ; CHECK-HINT: beq- 21 } 22 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 27 28 if.then: 29 call void @goo() 30 ret void 31 32 if.end: 33 tail call void @foo() #0 34 unreachable 35 36 ; CHECK-LABEL: @branch_hint_2 37 ; CHECK: bne 38 39 ; CHECK-HINT-LABEL: @branch_hint_2 40 ; CHECK-HINT: bne- 41 } 42 43 declare void @foo() 44 attributes #0 = { noreturn } 45 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 50 51 if.then: 52 call void @foo() 53 ret void 54 55 if.end: 56 call void @goo() 57 ret void 58 59 ; CHECK-LABEL: @branch_hint_3 60 ; CHECK: bne 61 62 ; CHECK-HINT-LABEL: @branch_hint_3 63 ; CHECK-HINT: bne 64 } 65 66 !0 = !{!"branch_weights", i32 64, i32 4} 67 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 72 73 if.then: 74 call void @foo() 75 ret void 76 77 if.end: 78 call void @goo() 79 ret void 80 81 ; CHECK-HINT-LABEL: branch_hint_4 82 ; CHECK-HINT: bne 83 } 84 85 !1 = !{!"branch_weights", i32 64, i32 8} 86 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 91 92 if.then: 93 ret void 94 95 if.end: 96 call void @goo() 97 ret void 98 99 ; CHECK-HINT-LABEL: branch_hint_5: 100 ; CHECK-HINT: beq 101 } 102 103 declare void @goo() 104 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 109 110 if.end: 111 %cmp1 = icmp eq i32 %src2, 0 112 br i1 %cmp1, label %if.end.3, label %if.then.2 113 114 if.then.2: 115 tail call void @foo() #0 116 unreachable 117 118 if.end.3: 119 %cmp4 = icmp eq i32 %src3, 1 120 br i1 %cmp4, label %if.then.5, label %if.end.6 121 122 if.then.5: 123 tail call void @foo() #0 124 unreachable 125 126 if.end.6: 127 ret void 128 129 ; CHECK-HINT-LABEL: branch_hint_6: 130 ; CHECK-HINT: bne 131 ; CHECK-HINT: bne- 132 ; CHECK-HINT: bne+ 133 } 134 135 !3 = !{!"branch_weights", i32 64, i32 4} 136