Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc < %s -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s
      2 ; RUN: llc < %s -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 | FileCheck %s
      3 ; RUN: llc < %s -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 | FileCheck %s
      4 ; RUN: llc < %s -relocation-model=pic -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s
      5 ; RUN: llc < %s -function-sections -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s -check-prefix=CHECK-FS
      6 ; RUN: llc < %s -relocation-model=pic -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s
      7 ; RUN: llc < %s -function-sections -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s -check-prefix=CHECK-FS
      8 ; RUN: llc < %s -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
      9 ; RUN: -code-model=small -mcpu=pwr8 | FileCheck %s -check-prefix=SCM
     10 
     11 %class.T = type { [2 x i8] }
     12 
     13 define void @e_callee(%class.T* %this, i8* %c) { ret void }
     14 define void @e_caller(%class.T* %this, i8* %c) {
     15   call void @e_callee(%class.T* %this, i8* %c)
     16   ret void
     17 
     18 ; CHECK-LABEL: e_caller:
     19 ; CHECK: bl e_callee
     20 ; CHECK-NEXT: nop
     21 
     22 ; CHECK-FS-LABEL: e_caller:
     23 ; CHECK-FS: bl e_callee
     24 ; CHECK-FS-NEXT: nop
     25 }
     26 
     27 define void @e_scallee(%class.T* %this, i8* %c) section "different" { ret void }
     28 define void @e_scaller(%class.T* %this, i8* %c) {
     29   call void @e_scallee(%class.T* %this, i8* %c)
     30   ret void
     31 
     32 ; CHECK-LABEL: e_scaller:
     33 ; CHECK: bl e_scallee
     34 ; CHECK-NEXT: nop
     35 }
     36 
     37 define void @e_s2callee(%class.T* %this, i8* %c) { ret void }
     38 define void @e_s2caller(%class.T* %this, i8* %c) section "different" {
     39   call void @e_s2callee(%class.T* %this, i8* %c)
     40   ret void
     41 
     42 ; CHECK-LABEL: e_s2caller:
     43 ; CHECK: bl e_s2callee
     44 ; CHECK-NEXT: nop
     45 }
     46 
     47 $cd1 = comdat any
     48 $cd2 = comdat any
     49 
     50 define void @e_ccallee(%class.T* %this, i8* %c) comdat($cd1) { ret void }
     51 define void @e_ccaller(%class.T* %this, i8* %c) comdat($cd2) {
     52   call void @e_ccallee(%class.T* %this, i8* %c)
     53   ret void
     54 
     55 ; CHECK-LABEL: e_ccaller:
     56 ; CHECK: bl e_ccallee
     57 ; CHECK-NEXT: nop
     58 }
     59 
     60 $cd = comdat any
     61 
     62 define void @e_c1callee(%class.T* %this, i8* %c) comdat($cd) { ret void }
     63 define void @e_c1caller(%class.T* %this, i8* %c) comdat($cd) {
     64   call void @e_c1callee(%class.T* %this, i8* %c)
     65   ret void
     66 
     67 ; CHECK-LABEL: e_c1caller:
     68 ; CHECK: bl e_c1callee
     69 ; CHECK-NEXT: nop
     70 }
     71 
     72 define weak_odr hidden void @wo_hcallee(%class.T* %this, i8* %c) { ret void }
     73 define void @wo_hcaller(%class.T* %this, i8* %c) {
     74   call void @wo_hcallee(%class.T* %this, i8* %c)
     75   ret void
     76 
     77 ; CHECK-LABEL: wo_hcaller:
     78 ; CHECK: bl wo_hcallee
     79 ; CHECK-NOT: nop
     80 
     81 ; SCM-LABEL: wo_hcaller:
     82 ; SCM:       bl wo_hcallee
     83 ; SCM-NEXT:  nop
     84 }
     85 
     86 define weak_odr protected void @wo_pcallee(%class.T* %this, i8* %c) { ret void }
     87 define void @wo_pcaller(%class.T* %this, i8* %c) {
     88   call void @wo_pcallee(%class.T* %this, i8* %c)
     89   ret void
     90 
     91 ; CHECK-LABEL: wo_pcaller:
     92 ; CHECK: bl wo_pcallee
     93 ; CHECK-NOT: nop
     94 
     95 ; SCM-LABEL:   wo_pcaller:
     96 ; SCM:         bl wo_pcallee
     97 ; SCM-NEXT:    nop
     98 }
     99 
    100 define weak_odr void @wo_callee(%class.T* %this, i8* %c) { ret void }
    101 define void @wo_caller(%class.T* %this, i8* %c) {
    102   call void @wo_callee(%class.T* %this, i8* %c)
    103   ret void
    104 
    105 ; CHECK-LABEL: wo_caller:
    106 ; CHECK: bl wo_callee
    107 ; CHECK-NEXT: nop
    108 }
    109 
    110 define weak protected void @w_pcallee(i8* %ptr) { ret void }
    111 define void @w_pcaller(i8* %ptr) {
    112   call void @w_pcallee(i8* %ptr)
    113   ret void
    114 
    115 ; CHECK-LABEL: w_pcaller:
    116 ; CHECK: bl w_pcallee
    117 ; CHECK-NOT: nop
    118 
    119 ; SCM-LABEL: w_pcaller:
    120 ; SCM:       bl w_pcallee
    121 ; SCM-NEXT:  nop
    122 }
    123 
    124 define weak hidden void @w_hcallee(i8* %ptr) { ret void }
    125 define void @w_hcaller(i8* %ptr) {
    126   call void @w_hcallee(i8* %ptr)
    127   ret void
    128 
    129 ; CHECK-LABEL: w_hcaller:
    130 ; CHECK: bl w_hcallee
    131 ; CHECK-NOT: nop
    132 
    133 ; SCM-LABEL: w_hcaller:
    134 ; SCM:       bl w_hcallee
    135 ; SCM-NEXT:  nop
    136 }
    137 
    138 define weak void @w_callee(i8* %ptr) { ret void }
    139 define void @w_caller(i8* %ptr) {
    140   call void @w_callee(i8* %ptr)
    141   ret void
    142 
    143 ; CHECK-LABEL: w_caller:
    144 ; CHECK: bl w_callee
    145 ; CHECK-NEXT: nop
    146 }
    147 
    148