xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-basic-pic.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-none-linux-gnu -verify-machineinstrs -relocation-model=pic %s -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@var = global i32 0
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine i32 @get_globalvar() {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_globalvar:
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* @var
9*9880d681SAndroid Build Coastguard Worker; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
10*9880d681SAndroid Build Coastguard Worker; CHECK: ldr x[[GOTLOC:[0-9]+]], [x[[GOTHI]], :got_lo12:var]
11*9880d681SAndroid Build Coastguard Worker; CHECK: ldr w0, [x[[GOTLOC]]]
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker  ret i32 %val
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine i32* @get_globalvaraddr() {
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_globalvaraddr:
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* @var
20*9880d681SAndroid Build Coastguard Worker; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
21*9880d681SAndroid Build Coastguard Worker; CHECK: ldr x0, [x[[GOTHI]], :got_lo12:var]
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker  ret i32* @var
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker@hiddenvar = hidden global i32 0
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine i32 @get_hiddenvar() {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_hiddenvar:
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* @hiddenvar
32*9880d681SAndroid Build Coastguard Worker; CHECK: adrp x[[HI:[0-9]+]], hiddenvar
33*9880d681SAndroid Build Coastguard Worker; CHECK: ldr w0, [x[[HI]], :lo12:hiddenvar]
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker  ret i32 %val
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine i32* @get_hiddenvaraddr() {
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_hiddenvaraddr:
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* @hiddenvar
42*9880d681SAndroid Build Coastguard Worker; CHECK: adrp [[HI:x[0-9]+]], hiddenvar
43*9880d681SAndroid Build Coastguard Worker; CHECK: add x0, [[HI]], :lo12:hiddenvar
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  ret i32* @hiddenvar
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine void()* @get_func() {
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_func:
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  ret void()* bitcast(void()*()* @get_func to void()*)
52*9880d681SAndroid Build Coastguard Worker; CHECK: adrp x[[GOTHI:[0-9]+]], :got:get_func
53*9880d681SAndroid Build Coastguard Worker; CHECK: ldr x0, [x[[GOTHI]], :got_lo12:get_func]
54*9880d681SAndroid Build Coastguard Worker}
55