Home | History | Annotate | Download | only in SystemZ
      1 ; Test loads of symbolic addresses when generating medium- and
      2 ; large-model non-PIC.
      3 ;
      4 ; RUN: llc < %s -mtriple=s390x-linux-gnu -code-model=medium | FileCheck %s
      5 ; RUN: llc < %s -mtriple=s390x-linux-gnu -code-model=large | FileCheck %s
      6 
      7 @ev = external global i32
      8 @dv = global i32 0
      9 @pv = protected global i32 0
     10 @hv = hidden global i32 0
     11 
     12 declare void @ef()
     13 define void @df() {
     14   ret void
     15 }
     16 define protected void @pf() {
     17   ret void
     18 }
     19 define hidden void @hf() {
     20   ret void
     21 }
     22 
     23 ; Test loads of external variables.  There is no guarantee that the
     24 ; variable will be in range of LARL.
     25 define i32 *@f1() {
     26 ; CHECK-LABEL: f1:
     27 ; CHECK: lgrl %r2, ev@GOT
     28 ; CHECK: br %r14
     29   ret i32 *@ev
     30 }
     31 
     32 ; ...likewise locally-defined normal-visibility variables.
     33 define i32 *@f2() {
     34 ; CHECK-LABEL: f2:
     35 ; CHECK: lgrl %r2, dv@GOT
     36 ; CHECK: br %r14
     37   ret i32 *@dv
     38 }
     39 
     40 ; ...likewise protected variables.
     41 define i32 *@f3() {
     42 ; CHECK-LABEL: f3:
     43 ; CHECK: lgrl %r2, pv@GOT
     44 ; CHECK: br %r14
     45   ret i32 *@pv
     46 }
     47 
     48 ; ...likewise hidden variables.
     49 define i32 *@f4() {
     50 ; CHECK-LABEL: f4:
     51 ; CHECK: lgrl %r2, hv@GOT
     52 ; CHECK: br %r14
     53   ret i32 *@hv
     54 }
     55 
     56 ; Check loads of external functions.  This could use LARL, but we don't have
     57 ; code to detect that yet.
     58 define void() *@f5() {
     59 ; CHECK-LABEL: f5:
     60 ; CHECK: lgrl %r2, ef@GOT
     61 ; CHECK: br %r14
     62   ret void() *@ef
     63 }
     64 
     65 ; ...likewise locally-defined normal-visibility functions.
     66 define void() *@f6() {
     67 ; CHECK-LABEL: f6:
     68 ; CHECK: lgrl %r2, df@GOT
     69 ; CHECK: br %r14
     70   ret void() *@df
     71 }
     72 
     73 ; ...likewise protected functions.
     74 define void() *@f7() {
     75 ; CHECK-LABEL: f7:
     76 ; CHECK: lgrl %r2, pf@GOT
     77 ; CHECK: br %r14
     78   ret void() *@pf
     79 }
     80 
     81 ; ...likewise hidden functions.
     82 define void() *@f8() {
     83 ; CHECK-LABEL: f8:
     84 ; CHECK: lgrl %r2, hf@GOT
     85 ; CHECK: br %r14
     86   ret void() *@hf
     87 }
     88