blob: 9b0cbaa770117543ee05f8b6bd8e210c8a6ee458 [file] [log] [blame]
Matt Arsenaultd1097a32016-06-02 19:54:26 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5; FUNC-LABEL: {{^}}local_load_i16:
6; GCN: ds_read_u16 v{{[0-9]+}}
7
Jan Vesely38814fa2016-08-27 19:09:43 +00008; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
9; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
10; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
11; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
12; EG: LDS_SHORT_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +000013define void @local_load_i16(i16 addrspace(3)* %out, i16 addrspace(3)* %in) {
14entry:
15 %ld = load i16, i16 addrspace(3)* %in
16 store i16 %ld, i16 addrspace(3)* %out
17 ret void
18}
19
20; FUNC-LABEL: {{^}}local_load_v2i16:
21; GCN: ds_read_b32
22
Jan Vesely38814fa2016-08-27 19:09:43 +000023; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
24; EG: LDS_READ_RET {{.*}} [[FROM]]
25; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
26; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
27; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +000028define void @local_load_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) {
29entry:
30 %ld = load <2 x i16>, <2 x i16> addrspace(3)* %in
31 store <2 x i16> %ld, <2 x i16> addrspace(3)* %out
32 ret void
33}
34
35; FUNC-LABEL: {{^}}local_load_v3i16:
36; GCN: ds_read_b64
37; GCN-DAG: ds_write_b32
38; GCN-DAG: ds_write_b16
39
40; EG-DAG: LDS_USHORT_READ_RET
41; EG-DAG: LDS_READ_RET
42define void @local_load_v3i16(<3 x i16> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
43entry:
44 %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
45 store <3 x i16> %ld, <3 x i16> addrspace(3)* %out
46 ret void
47}
48
49; FUNC-LABEL: {{^}}local_load_v4i16:
50; GCN: ds_read_b64
51
52; EG: LDS_READ_RET
53; EG: LDS_READ_RET
54define void @local_load_v4i16(<4 x i16> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) {
55entry:
56 %ld = load <4 x i16>, <4 x i16> addrspace(3)* %in
57 store <4 x i16> %ld, <4 x i16> addrspace(3)* %out
58 ret void
59}
60
61; FUNC-LABEL: {{^}}local_load_v8i16:
Tom Stellarde175d8a2016-08-26 21:36:47 +000062; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
Matt Arsenaultd1097a32016-06-02 19:54:26 +000063
64; EG: LDS_READ_RET
65; EG: LDS_READ_RET
66; EG: LDS_READ_RET
67; EG: LDS_READ_RET
68define void @local_load_v8i16(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) {
69entry:
70 %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in
71 store <8 x i16> %ld, <8 x i16> addrspace(3)* %out
72 ret void
73}
74
75; FUNC-LABEL: {{^}}local_load_v16i16:
Tom Stellardc2ff0eb2016-08-29 19:15:22 +000076; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:3{{$}}
77; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}}
Matt Arsenaultd1097a32016-06-02 19:54:26 +000078
79
80; EG: LDS_READ_RET
81; EG: LDS_READ_RET
82; EG: LDS_READ_RET
83; EG: LDS_READ_RET
84
85; EG: LDS_READ_RET
86; EG: LDS_READ_RET
87; EG: LDS_READ_RET
88; EG: LDS_READ_RET
89define void @local_load_v16i16(<16 x i16> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) {
90entry:
91 %ld = load <16 x i16>, <16 x i16> addrspace(3)* %in
92 store <16 x i16> %ld, <16 x i16> addrspace(3)* %out
93 ret void
94}
95
96; FUNC-LABEL: {{^}}local_zextload_i16_to_i32:
97; GCN: ds_read_u16
98; GCN: ds_write_b32
99
Jan Vesely38814fa2016-08-27 19:09:43 +0000100; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
101; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
102; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
103; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
104; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000105define void @local_zextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
106 %a = load i16, i16 addrspace(3)* %in
107 %ext = zext i16 %a to i32
108 store i32 %ext, i32 addrspace(3)* %out
109 ret void
110}
111
112; FUNC-LABEL: {{^}}local_sextload_i16_to_i32:
113; GCN-NOT: s_wqm_b64
114; GCN: s_mov_b32 m0
115; GCN: ds_read_i16
116
Jan Vesely38814fa2016-08-27 19:09:43 +0000117; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
118; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
119; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
120; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
121; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
122; EG: 16
123; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000124define void @local_sextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
125 %a = load i16, i16 addrspace(3)* %in
126 %ext = sext i16 %a to i32
127 store i32 %ext, i32 addrspace(3)* %out
128 ret void
129}
130
131; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i32:
132; GCN: ds_read_u16
Jan Vesely38814fa2016-08-27 19:09:43 +0000133
134; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
135; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
136; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
137; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
138; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000139define void @local_zextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
140 %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
141 %ext = zext <1 x i16> %load to <1 x i32>
142 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
143 ret void
144}
145
146; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i32:
147; GCN: ds_read_i16
Jan Vesely38814fa2016-08-27 19:09:43 +0000148
149; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
150; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
151; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
152; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
153; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
154; EG: 16
155; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000156define void @local_sextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
157 %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
158 %ext = sext <1 x i16> %load to <1 x i32>
159 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
160 ret void
161}
162
163; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i32:
164; GCN-NOT: s_wqm_b64
165; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000166; GCN: ds_read_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000167
Jan Vesely38814fa2016-08-27 19:09:43 +0000168; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000169define void @local_zextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
170 %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
171 %ext = zext <2 x i16> %load to <2 x i32>
172 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
173 ret void
174}
175
176; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i32:
177; GCN-NOT: s_wqm_b64
178; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000179; GCN: ds_read_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000180
Jan Vesely38814fa2016-08-27 19:09:43 +0000181; EG: LDS_READ_RET
182; EG: BFE_INT
183; EG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000184define void @local_sextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
185 %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
186 %ext = sext <2 x i16> %load to <2 x i32>
187 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
188 ret void
189}
190
191; FUNC-LABEL: {{^}}local_local_zextload_v3i16_to_v3i32:
192; GCN: ds_read_b64
193; GCN-DAG: ds_write_b32
194; GCN-DAG: ds_write_b64
Jan Vesely38814fa2016-08-27 19:09:43 +0000195
196; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000197define void @local_local_zextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
198entry:
199 %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
200 %ext = zext <3 x i16> %ld to <3 x i32>
201 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
202 ret void
203}
204
205; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32:
206; GCN: ds_read_b64
207; GCN-DAG: ds_write_b32
208; GCN-DAG: ds_write_b64
Jan Vesely38814fa2016-08-27 19:09:43 +0000209
210; EG: LDS_READ_RET
211; EG-DAG: BFE_INT
212; EG-DAG: BFE_INT
213; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000214define void @local_local_sextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
215entry:
216 %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
217 %ext = sext <3 x i16> %ld to <3 x i32>
218 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
219 ret void
220}
221
222; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32:
223; GCN-NOT: s_wqm_b64
224; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000225; GCN: ds_read_b64
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000226
Jan Vesely38814fa2016-08-27 19:09:43 +0000227; EG: LDS_READ_RET
228; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000229define void @local_local_zextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
230 %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
231 %ext = zext <4 x i16> %load to <4 x i32>
232 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
233 ret void
234}
235
236; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32:
237; GCN-NOT: s_wqm_b64
238; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000239; GCN: ds_read_b64
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000240
Jan Vesely38814fa2016-08-27 19:09:43 +0000241; EG: LDS_READ_RET
242; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000243; EG-DAG: BFE_INT
244; EG-DAG: BFE_INT
245; EG-DAG: BFE_INT
246; EG-DAG: BFE_INT
247define void @local_sextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
248 %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
249 %ext = sext <4 x i16> %load to <4 x i32>
250 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
251 ret void
252}
253
254; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000255; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
Jan Vesely38814fa2016-08-27 19:09:43 +0000256
257; EG: LDS_READ_RET
258; EG: LDS_READ_RET
259; EG: LDS_READ_RET
260; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000261define void @local_zextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
262 %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
263 %ext = zext <8 x i16> %load to <8 x i32>
264 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
265 ret void
266}
267
268; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000269; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
Jan Vesely38814fa2016-08-27 19:09:43 +0000270
271; EG: LDS_READ_RET
272; EG: LDS_READ_RET
273; EG: LDS_READ_RET
274; EG: LDS_READ_RET
275; EG-DAG: BFE_INT
276; EG-DAG: BFE_INT
277; EG-DAG: BFE_INT
278; EG-DAG: BFE_INT
279; EG-DAG: BFE_INT
280; EG-DAG: BFE_INT
281; EG-DAG: BFE_INT
282; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000283define void @local_sextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
284 %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
285 %ext = sext <8 x i16> %load to <8 x i32>
286 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
287 ret void
288}
289
290; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32:
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000291; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
292; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000293
294; GCN: ds_write2_b64
295; GCN: ds_write2_b64
296; GCN: ds_write2_b64
297; GCN: ds_write2_b64
Jan Vesely38814fa2016-08-27 19:09:43 +0000298
299; EG: LDS_READ_RET
300; EG: LDS_READ_RET
301; EG: LDS_READ_RET
302; EG: LDS_READ_RET
303; EG: LDS_READ_RET
304; EG: LDS_READ_RET
305; EG: LDS_READ_RET
306; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000307define void @local_zextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
308 %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
309 %ext = zext <16 x i16> %load to <16 x i32>
310 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
311 ret void
312}
313
314; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32:
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000315
316; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
317; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
Jan Vesely38814fa2016-08-27 19:09:43 +0000318
319; EG: LDS_READ_RET
320; EG: LDS_READ_RET
321; EG: LDS_READ_RET
322; EG: LDS_READ_RET
323; EG: LDS_READ_RET
324; EG: LDS_READ_RET
325; EG: LDS_READ_RET
326; EG: LDS_READ_RET
327; EG-DAG: BFE_INT
328; EG-DAG: BFE_INT
329; EG-DAG: BFE_INT
330; EG-DAG: BFE_INT
331; EG-DAG: BFE_INT
332; EG-DAG: BFE_INT
333; EG-DAG: BFE_INT
334; EG-DAG: BFE_INT
335; EG-DAG: BFE_INT
336; EG-DAG: BFE_INT
337; EG-DAG: BFE_INT
338; EG-DAG: BFE_INT
339; EG-DAG: BFE_INT
340; EG-DAG: BFE_INT
341; EG-DAG: BFE_INT
342; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000343define void @local_sextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
344 %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
345 %ext = sext <16 x i16> %load to <16 x i32>
346 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
347 ret void
348}
349
350; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000351; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
352; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
353; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
354; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
Jan Vesely38814fa2016-08-27 19:09:43 +0000355
356; EG: LDS_READ_RET
357; EG: LDS_READ_RET
358; EG: LDS_READ_RET
359; EG: LDS_READ_RET
360; EG: LDS_READ_RET
361; EG: LDS_READ_RET
362; EG: LDS_READ_RET
363; EG: LDS_READ_RET
364; EG: LDS_READ_RET
365; EG: LDS_READ_RET
366; EG: LDS_READ_RET
367; EG: LDS_READ_RET
368; EG: LDS_READ_RET
369; EG: LDS_READ_RET
370; EG: LDS_READ_RET
371; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000372define void @local_zextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
373 %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
374 %ext = zext <32 x i16> %load to <32 x i32>
375 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
376 ret void
377}
378
379; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32:
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000380; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
381; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
382; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000383; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000384; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
385; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
386; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
387; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
388; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
389; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
390; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
391; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
Jan Vesely38814fa2016-08-27 19:09:43 +0000392
393; EG: LDS_READ_RET
394; EG: LDS_READ_RET
395; EG: LDS_READ_RET
396; EG: LDS_READ_RET
397; EG: LDS_READ_RET
398; EG: LDS_READ_RET
399; EG: LDS_READ_RET
400; EG: LDS_READ_RET
401; EG: LDS_READ_RET
402; EG: LDS_READ_RET
403; EG: LDS_READ_RET
404; EG: LDS_READ_RET
405; EG: LDS_READ_RET
406; EG: LDS_READ_RET
407; EG: LDS_READ_RET
408; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000409define void @local_sextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
410 %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
411 %ext = sext <32 x i16> %load to <32 x i32>
412 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
413 ret void
414}
415
416; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32:
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000417; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:14 offset1:15
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000418; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
419; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
420; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
421; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000422; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:8 offset1:9
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000423; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:12 offset1:13
Tom Stellardc2ff0eb2016-08-29 19:15:22 +0000424; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:10 offset1:11
425; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:30 offset1:31
426; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:28 offset1:29
427; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:26 offset1:27
428; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:24 offset1:25
429; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:22 offset1:23
430; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:20 offset1:21
431; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:18 offset1:19
432; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:16 offset1:17
433; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
434; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
435; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
436; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
437; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
438; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
439; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
440; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
Jan Vesely38814fa2016-08-27 19:09:43 +0000441
442; EG: LDS_READ_RET
443; EG: LDS_READ_RET
444; EG: LDS_READ_RET
445; EG: LDS_READ_RET
446; EG: LDS_READ_RET
447; EG: LDS_READ_RET
448; EG: LDS_READ_RET
449; EG: LDS_READ_RET
450; EG: LDS_READ_RET
451; EG: LDS_READ_RET
452; EG: LDS_READ_RET
453; EG: LDS_READ_RET
454; EG: LDS_READ_RET
455; EG: LDS_READ_RET
456; EG: LDS_READ_RET
457; EG: LDS_READ_RET
458; EG: LDS_READ_RET
459; EG: LDS_READ_RET
460; EG: LDS_READ_RET
461; EG: LDS_READ_RET
462; EG: LDS_READ_RET
463; EG: LDS_READ_RET
464; EG: LDS_READ_RET
465; EG: LDS_READ_RET
466; EG: LDS_READ_RET
467; EG: LDS_READ_RET
468; EG: LDS_READ_RET
469; EG: LDS_READ_RET
470; EG: LDS_READ_RET
471; EG: LDS_READ_RET
472; EG: LDS_READ_RET
473; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000474define void @local_zextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
475 %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
476 %ext = zext <64 x i16> %load to <64 x i32>
477 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
478 ret void
479}
480
481; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000482
483; EG: LDS_READ_RET
484; EG: LDS_READ_RET
485; EG: LDS_READ_RET
486; EG: LDS_READ_RET
487; EG: LDS_READ_RET
488; EG: LDS_READ_RET
489; EG: LDS_READ_RET
490; EG: LDS_READ_RET
491; EG: LDS_READ_RET
492; EG: LDS_READ_RET
493; EG: LDS_READ_RET
494; EG: LDS_READ_RET
495; EG: LDS_READ_RET
496; EG: LDS_READ_RET
497; EG: LDS_READ_RET
498; EG: LDS_READ_RET
499; EG: LDS_READ_RET
500; EG: LDS_READ_RET
501; EG: LDS_READ_RET
502; EG: LDS_READ_RET
503; EG: LDS_READ_RET
504; EG: LDS_READ_RET
505; EG: LDS_READ_RET
506; EG: LDS_READ_RET
507; EG: LDS_READ_RET
508; EG: LDS_READ_RET
509; EG: LDS_READ_RET
510; EG: LDS_READ_RET
511; EG: LDS_READ_RET
512; EG: LDS_READ_RET
513; EG: LDS_READ_RET
514; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000515define void @local_sextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
516 %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
517 %ext = sext <64 x i16> %load to <64 x i32>
518 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
519 ret void
520}
521
522; FUNC-LABEL: {{^}}local_zextload_i16_to_i64:
523; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]],
524; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
525
526; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000527
528; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
529; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
530; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
531; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
532; EG-DAG: LDS_WRITE
533; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000534define void @local_zextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
535 %a = load i16, i16 addrspace(3)* %in
536 %ext = zext i16 %a to i64
537 store i64 %ext, i64 addrspace(3)* %out
538 ret void
539}
540
541; FUNC-LABEL: {{^}}local_sextload_i16_to_i64:
542; GCN: ds_read_i16 v[[LO:[0-9]+]],
543; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
544
545; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000546
547; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
548; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
549; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
550; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
551; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
552; EG-DAG: LDS_WRITE
553; EG-DAG: 16
554; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000555define void @local_sextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
556 %a = load i16, i16 addrspace(3)* %in
557 %ext = sext i16 %a to i64
558 store i64 %ext, i64 addrspace(3)* %out
559 ret void
560}
561
562; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000563
564; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
565; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
566; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
567; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
568; EG-DAG: LDS_WRITE
569; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000570define void @local_zextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
571 %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
572 %ext = zext <1 x i16> %load to <1 x i64>
573 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
574 ret void
575}
576
577; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000578
579; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
580; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
581; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
582; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
583; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
584; EG-DAG: LDS_WRITE
585; EG-DAG: 16
586; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000587define void @local_sextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
588 %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
589 %ext = sext <1 x i16> %load to <1 x i64>
590 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
591 ret void
592}
593
594; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000595
596; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000597define void @local_zextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
598 %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
599 %ext = zext <2 x i16> %load to <2 x i64>
600 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
601 ret void
602}
603
604; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000605
606; EG: LDS_READ_RET
607; EG-DAG: BFE_INT
608; EG-DAG: ASHR
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000609define void @local_sextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
610 %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
611 %ext = sext <2 x i16> %load to <2 x i64>
612 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
613 ret void
614}
615
616; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000617
618; EG: LDS_READ_RET
619; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000620define void @local_zextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
621 %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
622 %ext = zext <4 x i16> %load to <4 x i64>
623 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
624 ret void
625}
626
627; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000628
629; EG: LDS_READ_RET
630; EG: LDS_READ_RET
631; EG-DAG: BFE_INT
632; EG-DAG: BFE_INT
633; EG-DAG: ASHR
634; EG-DAG: ASHR
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000635define void @local_sextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
636 %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
637 %ext = sext <4 x i16> %load to <4 x i64>
638 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
639 ret void
640}
641
642; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000643
644; EG: LDS_READ_RET
645; EG: LDS_READ_RET
646; EG: LDS_READ_RET
647; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000648define void @local_zextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
649 %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
650 %ext = zext <8 x i16> %load to <8 x i64>
651 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
652 ret void
653}
654
655; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000656
657; EG: LDS_READ_RET
658; EG: LDS_READ_RET
659; EG: LDS_READ_RET
660; EG: LDS_READ_RET
661; EG-DAG: BFE_INT
662; EG-DAG: BFE_INT
663; EG-DAG: ASHR
664; EG-DAG: ASHR
665; EG-DAG: BFE_INT
666; EG-DAG: BFE_INT
667; EG-DAG: ASHR
668; EG-DAG: ASHR
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000669define void @local_sextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
670 %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
671 %ext = sext <8 x i16> %load to <8 x i64>
672 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
673 ret void
674}
675
676; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000677
678; EG: LDS_READ_RET
679; EG: LDS_READ_RET
680; EG: LDS_READ_RET
681; EG: LDS_READ_RET
682; EG: LDS_READ_RET
683; EG: LDS_READ_RET
684; EG: LDS_READ_RET
685; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000686define void @local_zextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
687 %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
688 %ext = zext <16 x i16> %load to <16 x i64>
689 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
690 ret void
691}
692
693; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000694
695; EG: LDS_READ_RET
696; EG: LDS_READ_RET
697; EG: LDS_READ_RET
698; EG: LDS_READ_RET
699; EG: LDS_READ_RET
700; EG: LDS_READ_RET
701; EG: LDS_READ_RET
702; EG: LDS_READ_RET
703; EG-DAG: BFE_INT
704; EG-DAG: BFE_INT
705; EG-DAG: ASHR
706; EG-DAG: ASHR
707; EG-DAG: BFE_INT
708; EG-DAG: BFE_INT
709; EG-DAG: ASHR
710; EG-DAG: ASHR
711; EG-DAG: BFE_INT
712; EG-DAG: BFE_INT
713; EG-DAG: ASHR
714; EG-DAG: ASHR
715; EG-DAG: BFE_INT
716; EG-DAG: BFE_INT
717; EG-DAG: ASHR
718; EG-DAG: ASHR
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000719define void @local_sextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
720 %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
721 %ext = sext <16 x i16> %load to <16 x i64>
722 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
723 ret void
724}
725
726; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000727
728; EG: LDS_READ_RET
729; EG: LDS_READ_RET
730; EG: LDS_READ_RET
731; EG: LDS_READ_RET
732; EG: LDS_READ_RET
733; EG: LDS_READ_RET
734; EG: LDS_READ_RET
735; EG: LDS_READ_RET
736; EG: LDS_READ_RET
737; EG: LDS_READ_RET
738; EG: LDS_READ_RET
739; EG: LDS_READ_RET
740; EG: LDS_READ_RET
741; EG: LDS_READ_RET
742; EG: LDS_READ_RET
743; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000744define void @local_zextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
745 %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
746 %ext = zext <32 x i16> %load to <32 x i64>
747 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
748 ret void
749}
750
751; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000752
753; EG: LDS_READ_RET
754; EG: LDS_READ_RET
755; EG: LDS_READ_RET
756; EG: LDS_READ_RET
757; EG: LDS_READ_RET
758; EG: LDS_READ_RET
759; EG: LDS_READ_RET
760; EG: LDS_READ_RET
761; EG: LDS_READ_RET
762; EG: LDS_READ_RET
763; EG: LDS_READ_RET
764; EG: LDS_READ_RET
765; EG: LDS_READ_RET
766; EG: LDS_READ_RET
767; EG: LDS_READ_RET
768; EG: LDS_READ_RET
769; EG-DAG: BFE_INT
770; EG-DAG: BFE_INT
771; EG-DAG: ASHR
772; EG-DAG: ASHR
773; EG-DAG: BFE_INT
774; EG-DAG: BFE_INT
775; EG-DAG: ASHR
776; EG-DAG: ASHR
777; EG-DAG: BFE_INT
778; EG-DAG: BFE_INT
779; EG-DAG: ASHR
780; EG-DAG: ASHR
781; EG-DAG: BFE_INT
782; EG-DAG: BFE_INT
783; EG-DAG: ASHR
784; EG-DAG: ASHR
785; EG-DAG: BFE_INT
786; EG-DAG: BFE_INT
787; EG-DAG: ASHR
788; EG-DAG: ASHR
789; EG-DAG: BFE_INT
790; EG-DAG: BFE_INT
791; EG-DAG: ASHR
792; EG-DAG: ASHR
793; EG-DAG: BFE_INT
794; EG-DAG: BFE_INT
795; EG-DAG: ASHR
796; EG-DAG: ASHR
797; EG-DAG: BFE_INT
798; EG-DAG: BFE_INT
799; EG-DAG: ASHR
800; EG-DAG: ASHR
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000801define void @local_sextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
802 %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
803 %ext = sext <32 x i16> %load to <32 x i64>
804 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
805 ret void
806}
807
808; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64:
809; define void @local_zextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
810; %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
811; %ext = zext <64 x i16> %load to <64 x i64>
812; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
813; ret void
814; }
815
816; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64:
817; define void @local_sextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
818; %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
819; %ext = sext <64 x i16> %load to <64 x i64>
820; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
821; ret void
822; }
823
824attributes #0 = { nounwind }