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