; Test loads of symbolic addresses in PIC code. ; ; RUN: llc < %s -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck %s @ev = external global i32 @dv = global i32 0 @pv = protected global i32 0 @hv = hidden global i32 0 declare void @ef() define void @df() { ret void } define protected void @pf() { ret void } define hidden void @hf() { ret void } ; Test loads of external variables, which must go via the GOT. define ptr@f1() { ; CHECK-LABEL: f1: ; CHECK: lgrl %r2, ev@GOT ; CHECK: br %r14 ret ptr@ev } ; Check loads of locally-defined normal-visibility variables, which might ; be overridden. The load must go via the GOT. define ptr@f2() { ; CHECK-LABEL: f2: ; CHECK: lgrl %r2, dv@GOT ; CHECK: br %r14 ret ptr@dv } ; Check loads of protected variables, which in the small code model ; must be in range of LARL. define ptr@f3() { ; CHECK-LABEL: f3: ; CHECK: larl %r2, pv ; CHECK: br %r14 ret ptr@pv } ; ...likewise hidden variables. define ptr@f4() { ; CHECK-LABEL: f4: ; CHECK: larl %r2, hv ; CHECK: br %r14 ret ptr@hv } ; Like f1, but for functions. define ptr@f5() { ; CHECK-LABEL: f5: ; CHECK: lgrl %r2, ef@GOT ; CHECK: br %r14 ret ptr@ef } ; Like f2, but for functions. define ptr@f6() { ; CHECK-LABEL: f6: ; CHECK: lgrl %r2, df@GOT ; CHECK: br %r14 ret ptr@df } ; Like f3, but for functions. define ptr@f7() { ; CHECK-LABEL: f7: ; CHECK: larl %r2, pf ; CHECK: br %r14 ret ptr@pf } ; Like f4, but for functions. define ptr@f8() { ; CHECK-LABEL: f8: ; CHECK: larl %r2, hf ; CHECK: br %r14 ret ptr@hf }