Add AArch64 as an experimental target.
[oota-llvm.git] / test / MC / AArch64 / elf-globaladdress.ll
1 ;; RUN: llc -march=aarch64 -filetype=obj %s -o - | \
2 ;; RUN:   elf-dump | FileCheck -check-prefix=OBJ %s
3
4 ; Also take it on a round-trip through llvm-mc to stretch assembly-parsing's legs:
5 ;; RUN: llc -march=aarch64 %s -o - | \
6 ;; RUN:     llvm-mc -arch=aarch64 -filetype=obj -o - | \
7 ;; RUN:     elf-dump | FileCheck -check-prefix=OBJ %s
8
9 @var8 = global i8 0
10 @var16 = global i16 0
11 @var32 = global i32 0
12 @var64 = global i64 0
13
14 define void @loadstore() {
15     %val8 = load i8* @var8
16     store volatile i8 %val8, i8* @var8
17
18     %val16 = load i16* @var16
19     store volatile i16 %val16, i16* @var16
20
21     %val32 = load i32* @var32
22     store volatile i32 %val32, i32* @var32
23
24     %val64 = load i64* @var64
25     store volatile i64 %val64, i64* @var64
26
27     ret void
28 }
29
30 @globaddr = global i64* null
31
32 define void @address() {
33     store i64* @var64, i64** @globaddr
34     ret void
35 }
36
37 ; Check we're using EM_AARCH64
38 ; OBJ: 'e_machine', 0x00
39
40 ; OBJ: .rela.text
41
42 ; var8
43 ; R_AARCH64_ADR_PREL_PG_HI21 against var8
44 ; OBJ: 'r_sym', 0x0000000f
45 ; OBJ-NEXT: 'r_type', 0x00000113
46
47 ; R_AARCH64_LDST8_ABS_LO12_NC against var8
48 ; OBJ: 'r_sym', 0x0000000f
49 ; OBJ-NEXT: 'r_type', 0x00000116
50
51
52 ; var16
53 ; R_AARCH64_ADR_PREL_PG_HI21 against var16
54 ; OBJ: 'r_sym', 0x0000000c
55 ; OBJ-NEXT: 'r_type', 0x00000113
56
57 ; R_AARCH64_LDST16_ABS_LO12_NC against var16
58 ; OBJ: 'r_sym', 0x0000000c
59 ; OBJ-NEXT: 'r_type', 0x0000011c
60
61
62 ; var32
63 ; R_AARCH64_ADR_PREL_PG_HI21 against var32
64 ; OBJ: 'r_sym', 0x0000000d
65 ; OBJ-NEXT: 'r_type', 0x00000113
66
67 ; R_AARCH64_LDST32_ABS_LO12_NC against var32
68 ; OBJ: 'r_sym', 0x0000000d
69 ; OBJ-NEXT: 'r_type', 0x0000011d
70
71
72 ; var64
73 ; R_AARCH64_ADR_PREL_PG_HI21 against var64
74 ; OBJ: 'r_sym', 0x0000000e
75 ; OBJ-NEXT: 'r_type', 0x00000113
76
77 ; R_AARCH64_LDST64_ABS_LO12_NC against var64
78 ; OBJ: 'r_sym', 0x0000000e
79 ; OBJ-NEXT: 'r_type', 0x0000011e
80
81 ; This is on the store, so not really important, but it stops the next
82 ; match working.
83 ; R_AARCH64_LDST64_ABS_LO12_NC against var64
84 ; OBJ: 'r_sym', 0x0000000e
85 ; OBJ-NEXT: 'r_type', 0x0000011e
86
87
88 ; Pure address-calculation against var64
89 ; R_AARCH64_ADR_PREL_PG_HI21 against var64
90 ; OBJ: 'r_sym', 0x0000000e
91 ; OBJ-NEXT: 'r_type', 0x00000113
92
93 ; R_AARCH64_ADD_ABS_LO12_NC against var64
94 ; OBJ: 'r_sym', 0x0000000e
95 ; OBJ-NEXT: 'r_type', 0x00000115
96
97
98 ; Make sure the symbols don't move around, otherwise relocation info
99 ; will be wrong:
100
101 ; OBJ: Symbol 12
102 ; OBJ-NEXT: var16
103
104 ; OBJ: Symbol 13
105 ; OBJ-NEXT: var32
106
107 ; OBJ: Symbol 14
108 ; OBJ-NEXT: var64
109
110 ; OBJ: Symbol 15
111 ; OBJ-NEXT: var8