xref: /aosp_15_r20/external/llvm/test/MC/AArch64/elf-globaladdress.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker;; RUN: llc -mtriple=aarch64-none-linux-gnu -filetype=obj %s -o - | \
2*9880d681SAndroid Build Coastguard Worker;; RUN:   llvm-readobj -h -r | FileCheck -check-prefix=OBJ %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Also take it on a round-trip through llvm-mc to stretch assembly-parsing's legs:
5*9880d681SAndroid Build Coastguard Worker;; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - | \
6*9880d681SAndroid Build Coastguard Worker;; RUN:     llvm-mc -triple=arm64-none-linux-gnu -filetype=obj -o - | \
7*9880d681SAndroid Build Coastguard Worker;; RUN:     llvm-readobj -h -r | FileCheck -check-prefix=OBJ %s
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker@var8 = global i8 0
10*9880d681SAndroid Build Coastguard Worker@var16 = global i16 0
11*9880d681SAndroid Build Coastguard Worker@var32 = global i32 0
12*9880d681SAndroid Build Coastguard Worker@var64 = global i64 0
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine void @loadstore() {
15*9880d681SAndroid Build Coastguard Worker    %val8 = load i8, i8* @var8
16*9880d681SAndroid Build Coastguard Worker    store volatile i8 %val8, i8* @var8
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker    %val16 = load i16, i16* @var16
19*9880d681SAndroid Build Coastguard Worker    store volatile i16 %val16, i16* @var16
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker    %val32 = load i32, i32* @var32
22*9880d681SAndroid Build Coastguard Worker    store volatile i32 %val32, i32* @var32
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker    %val64 = load i64, i64* @var64
25*9880d681SAndroid Build Coastguard Worker    store volatile i64 %val64, i64* @var64
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker    ret void
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker@globaddr = global i64* null
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine void @address() {
33*9880d681SAndroid Build Coastguard Worker    store i64* @var64, i64** @globaddr
34*9880d681SAndroid Build Coastguard Worker    ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; Check we're using EM_AARCH64
38*9880d681SAndroid Build Coastguard Worker; OBJ: ElfHeader {
39*9880d681SAndroid Build Coastguard Worker; OBJ:   Machine: EM_AARCH64
40*9880d681SAndroid Build Coastguard Worker; OBJ: }
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; OBJ: Relocations [
43*9880d681SAndroid Build Coastguard Worker; OBJ:   Section {{.*}} .rela.text {
44*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21   var8
45*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_LDST8_ABS_LO12_NC  var8
46*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21   var16
47*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_LDST16_ABS_LO12_NC var16
48*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21   var32
49*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_LDST32_ABS_LO12_NC var32
50*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21   var64
51*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_LDST64_ABS_LO12_NC var64
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; This is on the store, so not really important, but it stops the next
54*9880d681SAndroid Build Coastguard Worker; match working.
55*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_LDST64_ABS_LO12_NC var64
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Pure address-calculation against var64
58*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21   var64
59*9880d681SAndroid Build Coastguard Worker; OBJ:     0x{{[0-9,A-F]+}} R_AARCH64_ADD_ABS_LO12_NC    var64
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; OBJ:   }
62*9880d681SAndroid Build Coastguard Worker; OBJ: ]
63