Revert 239644.
[oota-llvm.git] / test / CodeGen / R600 / global-extload-i8.ll
1 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3 ; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5 ; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
6 ; SI: buffer_load_ubyte
7 ; SI: buffer_store_dword
8 ; SI: s_endpgm
9 define void @zextload_global_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
10   %a = load i8, i8 addrspace(1)* %in
11   %ext = zext i8 %a to i32
12   store i32 %ext, i32 addrspace(1)* %out
13   ret void
14 }
15
16 ; FUNC-LABEL: {{^}}sextload_global_i8_to_i32:
17 ; SI: buffer_load_sbyte
18 ; SI: buffer_store_dword
19 ; SI: s_endpgm
20 define void @sextload_global_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
21   %a = load i8, i8 addrspace(1)* %in
22   %ext = sext i8 %a to i32
23   store i32 %ext, i32 addrspace(1)* %out
24   ret void
25 }
26
27 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i32:
28 ; SI: s_endpgm
29 define void @zextload_global_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
30   %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
31   %ext = zext <1 x i8> %load to <1 x i32>
32   store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
33   ret void
34 }
35
36 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i32:
37 ; SI: s_endpgm
38 define void @sextload_global_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
39   %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
40   %ext = sext <1 x i8> %load to <1 x i32>
41   store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
42   ret void
43 }
44
45 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i32:
46 ; SI: s_endpgm
47 define void @zextload_global_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
48   %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
49   %ext = zext <2 x i8> %load to <2 x i32>
50   store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
51   ret void
52 }
53
54 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i32:
55 ; SI: s_endpgm
56 define void @sextload_global_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
57   %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
58   %ext = sext <2 x i8> %load to <2 x i32>
59   store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
60   ret void
61 }
62
63 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i32:
64 ; SI: s_endpgm
65 define void @zextload_global_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
66   %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
67   %ext = zext <4 x i8> %load to <4 x i32>
68   store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
69   ret void
70 }
71
72 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i32:
73 ; SI: s_endpgm
74 define void @sextload_global_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
75   %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
76   %ext = sext <4 x i8> %load to <4 x i32>
77   store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
78   ret void
79 }
80
81 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i32:
82 ; SI: s_endpgm
83 define void @zextload_global_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
84   %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
85   %ext = zext <8 x i8> %load to <8 x i32>
86   store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
87   ret void
88 }
89
90 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i32:
91 ; SI: s_endpgm
92 define void @sextload_global_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
93   %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
94   %ext = sext <8 x i8> %load to <8 x i32>
95   store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
96   ret void
97 }
98
99 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i32:
100 ; SI: s_endpgm
101 define void @zextload_global_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
102   %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
103   %ext = zext <16 x i8> %load to <16 x i32>
104   store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
105   ret void
106 }
107
108 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i32:
109 ; SI: s_endpgm
110 define void @sextload_global_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
111   %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
112   %ext = sext <16 x i8> %load to <16 x i32>
113   store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
114   ret void
115 }
116
117 ; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i32:
118 ; XSI: s_endpgm
119 ; define void @zextload_global_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
120 ;   %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
121 ;   %ext = zext <32 x i8> %load to <32 x i32>
122 ;   store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
123 ;   ret void
124 ; }
125
126 ; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i32:
127 ; XSI: s_endpgm
128 ; define void @sextload_global_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
129 ;   %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
130 ;   %ext = sext <32 x i8> %load to <32 x i32>
131 ;   store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
132 ;   ret void
133 ; }
134
135 ; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i32:
136 ; XSI: s_endpgm
137 ; define void @zextload_global_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
138 ;   %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
139 ;   %ext = zext <64 x i8> %load to <64 x i32>
140 ;   store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
141 ;   ret void
142 ; }
143
144 ; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i32:
145 ; XSI: s_endpgm
146 ; define void @sextload_global_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
147 ;   %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
148 ;   %ext = sext <64 x i8> %load to <64 x i32>
149 ;   store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
150 ;   ret void
151 ; }
152
153 ; FUNC-LABEL: {{^}}zextload_global_i8_to_i64:
154 ; SI: buffer_load_ubyte v[[LO:[0-9]+]],
155 ; SI: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
156 ; SI: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
157 define void @zextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
158   %a = load i8, i8 addrspace(1)* %in
159   %ext = zext i8 %a to i64
160   store i64 %ext, i64 addrspace(1)* %out
161   ret void
162 }
163
164 ; FUNC-LABEL: {{^}}sextload_global_i8_to_i64:
165 ; SI: buffer_load_sbyte [[LOAD:v[0-9]+]],
166 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[LOAD]]
167 ; SI: buffer_store_dwordx2
168 define void @sextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
169   %a = load i8, i8 addrspace(1)* %in
170   %ext = sext i8 %a to i64
171   store i64 %ext, i64 addrspace(1)* %out
172   ret void
173 }
174
175 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i64:
176 ; SI: s_endpgm
177 define void @zextload_global_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
178   %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
179   %ext = zext <1 x i8> %load to <1 x i64>
180   store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
181   ret void
182 }
183
184 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i64:
185 ; SI: s_endpgm
186 define void @sextload_global_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
187   %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
188   %ext = sext <1 x i8> %load to <1 x i64>
189   store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
190   ret void
191 }
192
193 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i64:
194 ; SI: s_endpgm
195 define void @zextload_global_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
196   %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
197   %ext = zext <2 x i8> %load to <2 x i64>
198   store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
199   ret void
200 }
201
202 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i64:
203 ; SI: s_endpgm
204 define void @sextload_global_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
205   %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
206   %ext = sext <2 x i8> %load to <2 x i64>
207   store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
208   ret void
209 }
210
211 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i64:
212 ; SI: s_endpgm
213 define void @zextload_global_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
214   %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
215   %ext = zext <4 x i8> %load to <4 x i64>
216   store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
217   ret void
218 }
219
220 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i64:
221 ; SI: s_endpgm
222 define void @sextload_global_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
223   %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
224   %ext = sext <4 x i8> %load to <4 x i64>
225   store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
226   ret void
227 }
228
229 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i64:
230 ; SI: s_endpgm
231 define void @zextload_global_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
232   %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
233   %ext = zext <8 x i8> %load to <8 x i64>
234   store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
235   ret void
236 }
237
238 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i64:
239 ; SI: s_endpgm
240 define void @sextload_global_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
241   %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
242   %ext = sext <8 x i8> %load to <8 x i64>
243   store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
244   ret void
245 }
246
247 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i64:
248 ; SI: s_endpgm
249 define void @zextload_global_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
250   %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
251   %ext = zext <16 x i8> %load to <16 x i64>
252   store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
253   ret void
254 }
255
256 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i64:
257 ; SI: s_endpgm
258 define void @sextload_global_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
259   %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
260   %ext = sext <16 x i8> %load to <16 x i64>
261   store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
262   ret void
263 }
264
265 ; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i64:
266 ; XSI: s_endpgm
267 ; define void @zextload_global_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
268 ;   %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
269 ;   %ext = zext <32 x i8> %load to <32 x i64>
270 ;   store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
271 ;   ret void
272 ; }
273
274 ; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i64:
275 ; XSI: s_endpgm
276 ; define void @sextload_global_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
277 ;   %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
278 ;   %ext = sext <32 x i8> %load to <32 x i64>
279 ;   store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
280 ;   ret void
281 ; }
282
283 ; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i64:
284 ; XSI: s_endpgm
285 ; define void @zextload_global_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
286 ;   %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
287 ;   %ext = zext <64 x i8> %load to <64 x i64>
288 ;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
289 ;   ret void
290 ; }
291
292 ; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i64:
293 ; XSI: s_endpgm
294 ; define void @sextload_global_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
295 ;   %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
296 ;   %ext = sext <64 x i8> %load to <64 x i64>
297 ;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
298 ;   ret void
299 ; }