xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/la-02.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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