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