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