Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / global-variable-relocs.ll
blobb8cfcbf2d2665ee1e89454ad420376ec73b99178
1 ; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji < %s | FileCheck %s
3 @private = private addrspace(1) global [256 x i32] zeroinitializer
4 @internal = internal addrspace(1) global [256 x i32] zeroinitializer
5 @available_externally = available_externally addrspace(1) global [256 x i32] zeroinitializer
6 @linkonce = linkonce addrspace(1) global [256 x i32] zeroinitializer
7 @weak= weak addrspace(1) global [256 x i32] zeroinitializer
8 @common = common addrspace(1) global [256 x i32] zeroinitializer
9 @extern_weak = extern_weak addrspace(1) global [256 x i32]
10 @linkonce_odr = linkonce_odr addrspace(1) global [256 x i32] zeroinitializer
11 @weak_odr = weak_odr addrspace(1) global [256 x i32] zeroinitializer
12 @external = external addrspace(1) global [256 x i32]
13 @external_w_init = addrspace(1) global [256 x i32] zeroinitializer
15 ; CHECK-LABEL: private_test:
16 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
17 ; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], private@rel32@lo+8
18 ; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], private@rel32@hi+16
19 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]]
20 define amdgpu_kernel void @private_test(ptr addrspace(1) %out) {
21   %ptr = getelementptr [256 x i32], ptr addrspace(1) @private, i32 0, i32 1
22   %val = load i32, ptr addrspace(1) %ptr
23   store i32 %val, ptr addrspace(1) %out
24   ret void
27 ; CHECK-LABEL: internal_test:
28 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
29 ; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], internal@rel32@lo+8
30 ; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], internal@rel32@hi+16
31 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]]
32 define amdgpu_kernel void @internal_test(ptr addrspace(1) %out) {
33   %ptr = getelementptr [256 x i32], ptr addrspace(1) @internal, i32 0, i32 1
34   %val = load i32, ptr addrspace(1) %ptr
35   store i32 %val, ptr addrspace(1) %out
36   ret void
39 ; CHECK-LABEL: available_externally_test:
40 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
41 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], available_externally@gotpcrel32@lo+4
42 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], available_externally@gotpcrel32@hi+12
43 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
44 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
45 define amdgpu_kernel void @available_externally_test(ptr addrspace(1) %out) {
46   %ptr = getelementptr [256 x i32], ptr addrspace(1) @available_externally, i32 0, i32 1
47   %val = load i32, ptr addrspace(1) %ptr
48   store i32 %val, ptr addrspace(1) %out
49   ret void
52 ; CHECK-LABEL: linkonce_test:
53 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
54 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce@gotpcrel32@lo+4
55 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], linkonce@gotpcrel32@hi+12
56 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
57 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
58 define amdgpu_kernel void @linkonce_test(ptr addrspace(1) %out) {
59   %ptr = getelementptr [256 x i32], ptr addrspace(1) @linkonce, i32 0, i32 1
60   %val = load i32, ptr addrspace(1) %ptr
61   store i32 %val, ptr addrspace(1) %out
62   ret void
65 ; CHECK-LABEL: weak_test:
66 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
67 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak@gotpcrel32@lo+4
68 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], weak@gotpcrel32@hi+12
69 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
70 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
71 define amdgpu_kernel void @weak_test(ptr addrspace(1) %out) {
72   %ptr = getelementptr [256 x i32], ptr addrspace(1) @weak, i32 0, i32 1
73   %val = load i32, ptr addrspace(1) %ptr
74   store i32 %val, ptr addrspace(1) %out
75   ret void
78 ; CHECK-LABEL: common_test:
79 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
80 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], common@gotpcrel32@lo+4
81 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], common@gotpcrel32@hi+12
82 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
83 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
84 define amdgpu_kernel void @common_test(ptr addrspace(1) %out) {
85   %ptr = getelementptr [256 x i32], ptr addrspace(1) @common, i32 0, i32 1
86   %val = load i32, ptr addrspace(1) %ptr
87   store i32 %val, ptr addrspace(1) %out
88   ret void
91 ; CHECK-LABEL: extern_weak_test:
92 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
93 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], extern_weak@gotpcrel32@lo+4
94 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], extern_weak@gotpcrel32@hi+12
95 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
96 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
97 define amdgpu_kernel void @extern_weak_test(ptr addrspace(1) %out) {
98   %ptr = getelementptr [256 x i32], ptr addrspace(1) @extern_weak, i32 0, i32 1
99   %val = load i32, ptr addrspace(1) %ptr
100   store i32 %val, ptr addrspace(1) %out
101   ret void
104 ; CHECK-LABEL: linkonce_odr_test:
105 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
106 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce_odr@gotpcrel32@lo+4
107 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], linkonce_odr@gotpcrel32@hi+12
108 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
109 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
110 define amdgpu_kernel void @linkonce_odr_test(ptr addrspace(1) %out) {
111   %ptr = getelementptr [256 x i32], ptr addrspace(1) @linkonce_odr, i32 0, i32 1
112   %val = load i32, ptr addrspace(1) %ptr
113   store i32 %val, ptr addrspace(1) %out
114   ret void
117 ; CHECK-LABEL: weak_odr_test:
118 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
119 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak_odr@gotpcrel32@lo+4
120 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], weak_odr@gotpcrel32@hi+12
121 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
122 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
123 define amdgpu_kernel void @weak_odr_test(ptr addrspace(1) %out) {
124   %ptr = getelementptr [256 x i32], ptr addrspace(1) @weak_odr, i32 0, i32 1
125   %val = load i32, ptr addrspace(1) %ptr
126   store i32 %val, ptr addrspace(1) %out
127   ret void
130 ; CHECK-LABEL: external_test:
131 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
132 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external@gotpcrel32@lo+4
133 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], external@gotpcrel32@hi+12
134 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
135 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
136 define amdgpu_kernel void @external_test(ptr addrspace(1) %out) {
137   %ptr = getelementptr [256 x i32], ptr addrspace(1) @external, i32 0, i32 1
138   %val = load i32, ptr addrspace(1) %ptr
139   store i32 %val, ptr addrspace(1) %out
140   ret void
143 ; CHECK-LABEL: external_w_init_test:
144 ; CHECK: s_getpc_b64 s[[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]]
145 ; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external_w_init@gotpcrel32@lo+4
146 ; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], external_w_init@gotpcrel32@hi+12
147 ; CHECK: s_load_dwordx2 s[[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]], s[[[GOTADDR_LO]]:[[GOTADDR_HI]]], 0x0
148 ; CHECK: s_load_dword s{{[0-9]+}}, s[[[ADDR_LO]]:[[ADDR_HI]]], 0x4
149 define amdgpu_kernel void @external_w_init_test(ptr addrspace(1) %out) {
150   %ptr = getelementptr [256 x i32], ptr addrspace(1) @external_w_init, i32 0, i32 1
151   %val = load i32, ptr addrspace(1) %ptr
152   store i32 %val, ptr addrspace(1) %out
153   ret void
156 ; CHECK: .local private
157 ; CHECK: .local internal
158 ; CHECK: .weak linkonce
159 ; CHECK: .weak weak
160 ; CHECK: .weak linkonce_odr
161 ; CHECK: .weak weak_odr
162 ; CHECK-NOT: external{{$}}
163 ; CHECK: .globl external_w_init