[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fast-unaligned-load-store.global.ll
blob2456da6218773772743d670c754d0fc19b882699
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -mattr=-unaligned-access-mode < %s | FileCheck --check-prefix=GFX7-ALIGNED %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX7-UNALIGNED %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX9 %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX10 %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+unaligned-access-mode < %s | FileCheck --check-prefix=GFX11 %s
8 ; Should not merge this to a dword load
9 define i32 @global_load_2xi16_align2(ptr addrspace(1) %p) #0 {
10 ; GFX7-ALIGNED-LABEL: global_load_2xi16_align2:
11 ; GFX7-ALIGNED:       ; %bb.0:
12 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13 ; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v0
14 ; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
15 ; GFX7-ALIGNED-NEXT:    flat_load_ushort v2, v[2:3]
16 ; GFX7-ALIGNED-NEXT:    flat_load_ushort v0, v[0:1]
17 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)
18 ; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
19 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)
20 ; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v1
21 ; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]
23 ; GFX7-UNALIGNED-LABEL: global_load_2xi16_align2:
24 ; GFX7-UNALIGNED:       ; %bb.0:
25 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26 ; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]
27 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)
28 ; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]
30 ; GFX9-LABEL: global_load_2xi16_align2:
31 ; GFX9:       ; %bb.0:
32 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
34 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
35 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
37 ; GFX10-LABEL: global_load_2xi16_align2:
38 ; GFX10:       ; %bb.0:
39 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
41 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
42 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
44 ; GFX11-LABEL: global_load_2xi16_align2:
45 ; GFX11:       ; %bb.0:
46 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
48 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
49 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
50   %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 1
51   %p.0 = load i16, ptr addrspace(1) %p, align 2
52   %p.1 = load i16, ptr addrspace(1) %gep.p, align 2
53   %zext.0 = zext i16 %p.0 to i32
54   %zext.1 = zext i16 %p.1 to i32
55   %shl.1 = shl i32 %zext.1, 16
56   %or = or i32 %zext.0, %shl.1
57   ret i32 %or
60 ; Should not merge this to a dword store
61 define amdgpu_kernel void @global_store_2xi16_align2(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {
62 ; GFX7-ALIGNED-LABEL: global_store_2xi16_align2:
63 ; GFX7-ALIGNED:       ; %bb.0:
64 ; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
65 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 1
66 ; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
67 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0
68 ; GFX7-ALIGNED-NEXT:    s_add_u32 s2, s0, 2
69 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1
70 ; GFX7-ALIGNED-NEXT:    s_addc_u32 s3, s1, 0
71 ; GFX7-ALIGNED-NEXT:    flat_store_short v[0:1], v2
72 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s2
73 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 2
74 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s3
75 ; GFX7-ALIGNED-NEXT:    flat_store_short v[0:1], v2
76 ; GFX7-ALIGNED-NEXT:    s_endpgm
78 ; GFX7-UNALIGNED-LABEL: global_store_2xi16_align2:
79 ; GFX7-UNALIGNED:       ; %bb.0:
80 ; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
81 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001
82 ; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
83 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0
84 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1
85 ; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2
86 ; GFX7-UNALIGNED-NEXT:    s_endpgm
88 ; GFX9-LABEL: global_store_2xi16_align2:
89 ; GFX9:       ; %bb.0:
90 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
91 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
92 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001
93 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
94 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
95 ; GFX9-NEXT:    s_endpgm
97 ; GFX10-LABEL: global_store_2xi16_align2:
98 ; GFX10:       ; %bb.0:
99 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
100 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
101 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001
102 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
103 ; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]
104 ; GFX10-NEXT:    s_endpgm
106 ; GFX11-LABEL: global_store_2xi16_align2:
107 ; GFX11:       ; %bb.0:
108 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
109 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001
110 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
111 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
112 ; GFX11-NEXT:    s_nop 0
113 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
114 ; GFX11-NEXT:    s_endpgm
115   %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1
116   store i16 1, ptr addrspace(1) %r, align 2
117   store i16 2, ptr addrspace(1) %gep.r, align 2
118   ret void
121 ; Should produce align 1 dword when legal
122 define i32 @global_load_2xi16_align1(ptr addrspace(1) %p) #0 {
123 ; GFX7-ALIGNED-LABEL: global_load_2xi16_align1:
124 ; GFX7-ALIGNED:       ; %bb.0:
125 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v2, vcc, 2, v0
127 ; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
128 ; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v4, vcc, 1, v0
129 ; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
130 ; GFX7-ALIGNED-NEXT:    v_add_i32_e32 v6, vcc, 3, v0
131 ; GFX7-ALIGNED-NEXT:    v_addc_u32_e32 v7, vcc, 0, v1, vcc
132 ; GFX7-ALIGNED-NEXT:    flat_load_ubyte v6, v[6:7]
133 ; GFX7-ALIGNED-NEXT:    flat_load_ubyte v4, v[4:5]
134 ; GFX7-ALIGNED-NEXT:    flat_load_ubyte v2, v[2:3]
135 ; GFX7-ALIGNED-NEXT:    flat_load_ubyte v0, v[0:1]
136 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(3)
137 ; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v3, 24, v6
138 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(2)
139 ; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v1, 8, v4
140 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(1)
141 ; GFX7-ALIGNED-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
142 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)
143 ; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v1, v0
144 ; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v1, v3, v2
145 ; GFX7-ALIGNED-NEXT:    v_or_b32_e32 v0, v0, v1
146 ; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]
148 ; GFX7-UNALIGNED-LABEL: global_load_2xi16_align1:
149 ; GFX7-UNALIGNED:       ; %bb.0:
150 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
151 ; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]
152 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)
153 ; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]
155 ; GFX9-LABEL: global_load_2xi16_align1:
156 ; GFX9:       ; %bb.0:
157 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
158 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
159 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
160 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
162 ; GFX10-LABEL: global_load_2xi16_align1:
163 ; GFX10:       ; %bb.0:
164 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
165 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
166 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
167 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
169 ; GFX11-LABEL: global_load_2xi16_align1:
170 ; GFX11:       ; %bb.0:
171 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
172 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
173 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
174 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
175   %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 1
176   %p.0 = load i16, ptr addrspace(1) %p, align 1
177   %p.1 = load i16, ptr addrspace(1) %gep.p, align 1
178   %zext.0 = zext i16 %p.0 to i32
179   %zext.1 = zext i16 %p.1 to i32
180   %shl.1 = shl i32 %zext.1, 16
181   %or = or i32 %zext.0, %shl.1
182   ret i32 %or
185 ; Should produce align 1 dword when legal
186 define amdgpu_kernel void @global_store_2xi16_align1(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {
187 ; GFX7-ALIGNED-LABEL: global_store_2xi16_align1:
188 ; GFX7-ALIGNED:       ; %bb.0:
189 ; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
190 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 1
191 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v3, 0
192 ; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
193 ; GFX7-ALIGNED-NEXT:    s_add_u32 s2, s0, 2
194 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0
195 ; GFX7-ALIGNED-NEXT:    s_addc_u32 s3, s1, 0
196 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1
197 ; GFX7-ALIGNED-NEXT:    s_add_u32 s4, s0, 1
198 ; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v2
199 ; GFX7-ALIGNED-NEXT:    s_addc_u32 s5, s1, 0
200 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s4
201 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s5
202 ; GFX7-ALIGNED-NEXT:    s_add_u32 s0, s0, 3
203 ; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v3
204 ; GFX7-ALIGNED-NEXT:    s_addc_u32 s1, s1, 0
205 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0
206 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1
207 ; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v3
208 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s2
209 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 2
210 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s3
211 ; GFX7-ALIGNED-NEXT:    flat_store_byte v[0:1], v2
212 ; GFX7-ALIGNED-NEXT:    s_endpgm
214 ; GFX7-UNALIGNED-LABEL: global_store_2xi16_align1:
215 ; GFX7-UNALIGNED:       ; %bb.0:
216 ; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
217 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001
218 ; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
219 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0
220 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1
221 ; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2
222 ; GFX7-UNALIGNED-NEXT:    s_endpgm
224 ; GFX9-LABEL: global_store_2xi16_align1:
225 ; GFX9:       ; %bb.0:
226 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
227 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
228 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001
229 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
230 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
231 ; GFX9-NEXT:    s_endpgm
233 ; GFX10-LABEL: global_store_2xi16_align1:
234 ; GFX10:       ; %bb.0:
235 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
236 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
237 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001
238 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
239 ; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]
240 ; GFX10-NEXT:    s_endpgm
242 ; GFX11-LABEL: global_store_2xi16_align1:
243 ; GFX11:       ; %bb.0:
244 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
245 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001
246 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
247 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
248 ; GFX11-NEXT:    s_nop 0
249 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
250 ; GFX11-NEXT:    s_endpgm
251   %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1
252   store i16 1, ptr addrspace(1) %r, align 1
253   store i16 2, ptr addrspace(1) %gep.r, align 1
254   ret void
257 ; Should merge this to a dword load
258 define i32 @global_load_2xi16_align4(ptr addrspace(1) %p) #0 {
259 ; GFX7-ALIGNED-LABEL: global_load_2xi16_align4:
260 ; GFX7-ALIGNED:       ; %bb.0:
261 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262 ; GFX7-ALIGNED-NEXT:    flat_load_dword v0, v[0:1]
263 ; GFX7-ALIGNED-NEXT:    s_waitcnt vmcnt(0)
264 ; GFX7-ALIGNED-NEXT:    s_setpc_b64 s[30:31]
266 ; GFX7-UNALIGNED-LABEL: global_load_2xi16_align4:
267 ; GFX7-UNALIGNED:       ; %bb.0:
268 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
269 ; GFX7-UNALIGNED-NEXT:    flat_load_dword v0, v[0:1]
270 ; GFX7-UNALIGNED-NEXT:    s_waitcnt vmcnt(0)
271 ; GFX7-UNALIGNED-NEXT:    s_setpc_b64 s[30:31]
273 ; GFX9-LABEL: global_load_2xi16_align4:
274 ; GFX9:       ; %bb.0:
275 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
276 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
277 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
278 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
280 ; GFX10-LABEL: global_load_2xi16_align4:
281 ; GFX10:       ; %bb.0:
282 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
283 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
284 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
285 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
287 ; GFX11-LABEL: global_load_2xi16_align4:
288 ; GFX11:       ; %bb.0:
289 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
290 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
291 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
292 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
293   %gep.p = getelementptr i16, ptr addrspace(1) %p, i64 1
294   %p.0 = load i16, ptr addrspace(1) %p, align 4
295   %p.1 = load i16, ptr addrspace(1) %gep.p, align 2
296   %zext.0 = zext i16 %p.0 to i32
297   %zext.1 = zext i16 %p.1 to i32
298   %shl.1 = shl i32 %zext.1, 16
299   %or = or i32 %zext.0, %shl.1
300   ret i32 %or
303 ; Should merge this to a dword store
304 define amdgpu_kernel void @global_store_2xi16_align4(ptr addrspace(1) %p, ptr addrspace(1) %r) #0 {
305 ; GFX7-ALIGNED-LABEL: global_store_2xi16_align4:
306 ; GFX7-ALIGNED:       ; %bb.0:
307 ; GFX7-ALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
308 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001
309 ; GFX7-ALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
310 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v0, s0
311 ; GFX7-ALIGNED-NEXT:    v_mov_b32_e32 v1, s1
312 ; GFX7-ALIGNED-NEXT:    flat_store_dword v[0:1], v2
313 ; GFX7-ALIGNED-NEXT:    s_endpgm
315 ; GFX7-UNALIGNED-LABEL: global_store_2xi16_align4:
316 ; GFX7-UNALIGNED:       ; %bb.0:
317 ; GFX7-UNALIGNED-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
318 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v2, 0x20001
319 ; GFX7-UNALIGNED-NEXT:    s_waitcnt lgkmcnt(0)
320 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v0, s0
321 ; GFX7-UNALIGNED-NEXT:    v_mov_b32_e32 v1, s1
322 ; GFX7-UNALIGNED-NEXT:    flat_store_dword v[0:1], v2
323 ; GFX7-UNALIGNED-NEXT:    s_endpgm
325 ; GFX9-LABEL: global_store_2xi16_align4:
326 ; GFX9:       ; %bb.0:
327 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
328 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
329 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x20001
330 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
331 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
332 ; GFX9-NEXT:    s_endpgm
334 ; GFX10-LABEL: global_store_2xi16_align4:
335 ; GFX10:       ; %bb.0:
336 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
337 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
338 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x20001
339 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
340 ; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]
341 ; GFX10-NEXT:    s_endpgm
343 ; GFX11-LABEL: global_store_2xi16_align4:
344 ; GFX11:       ; %bb.0:
345 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
346 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x20001
347 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
348 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
349 ; GFX11-NEXT:    s_nop 0
350 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
351 ; GFX11-NEXT:    s_endpgm
352   %gep.r = getelementptr i16, ptr addrspace(1) %r, i64 1
353   store i16 1, ptr addrspace(1) %r, align 4
354   store i16 2, ptr addrspace(1) %gep.r, align 2
355   ret void