blob: ae032a9217547e780d68a1ae9f8f27c8a329cda2 [file] [log] [blame]
Matt Arsenaultd1097a32016-06-02 19:54:26 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s
2; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-HSA -check-prefix=FUNC %s
3; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s
4; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
5; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
6
7
8; FUNC-LABEL: {{^}}global_load_i8:
9; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}
10; GCN-HSA: flat_load_ubyte
11
Jan Vesely38814fa2016-08-27 19:09:43 +000012; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
13; TODO: NOT AND
Matt Arsenaultd1097a32016-06-02 19:54:26 +000014define void @global_load_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
15entry:
16 %ld = load i8, i8 addrspace(1)* %in
17 store i8 %ld, i8 addrspace(1)* %out
18 ret void
19}
20
21; FUNC-LABEL: {{^}}global_load_v2i8:
22; GCN-NOHSA: buffer_load_ushort v
23; GCN-HSA: flat_load_ushort v
24
Jan Vesely38814fa2016-08-27 19:09:43 +000025; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000026define void @global_load_v2i8(<2 x i8> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
27entry:
28 %ld = load <2 x i8>, <2 x i8> addrspace(1)* %in
29 store <2 x i8> %ld, <2 x i8> addrspace(1)* %out
30 ret void
31}
32
33; FUNC-LABEL: {{^}}global_load_v3i8:
34; GCN-NOHSA: buffer_load_dword v
35; GCN-HSA: flat_load_dword v
36
Jan Vesely38814fa2016-08-27 19:09:43 +000037; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000038define void @global_load_v3i8(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
39entry:
40 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
41 store <3 x i8> %ld, <3 x i8> addrspace(1)* %out
42 ret void
43}
44
45; FUNC-LABEL: {{^}}global_load_v4i8:
46; GCN-NOHSA: buffer_load_dword v
47; GCN-HSA: flat_load_dword v
48
Jan Vesely38814fa2016-08-27 19:09:43 +000049; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000050define void @global_load_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
51entry:
52 %ld = load <4 x i8>, <4 x i8> addrspace(1)* %in
53 store <4 x i8> %ld, <4 x i8> addrspace(1)* %out
54 ret void
55}
56
57; FUNC-LABEL: {{^}}global_load_v8i8:
58; GCN-NOHSA: buffer_load_dwordx2
59; GCN-HSA: flat_load_dwordx2
60
Jan Vesely38814fa2016-08-27 19:09:43 +000061; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000062define void @global_load_v8i8(<8 x i8> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
63entry:
64 %ld = load <8 x i8>, <8 x i8> addrspace(1)* %in
65 store <8 x i8> %ld, <8 x i8> addrspace(1)* %out
66 ret void
67}
68
69; FUNC-LABEL: {{^}}global_load_v16i8:
70; GCN-NOHSA: buffer_load_dwordx4
71
72; GCN-HSA: flat_load_dwordx4
73
Jan Vesely38814fa2016-08-27 19:09:43 +000074; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000075define void @global_load_v16i8(<16 x i8> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
76entry:
77 %ld = load <16 x i8>, <16 x i8> addrspace(1)* %in
78 store <16 x i8> %ld, <16 x i8> addrspace(1)* %out
79 ret void
80}
81
82; FUNC-LABEL: {{^}}global_zextload_i8_to_i32:
83; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}},
84; GCN-HSA: flat_load_ubyte
85
Jan Vesely38814fa2016-08-27 19:09:43 +000086; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000087define void @global_zextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
88 %a = load i8, i8 addrspace(1)* %in
89 %ext = zext i8 %a to i32
90 store i32 %ext, i32 addrspace(1)* %out
91 ret void
92}
93
94; FUNC-LABEL: {{^}}global_sextload_i8_to_i32:
95; GCN-NOHSA: buffer_load_sbyte
96; GCN-HSA: flat_load_sbyte
97
Jan Vesely38814fa2016-08-27 19:09:43 +000098; EG: VTX_READ_8 [[DST:T[0-9]\.[XYZW]]], [[DST]], 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +000099; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal
100; EG: 8
101define void @global_sextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
102 %ld = load i8, i8 addrspace(1)* %in
103 %ext = sext i8 %ld to i32
104 store i32 %ext, i32 addrspace(1)* %out
105 ret void
106}
107
108; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000109
110; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000111define void @global_zextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
112 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
113 %ext = zext <1 x i8> %load to <1 x i32>
114 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
115 ret void
116}
117
118; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000119
120; EG: VTX_READ_8 [[DST:T[0-9]\.[XYZW]]], [[DST]], 0, #1
121; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal
122; EG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000123define void @global_sextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
124 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
125 %ext = sext <1 x i8> %load to <1 x i32>
126 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
127 ret void
128}
129
130; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000131; GCN-NOHSA: buffer_load_ushort
132; GCN-HSA: flat_load_ushort
133
Jan Vesely38814fa2016-08-27 19:09:43 +0000134; EG: VTX_READ_16 [[DST:T[0-9]+\.X]], T{{[0-9]+}}.X, 0, #1
135; TODO: These should use DST, but for some there are redundant MOVs
136; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, literal
137; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000138define void @global_zextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
139 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
140 %ext = zext <2 x i8> %load to <2 x i32>
141 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
142 ret void
143}
144
145; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000146; GCN-NOHSA: buffer_load_ushort
147; GCN-HSA: flat_load_ushort
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000148
Jan Vesely38814fa2016-08-27 19:09:43 +0000149; EG: VTX_READ_16 [[DST:T[0-9]+\.X]], T{{[0-9]+}}.X, 0, #1
150; TODO: These should use DST, but for some there are redundant MOVs
151; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
152; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000153; EG-DAG: 8
154; EG-DAG: 8
155define void @global_sextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
156 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
157 %ext = sext <2 x i8> %load to <2 x i32>
158 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
159 ret void
160}
161
162; FUNC-LABEL: {{^}}global_zextload_v3i8_to_v3i32:
163; GCN-NOHSA: buffer_load_dword v
164; GCN-HSA: flat_load_dword v
165
166; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
167; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
168; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff,
Jan Vesely38814fa2016-08-27 19:09:43 +0000169
170; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
171; TODO: These should use DST, but for some there are redundant MOVs
172; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
173; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
174; EG-DAG: 8
175; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000176define void @global_zextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
177entry:
178 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
179 %ext = zext <3 x i8> %ld to <3 x i32>
180 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
181 ret void
182}
183
184; FUNC-LABEL: {{^}}global_sextload_v3i8_to_v3i32:
185; GCN-NOHSA: buffer_load_dword v
186; GCN-HSA: flat_load_dword v
187
188; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
189; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
190; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
Jan Vesely38814fa2016-08-27 19:09:43 +0000191
192; EG: VTX_READ_32 [[DST:T[0-9]+\.X]], T{{[0-9]+}}.X, 0, #1
193; TODO: These should use DST, but for some there are redundant MOVs
194; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
195; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
196; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
197; EG-DAG: 8
198; EG-DAG: 8
199; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000200define void @global_sextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
201entry:
202 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
203 %ext = sext <3 x i8> %ld to <3 x i32>
204 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
205 ret void
206}
207
208; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000209; GCN-NOHSA: buffer_load_dword
210; GCN-HSA: flat_load_dword
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000211
Jan Vesely38814fa2016-08-27 19:09:43 +0000212; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
213; TODO: These should use DST, but for some there are redundant MOVs
214; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
215; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
216; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
217; EG-DAG: 8
218; EG-DAG: 8
219; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000220define void @global_zextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
221 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
222 %ext = zext <4 x i8> %load to <4 x i32>
223 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
224 ret void
225}
226
227; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000228; GCN-NOHSA: buffer_load_dword
229; GCN-HSA: flat_load_dword
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000230
Jan Vesely38814fa2016-08-27 19:09:43 +0000231; EG: VTX_READ_32 [[DST:T[0-9]+\.X]], T{{[0-9]+}}.X, 0, #1
232; TODO: These should use DST, but for some there are redundant MOVs
233; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
234; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
235; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
236; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000237; EG-DAG: 8
238; EG-DAG: 8
239; EG-DAG: 8
240; EG-DAG: 8
241define void @global_sextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
242 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
243 %ext = sext <4 x i8> %load to <4 x i32>
244 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
245 ret void
246}
247
248; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000249
250; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
251; TODO: These should use DST, but for some there are redundant MOVs
252; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
253; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
254; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
255; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
256; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
257; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
258; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
259; EG-DAG: 8
260; EG-DAG: 8
261; EG-DAG: 8
262; EG-DAG: 8
263; EG-DAG: 8
264; EG-DAG: 8
265; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000266define void @global_zextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
267 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
268 %ext = zext <8 x i8> %load to <8 x i32>
269 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
270 ret void
271}
272
273; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000274
275; EG: VTX_READ_64 [[DST:T[0-9]+\.XY]], T{{[0-9]+}}.X, 0, #1
276; TODO: These should use DST, but for some there are redundant MOVs
277; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
278; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
279; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
280; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
281; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
282; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
283; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
284; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
285; EG-DAG: 8
286; EG-DAG: 8
287; EG-DAG: 8
288; EG-DAG: 8
289; EG-DAG: 8
290; EG-DAG: 8
291; EG-DAG: 8
292; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000293define void @global_sextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
294 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
295 %ext = sext <8 x i8> %load to <8 x i32>
296 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
297 ret void
298}
299
300; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000301
302; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
303; TODO: These should use DST, but for some there are redundant MOVs
304; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
305; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
306; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
307; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
308; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
309; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
310; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
311; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
312; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
313; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
314; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
315; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
316; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
317; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
318; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, {{.*}}literal
319; EG-DAG: 8
320; EG-DAG: 8
321; EG-DAG: 8
322; EG-DAG: 8
323; EG-DAG: 8
324; EG-DAG: 8
325; EG-DAG: 8
326; EG-DAG: 8
327; EG-DAG: 8
328; EG-DAG: 8
329; EG-DAG: 8
330; EG-DAG: 8
331; EG-DAG: 8
332; EG-DAG: 8
333; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000334define void @global_zextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
335 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
336 %ext = zext <16 x i8> %load to <16 x i32>
337 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
338 ret void
339}
340
341; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000342
343; EG: VTX_READ_128 [[DST:T[0-9]+\.XYZW]], T{{[0-9]+}}.X, 0, #1
344; TODO: These should use DST, but for some there are redundant MOVs
345; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
346; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
347; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
348; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
349; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
350; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
351; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
352; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
353; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
354; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
355; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
356; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
357; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
358; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
359; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
360; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
361; EG-DAG: 8
362; EG-DAG: 8
363; EG-DAG: 8
364; EG-DAG: 8
365; EG-DAG: 8
366; EG-DAG: 8
367; EG-DAG: 8
368; EG-DAG: 8
369; EG-DAG: 8
370; EG-DAG: 8
371; EG-DAG: 8
372; EG-DAG: 8
373; EG-DAG: 8
374; EG-DAG: 8
375; EG-DAG: 8
376; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000377define void @global_sextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
378 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
379 %ext = sext <16 x i8> %load to <16 x i32>
380 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
381 ret void
382}
383
384; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000385
386; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
387; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 16, #1
388; TODO: These should use DST, but for some there are redundant MOVs
389; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
390; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
391; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
392; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
393; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
394; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
395; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
396; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
397; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
398; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
399; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
400; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
401; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
402; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
403; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
404; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
405; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
406; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
407; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
408; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
409; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
410; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
411; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
412; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
413; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
414; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
415; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
416; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
417; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
418; EG-DAG: BFE_UINT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, {{.*}}literal
419; EG-DAG: 8
420; EG-DAG: 8
421; EG-DAG: 8
422; EG-DAG: 8
423; EG-DAG: 8
424; EG-DAG: 8
425; EG-DAG: 8
426; EG-DAG: 8
427; EG-DAG: 8
428; EG-DAG: 8
429; EG-DAG: 8
430; EG-DAG: 8
431; EG-DAG: 8
432; EG-DAG: 8
433; EG-DAG: 8
434; EG-DAG: 8
435; EG-DAG: 8
436; EG-DAG: 8
437; EG-DAG: 8
438; EG-DAG: 8
439; EG-DAG: 8
440; EG-DAG: 8
441; EG-DAG: 8
442; EG-DAG: 8
443; EG-DAG: 8
444; EG-DAG: 8
445; EG-DAG: 8
446; EG-DAG: 8
447; EG-DAG: 8
448; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000449define void @global_zextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
450 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
451 %ext = zext <32 x i8> %load to <32 x i32>
452 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
453 ret void
454}
455
456; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000457
458; EG-DAG: VTX_READ_128 [[DST_LO:T[0-9]+\.XYZW]], T{{[0-9]+}}.X, 0, #1
459; EG-DAG: VTX_READ_128 [[DST_HI:T[0-9]+\.XYZW]], T{{[0-9]+}}.X, 16, #1
460; TODO: These should use DST, but for some there are redundant MOVs
461; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
462; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
463; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
464; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
465; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
466; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
467; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
468; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
469; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
470; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
471; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
472; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
473; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
474; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
475; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
476; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
477; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
478; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
479; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
480; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
481; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
482; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
483; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
484; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
485; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
486; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
487; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
488; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
489; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
490; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
491; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
492; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9]+.[XYZW]}}, {{.*}}, 0.0, literal
493; EG-DAG: 8
494; EG-DAG: 8
495; EG-DAG: 8
496; EG-DAG: 8
497; EG-DAG: 8
498; EG-DAG: 8
499; EG-DAG: 8
500; EG-DAG: 8
501; EG-DAG: 8
502; EG-DAG: 8
503; EG-DAG: 8
504; EG-DAG: 8
505; EG-DAG: 8
506; EG-DAG: 8
507; EG-DAG: 8
508; EG-DAG: 8
509; EG-DAG: 8
510; EG-DAG: 8
511; EG-DAG: 8
512; EG-DAG: 8
513; EG-DAG: 8
514; EG-DAG: 8
515; EG-DAG: 8
516; EG-DAG: 8
517; EG-DAG: 8
518; EG-DAG: 8
519; EG-DAG: 8
520; EG-DAG: 8
521; EG-DAG: 8
522; EG-DAG: 8
523; EG-DAG: 8
524; EG-DAG: 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000525define void @global_sextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
526 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
527 %ext = sext <32 x i8> %load to <32 x i32>
528 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
529 ret void
530}
531
532; FUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000533
534; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 0, #1
535; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 16, #1
536; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 32, #1
537; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 48, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000538define void @global_zextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
539 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
540 %ext = zext <64 x i8> %load to <64 x i32>
541 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
542 ret void
543}
544
545; FUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000546
547; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 0, #1
548; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 16, #1
549; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 32, #1
550; EG-DAG: VTX_READ_128 {{T[0-9]+\.XYZW}}, T{{[0-9]+}}.X, 48, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000551define void @global_sextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
552 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
553 %ext = sext <64 x i8> %load to <64 x i32>
554 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
555 ret void
556}
557
558; FUNC-LABEL: {{^}}global_zextload_i8_to_i64:
559; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
560
561; GCN-NOHSA-DAG: buffer_load_ubyte v[[LO:[0-9]+]],
562; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
563
564; GCN-HSA-DAG: flat_load_ubyte v[[LO:[0-9]+]],
565; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000566
567; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
568; EG: MOV {{.*}}, 0.0
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000569define void @global_zextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
570 %a = load i8, i8 addrspace(1)* %in
571 %ext = zext i8 %a to i64
572 store i64 %ext, i64 addrspace(1)* %out
573 ret void
574}
575
576; FUNC-LABEL: {{^}}global_sextload_i8_to_i64:
577; GCN-NOHSA: buffer_load_sbyte v[[LO:[0-9]+]],
578; GCN-HSA: flat_load_sbyte v[[LO:[0-9]+]],
579; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
580
581; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
582; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
Jan Vesely38814fa2016-08-27 19:09:43 +0000583
584; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
585; EG: ASHR {{\**}} {{T[0-9]\.[XYZW]}}, {{.*}}, literal
586; TODO: Why not 7 ?
587; EG: 31
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000588define void @global_sextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
589 %a = load i8, i8 addrspace(1)* %in
590 %ext = sext i8 %a to i64
591 store i64 %ext, i64 addrspace(1)* %out
592 ret void
593}
594
595; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000596
597; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
598; EG: MOV {{.*}}, 0.0
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000599define void @global_zextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
600 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
601 %ext = zext <1 x i8> %load to <1 x i64>
602 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
603 ret void
604}
605
606; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000607
608; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
609; EG: ASHR {{\**}} {{T[0-9]\.[XYZW]}}, {{.*}}, literal
610; TODO: Why not 7 ?
611; EG: 31
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000612define void @global_sextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
613 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
614 %ext = sext <1 x i8> %load to <1 x i64>
615 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
616 ret void
617}
618
619; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000620
621; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000622define void @global_zextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
623 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
624 %ext = zext <2 x i8> %load to <2 x i64>
625 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
626 ret void
627}
628
629; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000630
631; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000632define void @global_sextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
633 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
634 %ext = sext <2 x i8> %load to <2 x i64>
635 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
636 ret void
637}
638
639; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000640
641; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000642define void @global_zextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
643 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
644 %ext = zext <4 x i8> %load to <4 x i64>
645 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
646 ret void
647}
648
649; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000650
651; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000652define void @global_sextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
653 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
654 %ext = sext <4 x i8> %load to <4 x i64>
655 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
656 ret void
657}
658
659; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000660
661; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000662define void @global_zextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
663 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
664 %ext = zext <8 x i8> %load to <8 x i64>
665 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
666 ret void
667}
668
669; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000670
671; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000672define void @global_sextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
673 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
674 %ext = sext <8 x i8> %load to <8 x i64>
675 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
676 ret void
677}
678
679; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000680
681; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000682define void @global_zextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
683 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
684 %ext = zext <16 x i8> %load to <16 x i64>
685 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
686 ret void
687}
688
689; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000690
691; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000692define void @global_sextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
693 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
694 %ext = sext <16 x i8> %load to <16 x i64>
695 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
696 ret void
697}
698
699; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000700
701; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
702; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 16, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000703define void @global_zextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
704 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
705 %ext = zext <32 x i8> %load to <32 x i64>
706 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
707 ret void
708}
709
710; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000711
712; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
713; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 16, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000714define void @global_sextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
715 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
716 %ext = sext <32 x i8> %load to <32 x i64>
717 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
718 ret void
719}
720
721; XFUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i64:
722; define void @global_zextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
723; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
724; %ext = zext <64 x i8> %load to <64 x i64>
725; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
726; ret void
727; }
728
729; XFUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i64:
730; define void @global_sextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
731; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
732; %ext = sext <64 x i8> %load to <64 x i64>
733; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
734; ret void
735; }
736
737; FUNC-LABEL: {{^}}global_zextload_i8_to_i16:
738; GCN-NOHSA: buffer_load_ubyte v[[VAL:[0-9]+]],
739; GCN-NOHSA: buffer_store_short v[[VAL]]
740
741; GCN-HSA: flat_load_ubyte v[[VAL:[0-9]+]],
742; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000743
744; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000745define void @global_zextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
746 %a = load i8, i8 addrspace(1)* %in
747 %ext = zext i8 %a to i16
748 store i16 %ext, i16 addrspace(1)* %out
749 ret void
750}
751
752; FUNC-LABEL: {{^}}global_sextload_i8_to_i16:
753; GCN-NOHSA: buffer_load_sbyte v[[VAL:[0-9]+]],
754; GCN-HSA: flat_load_sbyte v[[VAL:[0-9]+]],
755
756; GCN-NOHSA: buffer_store_short v[[VAL]]
757; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000758
759; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
760; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000761define void @global_sextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
762 %a = load i8, i8 addrspace(1)* %in
763 %ext = sext i8 %a to i16
764 store i16 %ext, i16 addrspace(1)* %out
765 ret void
766}
767
768; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000769
770; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000771define void @global_zextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
772 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
773 %ext = zext <1 x i8> %load to <1 x i16>
774 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
775 ret void
776}
777
778; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000779
780; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
781; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000782define void @global_sextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
783 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
784 %ext = sext <1 x i8> %load to <1 x i16>
785 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
786 ret void
787}
788
789; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000790
791; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000792define void @global_zextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
793 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
794 %ext = zext <2 x i8> %load to <2 x i16>
795 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
796 ret void
797}
798
799; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000800
801; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
802; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
803; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000804define void @global_sextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
805 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
806 %ext = sext <2 x i8> %load to <2 x i16>
807 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
808 ret void
809}
810
811; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000812
813; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000814define void @global_zextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
815 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
816 %ext = zext <4 x i8> %load to <4 x i16>
817 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
818 ret void
819}
820
821; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000822
823; EG: VTX_READ_32 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0, #1
824; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
825; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
826; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
827; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000828define void @global_sextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
829 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
830 %ext = sext <4 x i8> %load to <4 x i16>
831 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
832 ret void
833}
834
835; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000836
837; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000838define void @global_zextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
839 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
840 %ext = zext <8 x i8> %load to <8 x i16>
841 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
842 ret void
843}
844
845; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000846
847; EG: VTX_READ_64 T{{[0-9]+}}.XY, T{{[0-9]+}}.X, 0, #1
848; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
849; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
850; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
851; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
852; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
853; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
854; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
855; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000856define void @global_sextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
857 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
858 %ext = sext <8 x i8> %load to <8 x i16>
859 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
860 ret void
861}
862
863; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000864
865; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000866define void @global_zextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
867 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
868 %ext = zext <16 x i8> %load to <16 x i16>
869 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
870 ret void
871}
872
873; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000874
875; EG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
876; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
877; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
878; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
879; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
880; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
881; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
882; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
883; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
884; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
885; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
886; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
887; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
888; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
889; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
890; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
891; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000892define void @global_sextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
893 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
894 %ext = sext <16 x i8> %load to <16 x i16>
895 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
896 ret void
897}
898
899; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000900
901; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
902; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 16, #1
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000903define void @global_zextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
904 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
905 %ext = zext <32 x i8> %load to <32 x i16>
906 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
907 ret void
908}
909
910; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000911
912; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 0, #1
913; EG-DAG: VTX_READ_128 T{{[0-9]+}}.XYZW, T{{[0-9]+}}.X, 16, #1
914; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
915; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
916; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
917; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
918; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
919; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
920; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
921; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
922; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
923; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
924; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
925; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
926; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
927; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
928; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
929; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
930; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
931; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
932; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
933; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
934; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
935; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
936; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
937; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
938; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
939; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
940; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
941; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
942; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
943; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
944; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
945; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, {{.*}}, 0.0, literal
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000946define void @global_sextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
947 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
948 %ext = sext <32 x i8> %load to <32 x i16>
949 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
950 ret void
951}
952
953; XFUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i16:
954; define void @global_zextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
955; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
956; %ext = zext <64 x i8> %load to <64 x i16>
957; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
958; ret void
959; }
960
961; XFUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i16:
962; define void @global_sextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
963; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
964; %ext = sext <64 x i8> %load to <64 x i16>
965; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
966; ret void
967; }
968
969attributes #0 = { nounwind }