Home | History | Annotate | Download | only in PowerPC
      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