xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/global-variable-relocs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@private = private addrspace(1) global [256 x i32] zeroinitializer
4*9880d681SAndroid Build Coastguard Worker@internal = internal addrspace(1) global [256 x i32] zeroinitializer
5*9880d681SAndroid Build Coastguard Worker@available_externally = available_externally addrspace(1) global [256 x i32] zeroinitializer
6*9880d681SAndroid Build Coastguard Worker@linkonce = linkonce addrspace(1) global [256 x i32] zeroinitializer
7*9880d681SAndroid Build Coastguard Worker@weak= weak addrspace(1) global [256 x i32] zeroinitializer
8*9880d681SAndroid Build Coastguard Worker@common = common addrspace(1) global [256 x i32] zeroinitializer
9*9880d681SAndroid Build Coastguard Worker@extern_weak = extern_weak addrspace(1) global [256 x i32]
10*9880d681SAndroid Build Coastguard Worker@linkonce_odr = linkonce_odr addrspace(1) global [256 x i32] zeroinitializer
11*9880d681SAndroid Build Coastguard Worker@weak_odr = weak_odr addrspace(1) global [256 x i32] zeroinitializer
12*9880d681SAndroid Build Coastguard Worker@external = external addrspace(1) global [256 x i32]
13*9880d681SAndroid Build Coastguard Worker@external_w_init = addrspace(1) global [256 x i32] zeroinitializer
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: private_test:
16*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
17*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], private+8
18*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], 0
19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[ADDR_LO]]
20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[ADDR_HI]]
21*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
22*9880d681SAndroid Build Coastguard Workerdefine void @private_test(i32 addrspace(1)* %out) {
23*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @private, i32 0, i32 1
24*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
25*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
26*9880d681SAndroid Build Coastguard Worker  ret void
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: internal_test:
30*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
31*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], internal+8
32*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], 0
33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[ADDR_LO]]
34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[ADDR_HI]]
35*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
36*9880d681SAndroid Build Coastguard Workerdefine void @internal_test(i32 addrspace(1)* %out) {
37*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @internal, i32 0, i32 1
38*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
39*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
40*9880d681SAndroid Build Coastguard Worker  ret void
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: available_externally_test:
44*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
45*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], available_externally@GOTPCREL+4
46*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
47*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
48*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
49*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
50*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
51*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
52*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
53*9880d681SAndroid Build Coastguard Workerdefine void @available_externally_test(i32 addrspace(1)* %out) {
54*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @available_externally, i32 0, i32 1
55*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
56*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: linkonce_test:
61*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
62*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce@GOTPCREL+4
63*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
64*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
65*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
66*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
67*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
68*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
69*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
70*9880d681SAndroid Build Coastguard Workerdefine void @linkonce_test(i32 addrspace(1)* %out) {
71*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @linkonce, i32 0, i32 1
72*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
73*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
74*9880d681SAndroid Build Coastguard Worker  ret void
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: weak_test:
78*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
79*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak@GOTPCREL+4
80*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
81*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
82*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
83*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
84*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
85*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
86*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
87*9880d681SAndroid Build Coastguard Workerdefine void @weak_test(i32 addrspace(1)* %out) {
88*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @weak, i32 0, i32 1
89*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
90*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
91*9880d681SAndroid Build Coastguard Worker  ret void
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: common_test:
95*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
96*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], common@GOTPCREL+4
97*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
98*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
99*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
100*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
101*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
102*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
103*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
104*9880d681SAndroid Build Coastguard Workerdefine void @common_test(i32 addrspace(1)* %out) {
105*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @common, i32 0, i32 1
106*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
107*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extern_weak_test:
112*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
113*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], extern_weak@GOTPCREL+4
114*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
115*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
116*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
117*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
118*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
119*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
120*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
121*9880d681SAndroid Build Coastguard Workerdefine void @extern_weak_test(i32 addrspace(1)* %out) {
122*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @extern_weak, i32 0, i32 1
123*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
124*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
125*9880d681SAndroid Build Coastguard Worker  ret void
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: linkonce_odr_test:
129*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
130*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce_odr@GOTPCREL+4
131*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
132*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
133*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
134*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
135*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
136*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
137*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
138*9880d681SAndroid Build Coastguard Workerdefine void @linkonce_odr_test(i32 addrspace(1)* %out) {
139*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @linkonce_odr, i32 0, i32 1
140*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
141*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
142*9880d681SAndroid Build Coastguard Worker  ret void
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: weak_odr_test:
146*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
147*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak_odr@GOTPCREL+4
148*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
149*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
150*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
151*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
152*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
153*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
154*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
155*9880d681SAndroid Build Coastguard Workerdefine void @weak_odr_test(i32 addrspace(1)* %out) {
156*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @weak_odr, i32 0, i32 1
157*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
158*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
159*9880d681SAndroid Build Coastguard Worker  ret void
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: external_test:
163*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
164*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external@GOTPCREL+4
165*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
166*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
167*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
168*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
169*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
170*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
171*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
172*9880d681SAndroid Build Coastguard Workerdefine void @external_test(i32 addrspace(1)* %out) {
173*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @external, i32 0, i32 1
174*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
175*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
176*9880d681SAndroid Build Coastguard Worker  ret void
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: external_w_init_test:
180*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
181*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external_w_init@GOTPCREL+4
182*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0
183*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0
184*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4
185*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0
186*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]]
187*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]]
188*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}}
189*9880d681SAndroid Build Coastguard Workerdefine void @external_w_init_test(i32 addrspace(1)* %out) {
190*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @external_w_init, i32 0, i32 1
191*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32 addrspace(1)* %ptr
192*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
193*9880d681SAndroid Build Coastguard Worker  ret void
194*9880d681SAndroid Build Coastguard Worker}
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker; CHECK: .local private
197*9880d681SAndroid Build Coastguard Worker; CHECK: .local internal
198*9880d681SAndroid Build Coastguard Worker; CHECK: .weak linkonce
199*9880d681SAndroid Build Coastguard Worker; CHECK: .weak weak
200*9880d681SAndroid Build Coastguard Worker; CHECK: .weak linkonce_odr
201*9880d681SAndroid Build Coastguard Worker; CHECK: .weak weak_odr
202*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: external{{$}}
203*9880d681SAndroid Build Coastguard Worker; CHECK: .globl external_w_init
204