Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / load-local.128.ll
blobfef672570352c37c8143ab24e4b296cf4259cd7d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=hawaii -verify-machineinstrs < %s | FileCheck --check-prefix=GFX7 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX10 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX11 %s
7 ; FIXME:
8 ; XUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=tahiti -verify-machineinstrs < %s | FileCheck --check-prefix=GFX6 %s
10 define <4 x i32> @load_lds_v4i32(ptr addrspace(3) %ptr) {
11 ; GFX9-LABEL: load_lds_v4i32:
12 ; GFX9:       ; %bb.0:
13 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14 ; GFX9-NEXT:    ds_read_b128 v[0:3], v0
15 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
16 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
18 ; GFX7-LABEL: load_lds_v4i32:
19 ; GFX7:       ; %bb.0:
20 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21 ; GFX7-NEXT:    s_mov_b32 m0, -1
22 ; GFX7-NEXT:    ds_read_b128 v[0:3], v0
23 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
24 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26 ; GFX10-LABEL: load_lds_v4i32:
27 ; GFX10:       ; %bb.0:
28 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29 ; GFX10-NEXT:    ds_read_b128 v[0:3], v0
30 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
31 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33 ; GFX11-LABEL: load_lds_v4i32:
34 ; GFX11:       ; %bb.0:
35 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36 ; GFX11-NEXT:    ds_load_b128 v[0:3], v0
37 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
38 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
39   %load = load <4 x i32>, ptr addrspace(3) %ptr
40   ret <4 x i32> %load
43 define <4 x i32> @load_lds_v4i32_align1(ptr addrspace(3) %ptr) {
44 ; GFX9-LABEL: load_lds_v4i32_align1:
45 ; GFX9:       ; %bb.0:
46 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47 ; GFX9-NEXT:    ds_read_u8 v1, v0
48 ; GFX9-NEXT:    ds_read_u8 v2, v0 offset:1
49 ; GFX9-NEXT:    ds_read_u8 v3, v0 offset:2
50 ; GFX9-NEXT:    ds_read_u8 v4, v0 offset:3
51 ; GFX9-NEXT:    ds_read_u8 v5, v0 offset:4
52 ; GFX9-NEXT:    ds_read_u8 v6, v0 offset:5
53 ; GFX9-NEXT:    ds_read_u8 v7, v0 offset:6
54 ; GFX9-NEXT:    ds_read_u8 v8, v0 offset:7
55 ; GFX9-NEXT:    s_waitcnt lgkmcnt(6)
56 ; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 8, v1
57 ; GFX9-NEXT:    s_waitcnt lgkmcnt(4)
58 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 24, v4
59 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
60 ; GFX9-NEXT:    v_or3_b32 v4, v2, v3, v1
61 ; GFX9-NEXT:    s_waitcnt lgkmcnt(2)
62 ; GFX9-NEXT:    v_lshl_or_b32 v1, v6, 8, v5
63 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
64 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 24, v8
65 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
66 ; GFX9-NEXT:    v_or3_b32 v1, v2, v3, v1
67 ; GFX9-NEXT:    ds_read_u8 v2, v0 offset:8
68 ; GFX9-NEXT:    ds_read_u8 v3, v0 offset:9
69 ; GFX9-NEXT:    ds_read_u8 v5, v0 offset:10
70 ; GFX9-NEXT:    ds_read_u8 v6, v0 offset:11
71 ; GFX9-NEXT:    ds_read_u8 v7, v0 offset:12
72 ; GFX9-NEXT:    ds_read_u8 v8, v0 offset:13
73 ; GFX9-NEXT:    ds_read_u8 v9, v0 offset:14
74 ; GFX9-NEXT:    ds_read_u8 v0, v0 offset:15
75 ; GFX9-NEXT:    s_waitcnt lgkmcnt(6)
76 ; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 8, v2
77 ; GFX9-NEXT:    s_waitcnt lgkmcnt(4)
78 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 24, v6
79 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
80 ; GFX9-NEXT:    v_or3_b32 v2, v3, v5, v2
81 ; GFX9-NEXT:    s_waitcnt lgkmcnt(2)
82 ; GFX9-NEXT:    v_lshl_or_b32 v3, v8, 8, v7
83 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
84 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 24, v0
85 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v9
86 ; GFX9-NEXT:    v_or3_b32 v3, v0, v5, v3
87 ; GFX9-NEXT:    v_mov_b32_e32 v0, v4
88 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
90 ; GFX7-LABEL: load_lds_v4i32_align1:
91 ; GFX7:       ; %bb.0:
92 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
93 ; GFX7-NEXT:    ds_read_u8 v1, v0 offset:1
94 ; GFX7-NEXT:    ds_read_u8 v2, v0
95 ; GFX7-NEXT:    ds_read_u8 v3, v0 offset:2
96 ; GFX7-NEXT:    s_mov_b32 m0, -1
97 ; GFX7-NEXT:    s_waitcnt lgkmcnt(2)
98 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 8, v1
99 ; GFX7-NEXT:    s_waitcnt lgkmcnt(1)
100 ; GFX7-NEXT:    v_or_b32_e32 v1, v1, v2
101 ; GFX7-NEXT:    ds_read_u8 v2, v0 offset:3
102 ; GFX7-NEXT:    ds_read_u8 v5, v0 offset:4
103 ; GFX7-NEXT:    ds_read_u8 v6, v0 offset:5
104 ; GFX7-NEXT:    ds_read_u8 v7, v0 offset:6
105 ; GFX7-NEXT:    ds_read_u8 v8, v0 offset:7
106 ; GFX7-NEXT:    ds_read_u8 v9, v0 offset:8
107 ; GFX7-NEXT:    ds_read_u8 v10, v0 offset:9
108 ; GFX7-NEXT:    ds_read_u8 v11, v0 offset:10
109 ; GFX7-NEXT:    s_waitcnt lgkmcnt(7)
110 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
111 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
112 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v3
113 ; GFX7-NEXT:    v_or_b32_e32 v4, v2, v1
114 ; GFX7-NEXT:    s_waitcnt lgkmcnt(5)
115 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 8, v6
116 ; GFX7-NEXT:    s_waitcnt lgkmcnt(3)
117 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 24, v8
118 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
119 ; GFX7-NEXT:    v_or_b32_e32 v1, v1, v5
120 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v3
121 ; GFX7-NEXT:    ds_read_u8 v3, v0 offset:11
122 ; GFX7-NEXT:    ds_read_u8 v5, v0 offset:12
123 ; GFX7-NEXT:    ds_read_u8 v6, v0 offset:13
124 ; GFX7-NEXT:    ds_read_u8 v7, v0 offset:14
125 ; GFX7-NEXT:    ds_read_u8 v0, v0 offset:15
126 ; GFX7-NEXT:    v_or_b32_e32 v1, v2, v1
127 ; GFX7-NEXT:    s_waitcnt lgkmcnt(6)
128 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 8, v10
129 ; GFX7-NEXT:    s_waitcnt lgkmcnt(4)
130 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 24, v3
131 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v11
132 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v9
133 ; GFX7-NEXT:    v_or_b32_e32 v3, v3, v8
134 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
135 ; GFX7-NEXT:    s_waitcnt lgkmcnt(2)
136 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 8, v6
137 ; GFX7-NEXT:    v_or_b32_e32 v3, v3, v5
138 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
139 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 24, v0
140 ; GFX7-NEXT:    v_lshlrev_b32_e32 v5, 16, v7
141 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v5
142 ; GFX7-NEXT:    v_or_b32_e32 v3, v0, v3
143 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
144 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
146 ; GFX10-LABEL: load_lds_v4i32_align1:
147 ; GFX10:       ; %bb.0:
148 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
149 ; GFX10-NEXT:    ds_read_u8 v1, v0
150 ; GFX10-NEXT:    ds_read_u8 v2, v0 offset:1
151 ; GFX10-NEXT:    ds_read_u8 v3, v0 offset:2
152 ; GFX10-NEXT:    ds_read_u8 v4, v0 offset:3
153 ; GFX10-NEXT:    ds_read_u8 v5, v0 offset:4
154 ; GFX10-NEXT:    ds_read_u8 v6, v0 offset:5
155 ; GFX10-NEXT:    ds_read_u8 v7, v0 offset:6
156 ; GFX10-NEXT:    ds_read_u8 v8, v0 offset:7
157 ; GFX10-NEXT:    ds_read_u8 v9, v0 offset:8
158 ; GFX10-NEXT:    ds_read_u8 v10, v0 offset:9
159 ; GFX10-NEXT:    ds_read_u8 v11, v0 offset:10
160 ; GFX10-NEXT:    ds_read_u8 v12, v0 offset:11
161 ; GFX10-NEXT:    ds_read_u8 v13, v0 offset:12
162 ; GFX10-NEXT:    ds_read_u8 v14, v0 offset:13
163 ; GFX10-NEXT:    ds_read_u8 v15, v0 offset:15
164 ; GFX10-NEXT:    ds_read_u8 v0, v0 offset:14
165 ; GFX10-NEXT:    s_waitcnt lgkmcnt(14)
166 ; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 8, v1
167 ; GFX10-NEXT:    s_waitcnt lgkmcnt(13)
168 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
169 ; GFX10-NEXT:    s_waitcnt lgkmcnt(12)
170 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 24, v4
171 ; GFX10-NEXT:    s_waitcnt lgkmcnt(10)
172 ; GFX10-NEXT:    v_lshl_or_b32 v4, v6, 8, v5
173 ; GFX10-NEXT:    s_waitcnt lgkmcnt(9)
174 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
175 ; GFX10-NEXT:    s_waitcnt lgkmcnt(8)
176 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 24, v8
177 ; GFX10-NEXT:    s_waitcnt lgkmcnt(6)
178 ; GFX10-NEXT:    v_lshl_or_b32 v7, v10, 8, v9
179 ; GFX10-NEXT:    s_waitcnt lgkmcnt(5)
180 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v11
181 ; GFX10-NEXT:    s_waitcnt lgkmcnt(4)
182 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 24, v12
183 ; GFX10-NEXT:    s_waitcnt lgkmcnt(2)
184 ; GFX10-NEXT:    v_lshl_or_b32 v10, v14, 8, v13
185 ; GFX10-NEXT:    s_waitcnt lgkmcnt(1)
186 ; GFX10-NEXT:    v_lshlrev_b32_e32 v11, 24, v15
187 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
188 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v0
189 ; GFX10-NEXT:    v_or3_b32 v0, v2, v3, v1
190 ; GFX10-NEXT:    v_or3_b32 v1, v5, v6, v4
191 ; GFX10-NEXT:    v_or3_b32 v2, v8, v9, v7
192 ; GFX10-NEXT:    v_or3_b32 v3, v11, v12, v10
193 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
195 ; GFX11-LABEL: load_lds_v4i32_align1:
196 ; GFX11:       ; %bb.0:
197 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
198 ; GFX11-NEXT:    ds_load_u8 v1, v0
199 ; GFX11-NEXT:    ds_load_u8 v2, v0 offset:1
200 ; GFX11-NEXT:    ds_load_u8 v3, v0 offset:2
201 ; GFX11-NEXT:    ds_load_u8 v4, v0 offset:3
202 ; GFX11-NEXT:    ds_load_u8 v5, v0 offset:4
203 ; GFX11-NEXT:    ds_load_u8 v6, v0 offset:5
204 ; GFX11-NEXT:    ds_load_u8 v7, v0 offset:6
205 ; GFX11-NEXT:    ds_load_u8 v8, v0 offset:7
206 ; GFX11-NEXT:    ds_load_u8 v9, v0 offset:8
207 ; GFX11-NEXT:    ds_load_u8 v10, v0 offset:9
208 ; GFX11-NEXT:    ds_load_u8 v11, v0 offset:10
209 ; GFX11-NEXT:    ds_load_u8 v12, v0 offset:11
210 ; GFX11-NEXT:    ds_load_u8 v13, v0 offset:12
211 ; GFX11-NEXT:    ds_load_u8 v14, v0 offset:13
212 ; GFX11-NEXT:    ds_load_u8 v15, v0 offset:15
213 ; GFX11-NEXT:    ds_load_u8 v0, v0 offset:14
214 ; GFX11-NEXT:    s_waitcnt lgkmcnt(14)
215 ; GFX11-NEXT:    v_lshl_or_b32 v1, v2, 8, v1
216 ; GFX11-NEXT:    s_waitcnt lgkmcnt(13)
217 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
218 ; GFX11-NEXT:    s_waitcnt lgkmcnt(12)
219 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 24, v4
220 ; GFX11-NEXT:    s_waitcnt lgkmcnt(10)
221 ; GFX11-NEXT:    v_lshl_or_b32 v4, v6, 8, v5
222 ; GFX11-NEXT:    s_waitcnt lgkmcnt(9)
223 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
224 ; GFX11-NEXT:    s_waitcnt lgkmcnt(8)
225 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 24, v8
226 ; GFX11-NEXT:    s_waitcnt lgkmcnt(6)
227 ; GFX11-NEXT:    v_lshl_or_b32 v7, v10, 8, v9
228 ; GFX11-NEXT:    s_waitcnt lgkmcnt(5)
229 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v11
230 ; GFX11-NEXT:    s_waitcnt lgkmcnt(4)
231 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 24, v12
232 ; GFX11-NEXT:    s_waitcnt lgkmcnt(2)
233 ; GFX11-NEXT:    v_lshl_or_b32 v10, v14, 8, v13
234 ; GFX11-NEXT:    s_waitcnt lgkmcnt(1)
235 ; GFX11-NEXT:    v_lshlrev_b32_e32 v11, 24, v15
236 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
237 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v0
238 ; GFX11-NEXT:    v_or3_b32 v0, v2, v3, v1
239 ; GFX11-NEXT:    v_or3_b32 v1, v5, v6, v4
240 ; GFX11-NEXT:    v_or3_b32 v2, v8, v9, v7
241 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
242 ; GFX11-NEXT:    v_or3_b32 v3, v11, v12, v10
243 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
244   %load = load <4 x i32>, ptr addrspace(3) %ptr, align 1
245   ret <4 x i32> %load
248 define <4 x i32> @load_lds_v4i32_align2(ptr addrspace(3) %ptr) {
249 ; GFX9-LABEL: load_lds_v4i32_align2:
250 ; GFX9:       ; %bb.0:
251 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
252 ; GFX9-NEXT:    ds_read_u16 v1, v0
253 ; GFX9-NEXT:    ds_read_u16 v2, v0 offset:2
254 ; GFX9-NEXT:    ds_read_u16 v3, v0 offset:4
255 ; GFX9-NEXT:    ds_read_u16 v4, v0 offset:6
256 ; GFX9-NEXT:    ds_read_u16 v5, v0 offset:8
257 ; GFX9-NEXT:    ds_read_u16 v6, v0 offset:10
258 ; GFX9-NEXT:    ds_read_u16 v7, v0 offset:12
259 ; GFX9-NEXT:    ds_read_u16 v8, v0 offset:14
260 ; GFX9-NEXT:    s_waitcnt lgkmcnt(6)
261 ; GFX9-NEXT:    v_lshl_or_b32 v0, v2, 16, v1
262 ; GFX9-NEXT:    s_waitcnt lgkmcnt(4)
263 ; GFX9-NEXT:    v_lshl_or_b32 v1, v4, 16, v3
264 ; GFX9-NEXT:    s_waitcnt lgkmcnt(2)
265 ; GFX9-NEXT:    v_lshl_or_b32 v2, v6, 16, v5
266 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
267 ; GFX9-NEXT:    v_lshl_or_b32 v3, v8, 16, v7
268 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
270 ; GFX7-LABEL: load_lds_v4i32_align2:
271 ; GFX7:       ; %bb.0:
272 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
273 ; GFX7-NEXT:    ds_read_u16 v1, v0
274 ; GFX7-NEXT:    s_mov_b32 m0, -1
275 ; GFX7-NEXT:    ds_read_u16 v2, v0 offset:2
276 ; GFX7-NEXT:    ds_read_u16 v3, v0 offset:4
277 ; GFX7-NEXT:    ds_read_u16 v4, v0 offset:6
278 ; GFX7-NEXT:    ds_read_u16 v5, v0 offset:8
279 ; GFX7-NEXT:    ds_read_u16 v6, v0 offset:10
280 ; GFX7-NEXT:    ds_read_u16 v7, v0 offset:12
281 ; GFX7-NEXT:    ds_read_u16 v8, v0 offset:14
282 ; GFX7-NEXT:    s_waitcnt lgkmcnt(6)
283 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
284 ; GFX7-NEXT:    s_waitcnt lgkmcnt(2)
285 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v6
286 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
287 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v4
288 ; GFX7-NEXT:    v_or_b32_e32 v1, v1, v3
289 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
290 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v8
291 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v5
292 ; GFX7-NEXT:    v_or_b32_e32 v3, v3, v7
293 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
295 ; GFX10-LABEL: load_lds_v4i32_align2:
296 ; GFX10:       ; %bb.0:
297 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
298 ; GFX10-NEXT:    ds_read_u16 v1, v0
299 ; GFX10-NEXT:    ds_read_u16 v2, v0 offset:2
300 ; GFX10-NEXT:    ds_read_u16 v3, v0 offset:4
301 ; GFX10-NEXT:    ds_read_u16 v4, v0 offset:6
302 ; GFX10-NEXT:    ds_read_u16 v5, v0 offset:8
303 ; GFX10-NEXT:    ds_read_u16 v6, v0 offset:10
304 ; GFX10-NEXT:    ds_read_u16 v7, v0 offset:12
305 ; GFX10-NEXT:    ds_read_u16 v8, v0 offset:14
306 ; GFX10-NEXT:    s_waitcnt lgkmcnt(6)
307 ; GFX10-NEXT:    v_lshl_or_b32 v0, v2, 16, v1
308 ; GFX10-NEXT:    s_waitcnt lgkmcnt(4)
309 ; GFX10-NEXT:    v_lshl_or_b32 v1, v4, 16, v3
310 ; GFX10-NEXT:    s_waitcnt lgkmcnt(2)
311 ; GFX10-NEXT:    v_lshl_or_b32 v2, v6, 16, v5
312 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
313 ; GFX10-NEXT:    v_lshl_or_b32 v3, v8, 16, v7
314 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
316 ; GFX11-LABEL: load_lds_v4i32_align2:
317 ; GFX11:       ; %bb.0:
318 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
319 ; GFX11-NEXT:    ds_load_u16 v1, v0
320 ; GFX11-NEXT:    ds_load_u16 v2, v0 offset:2
321 ; GFX11-NEXT:    ds_load_u16 v3, v0 offset:4
322 ; GFX11-NEXT:    ds_load_u16 v4, v0 offset:6
323 ; GFX11-NEXT:    ds_load_u16 v5, v0 offset:8
324 ; GFX11-NEXT:    ds_load_u16 v6, v0 offset:10
325 ; GFX11-NEXT:    ds_load_u16 v7, v0 offset:12
326 ; GFX11-NEXT:    ds_load_u16 v8, v0 offset:14
327 ; GFX11-NEXT:    s_waitcnt lgkmcnt(6)
328 ; GFX11-NEXT:    v_lshl_or_b32 v0, v2, 16, v1
329 ; GFX11-NEXT:    s_waitcnt lgkmcnt(4)
330 ; GFX11-NEXT:    v_lshl_or_b32 v1, v4, 16, v3
331 ; GFX11-NEXT:    s_waitcnt lgkmcnt(2)
332 ; GFX11-NEXT:    v_lshl_or_b32 v2, v6, 16, v5
333 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
334 ; GFX11-NEXT:    v_lshl_or_b32 v3, v8, 16, v7
335 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
336   %load = load <4 x i32>, ptr addrspace(3) %ptr, align 2
337   ret <4 x i32> %load
340 define <4 x i32> @load_lds_v4i32_align4(ptr addrspace(3) %ptr) {
341 ; GFX9-LABEL: load_lds_v4i32_align4:
342 ; GFX9:       ; %bb.0:
343 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
344 ; GFX9-NEXT:    v_mov_b32_e32 v2, v0
345 ; GFX9-NEXT:    ds_read2_b32 v[0:1], v0 offset1:1
346 ; GFX9-NEXT:    ds_read2_b32 v[2:3], v2 offset0:2 offset1:3
347 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
348 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
350 ; GFX7-LABEL: load_lds_v4i32_align4:
351 ; GFX7:       ; %bb.0:
352 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
353 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
354 ; GFX7-NEXT:    s_mov_b32 m0, -1
355 ; GFX7-NEXT:    ds_read2_b32 v[0:1], v0 offset1:1
356 ; GFX7-NEXT:    ds_read2_b32 v[2:3], v2 offset0:2 offset1:3
357 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
358 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
360 ; GFX10-LABEL: load_lds_v4i32_align4:
361 ; GFX10:       ; %bb.0:
362 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
363 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
364 ; GFX10-NEXT:    ds_read2_b32 v[0:1], v0 offset1:1
365 ; GFX10-NEXT:    ds_read2_b32 v[2:3], v2 offset0:2 offset1:3
366 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
367 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
369 ; GFX11-LABEL: load_lds_v4i32_align4:
370 ; GFX11:       ; %bb.0:
371 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
372 ; GFX11-NEXT:    v_mov_b32_e32 v2, v0
373 ; GFX11-NEXT:    ds_load_2addr_b32 v[0:1], v0 offset1:1
374 ; GFX11-NEXT:    ds_load_2addr_b32 v[2:3], v2 offset0:2 offset1:3
375 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
376 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
377   %load = load <4 x i32>, ptr addrspace(3) %ptr, align 4
378   ret <4 x i32> %load
381 define <4 x i32> @load_lds_v4i32_align8(ptr addrspace(3) %ptr) {
382 ; GFX9-LABEL: load_lds_v4i32_align8:
383 ; GFX9:       ; %bb.0:
384 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
385 ; GFX9-NEXT:    ds_read2_b64 v[0:3], v0 offset1:1
386 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
387 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
389 ; GFX7-LABEL: load_lds_v4i32_align8:
390 ; GFX7:       ; %bb.0:
391 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
392 ; GFX7-NEXT:    s_mov_b32 m0, -1
393 ; GFX7-NEXT:    ds_read2_b64 v[0:3], v0 offset1:1
394 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
395 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
397 ; GFX10-LABEL: load_lds_v4i32_align8:
398 ; GFX10:       ; %bb.0:
399 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
400 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
401 ; GFX10-NEXT:    ds_read2_b32 v[0:1], v0 offset1:1
402 ; GFX10-NEXT:    ds_read2_b32 v[2:3], v2 offset0:2 offset1:3
403 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
404 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
406 ; GFX11-LABEL: load_lds_v4i32_align8:
407 ; GFX11:       ; %bb.0:
408 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX11-NEXT:    ds_load_2addr_b64 v[0:3], v0 offset1:1
410 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
411 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
412   %load = load <4 x i32>, ptr addrspace(3) %ptr, align 8
413   ret <4 x i32> %load
416 define <4 x i32> @load_lds_v4i32_align16(ptr addrspace(3) %ptr) {
417 ; GFX9-LABEL: load_lds_v4i32_align16:
418 ; GFX9:       ; %bb.0:
419 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
420 ; GFX9-NEXT:    ds_read_b128 v[0:3], v0
421 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
422 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
424 ; GFX7-LABEL: load_lds_v4i32_align16:
425 ; GFX7:       ; %bb.0:
426 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
427 ; GFX7-NEXT:    s_mov_b32 m0, -1
428 ; GFX7-NEXT:    ds_read_b128 v[0:3], v0
429 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
430 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
432 ; GFX10-LABEL: load_lds_v4i32_align16:
433 ; GFX10:       ; %bb.0:
434 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
435 ; GFX10-NEXT:    ds_read_b128 v[0:3], v0
436 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
437 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
439 ; GFX11-LABEL: load_lds_v4i32_align16:
440 ; GFX11:       ; %bb.0:
441 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
442 ; GFX11-NEXT:    ds_load_b128 v[0:3], v0
443 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
444 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
445   %load = load <4 x i32>, ptr addrspace(3) %ptr, align 16
446   ret <4 x i32> %load