[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / global-extload-i16.ll
blobbc2def23f5b1391e4083415af04aed312605e63f
1 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3 ; XUN: llc -mtriple=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4 ; FIXME: cypress is broken because the bigger testcases spill and it's not implemented
6 ; FUNC-LABEL: {{^}}zextload_global_i16_to_i32:
7 ; SI: buffer_load_ushort
8 ; SI: buffer_store_dword
9 ; SI: s_endpgm
10 define amdgpu_kernel void @zextload_global_i16_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
11   %a = load i16, ptr addrspace(1) %in
12   %ext = zext i16 %a to i32
13   store i32 %ext, ptr addrspace(1) %out
14   ret void
17 ; FUNC-LABEL: {{^}}sextload_global_i16_to_i32:
18 ; SI: buffer_load_sshort
19 ; SI: buffer_store_dword
20 ; SI: s_endpgm
21 define amdgpu_kernel void @sextload_global_i16_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
22   %a = load i16, ptr addrspace(1) %in
23   %ext = sext i16 %a to i32
24   store i32 %ext, ptr addrspace(1) %out
25   ret void
28 ; FUNC-LABEL: {{^}}zextload_global_v1i16_to_v1i32:
29 ; SI: buffer_load_ushort
30 ; SI: s_endpgm
31 define amdgpu_kernel void @zextload_global_v1i16_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
32   %load = load <1 x i16>, ptr addrspace(1) %in
33   %ext = zext <1 x i16> %load to <1 x i32>
34   store <1 x i32> %ext, ptr addrspace(1) %out
35   ret void
38 ; FUNC-LABEL: {{^}}sextload_global_v1i16_to_v1i32:
39 ; SI: buffer_load_sshort
40 ; SI: s_endpgm
41 define amdgpu_kernel void @sextload_global_v1i16_to_v1i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
42   %load = load <1 x i16>, ptr addrspace(1) %in
43   %ext = sext <1 x i16> %load to <1 x i32>
44   store <1 x i32> %ext, ptr addrspace(1) %out
45   ret void
48 ; FUNC-LABEL: {{^}}zextload_global_v2i16_to_v2i32:
49 ; SI: s_endpgm
50 define amdgpu_kernel void @zextload_global_v2i16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
51   %load = load <2 x i16>, ptr addrspace(1) %in
52   %ext = zext <2 x i16> %load to <2 x i32>
53   store <2 x i32> %ext, ptr addrspace(1) %out
54   ret void
57 ; FUNC-LABEL: {{^}}sextload_global_v2i16_to_v2i32:
58 ; SI: s_endpgm
59 define amdgpu_kernel void @sextload_global_v2i16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
60   %load = load <2 x i16>, ptr addrspace(1) %in
61   %ext = sext <2 x i16> %load to <2 x i32>
62   store <2 x i32> %ext, ptr addrspace(1) %out
63   ret void
66 ; FUNC-LABEL: {{^}}zextload_global_v4i16_to_v4i32:
67 ; SI: s_endpgm
68 define amdgpu_kernel void @zextload_global_v4i16_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
69   %load = load <4 x i16>, ptr addrspace(1) %in
70   %ext = zext <4 x i16> %load to <4 x i32>
71   store <4 x i32> %ext, ptr addrspace(1) %out
72   ret void
75 ; FUNC-LABEL: {{^}}sextload_global_v4i16_to_v4i32:
76 ; SI: s_endpgm
77 define amdgpu_kernel void @sextload_global_v4i16_to_v4i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
78   %load = load <4 x i16>, ptr addrspace(1) %in
79   %ext = sext <4 x i16> %load to <4 x i32>
80   store <4 x i32> %ext, ptr addrspace(1) %out
81   ret void
84 ; FUNC-LABEL: {{^}}zextload_global_v8i16_to_v8i32:
85 ; SI: s_endpgm
86 define amdgpu_kernel void @zextload_global_v8i16_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
87   %load = load <8 x i16>, ptr addrspace(1) %in
88   %ext = zext <8 x i16> %load to <8 x i32>
89   store <8 x i32> %ext, ptr addrspace(1) %out
90   ret void
93 ; FUNC-LABEL: {{^}}sextload_global_v8i16_to_v8i32:
94 ; SI: s_endpgm
95 define amdgpu_kernel void @sextload_global_v8i16_to_v8i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
96   %load = load <8 x i16>, ptr addrspace(1) %in
97   %ext = sext <8 x i16> %load to <8 x i32>
98   store <8 x i32> %ext, ptr addrspace(1) %out
99   ret void
102 ; FUNC-LABEL: {{^}}zextload_global_v16i16_to_v16i32:
103 ; SI: s_endpgm
104 define amdgpu_kernel void @zextload_global_v16i16_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
105   %load = load <16 x i16>, ptr addrspace(1) %in
106   %ext = zext <16 x i16> %load to <16 x i32>
107   store <16 x i32> %ext, ptr addrspace(1) %out
108   ret void
111 ; FUNC-LABEL: {{^}}sextload_global_v16i16_to_v16i32:
112 ; SI: s_endpgm
113 define amdgpu_kernel void @sextload_global_v16i16_to_v16i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
114   %load = load <16 x i16>, ptr addrspace(1) %in
115   %ext = sext <16 x i16> %load to <16 x i32>
116   store <16 x i32> %ext, ptr addrspace(1) %out
117   ret void
120 ; FUNC-LABEL: {{^}}zextload_global_v32i16_to_v32i32:
121 ; SI: s_endpgm
122 define amdgpu_kernel void @zextload_global_v32i16_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
123   %load = load <32 x i16>, ptr addrspace(1) %in
124   %ext = zext <32 x i16> %load to <32 x i32>
125   store <32 x i32> %ext, ptr addrspace(1) %out
126   ret void
129 ; FUNC-LABEL: {{^}}sextload_global_v32i16_to_v32i32:
130 ; SI: s_endpgm
131 define amdgpu_kernel void @sextload_global_v32i16_to_v32i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
132   %load = load <32 x i16>, ptr addrspace(1) %in
133   %ext = sext <32 x i16> %load to <32 x i32>
134   store <32 x i32> %ext, ptr addrspace(1) %out
135   ret void
138 ; FUNC-LABEL: {{^}}zextload_global_v64i16_to_v64i32:
139 ; SI: s_endpgm
140 define amdgpu_kernel void @zextload_global_v64i16_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
141   %load = load <64 x i16>, ptr addrspace(1) %in
142   %ext = zext <64 x i16> %load to <64 x i32>
143   store <64 x i32> %ext, ptr addrspace(1) %out
144   ret void
147 ; FUNC-LABEL: {{^}}sextload_global_v64i16_to_v64i32:
148 ; SI: s_endpgm
149 define amdgpu_kernel void @sextload_global_v64i16_to_v64i32(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
150   %load = load <64 x i16>, ptr addrspace(1) %in
151   %ext = sext <64 x i16> %load to <64 x i32>
152   store <64 x i32> %ext, ptr addrspace(1) %out
153   ret void
156 ; FUNC-LABEL: {{^}}zextload_global_i16_to_i64:
157 ; SI-DAG: buffer_load_ushort v[[LO:[0-9]+]],
158 ; SI-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
159 ; SI: buffer_store_dwordx2 v[[[LO]]:[[HI]]]
160 define amdgpu_kernel void @zextload_global_i16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
161   %a = load i16, ptr addrspace(1) %in
162   %ext = zext i16 %a to i64
163   store i64 %ext, ptr addrspace(1) %out
164   ret void
167 ; FUNC-LABEL: {{^}}sextload_global_i16_to_i64:
168 ; VI: buffer_load_ushort [[LOAD:v[0-9]+]], s[{{[0-9]+:[0-9]+}}], 0
169 ; VI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[LOAD]]
170 ; VI: buffer_store_dwordx2 v[{{[0-9]+:[0-9]+}}], s[{{[0-9]+:[0-9]+}}], 0
171 define amdgpu_kernel void @sextload_global_i16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
172   %a = load i16, ptr addrspace(1) %in
173   %ext = sext i16 %a to i64
174   store i64 %ext, ptr addrspace(1) %out
175   ret void
178 ; FUNC-LABEL: {{^}}zextload_global_v1i16_to_v1i64:
179 ; SI: s_endpgm
180 define amdgpu_kernel void @zextload_global_v1i16_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
181   %load = load <1 x i16>, ptr addrspace(1) %in
182   %ext = zext <1 x i16> %load to <1 x i64>
183   store <1 x i64> %ext, ptr addrspace(1) %out
184   ret void
187 ; FUNC-LABEL: {{^}}sextload_global_v1i16_to_v1i64:
188 ; SI: s_endpgm
189 define amdgpu_kernel void @sextload_global_v1i16_to_v1i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
190   %load = load <1 x i16>, ptr addrspace(1) %in
191   %ext = sext <1 x i16> %load to <1 x i64>
192   store <1 x i64> %ext, ptr addrspace(1) %out
193   ret void
196 ; FUNC-LABEL: {{^}}zextload_global_v2i16_to_v2i64:
197 ; SI: s_endpgm
198 define amdgpu_kernel void @zextload_global_v2i16_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
199   %load = load <2 x i16>, ptr addrspace(1) %in
200   %ext = zext <2 x i16> %load to <2 x i64>
201   store <2 x i64> %ext, ptr addrspace(1) %out
202   ret void
205 ; FUNC-LABEL: {{^}}sextload_global_v2i16_to_v2i64:
206 ; SI: s_endpgm
207 define amdgpu_kernel void @sextload_global_v2i16_to_v2i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
208   %load = load <2 x i16>, ptr addrspace(1) %in
209   %ext = sext <2 x i16> %load to <2 x i64>
210   store <2 x i64> %ext, ptr addrspace(1) %out
211   ret void
214 ; FUNC-LABEL: {{^}}zextload_global_v4i16_to_v4i64:
215 ; SI: s_endpgm
216 define amdgpu_kernel void @zextload_global_v4i16_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
217   %load = load <4 x i16>, ptr addrspace(1) %in
218   %ext = zext <4 x i16> %load to <4 x i64>
219   store <4 x i64> %ext, ptr addrspace(1) %out
220   ret void
223 ; FUNC-LABEL: {{^}}sextload_global_v4i16_to_v4i64:
224 ; SI: s_endpgm
225 define amdgpu_kernel void @sextload_global_v4i16_to_v4i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
226   %load = load <4 x i16>, ptr addrspace(1) %in
227   %ext = sext <4 x i16> %load to <4 x i64>
228   store <4 x i64> %ext, ptr addrspace(1) %out
229   ret void
232 ; FUNC-LABEL: {{^}}zextload_global_v8i16_to_v8i64:
233 ; SI: s_endpgm
234 define amdgpu_kernel void @zextload_global_v8i16_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
235   %load = load <8 x i16>, ptr addrspace(1) %in
236   %ext = zext <8 x i16> %load to <8 x i64>
237   store <8 x i64> %ext, ptr addrspace(1) %out
238   ret void
241 ; FUNC-LABEL: {{^}}sextload_global_v8i16_to_v8i64:
242 ; SI: s_endpgm
243 define amdgpu_kernel void @sextload_global_v8i16_to_v8i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
244   %load = load <8 x i16>, ptr addrspace(1) %in
245   %ext = sext <8 x i16> %load to <8 x i64>
246   store <8 x i64> %ext, ptr addrspace(1) %out
247   ret void
250 ; FUNC-LABEL: {{^}}zextload_global_v16i16_to_v16i64:
251 ; SI: s_endpgm
252 define amdgpu_kernel void @zextload_global_v16i16_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
253   %load = load <16 x i16>, ptr addrspace(1) %in
254   %ext = zext <16 x i16> %load to <16 x i64>
255   store <16 x i64> %ext, ptr addrspace(1) %out
256   ret void
259 ; FUNC-LABEL: {{^}}sextload_global_v16i16_to_v16i64:
260 ; SI: s_endpgm
261 define amdgpu_kernel void @sextload_global_v16i16_to_v16i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
262   %load = load <16 x i16>, ptr addrspace(1) %in
263   %ext = sext <16 x i16> %load to <16 x i64>
264   store <16 x i64> %ext, ptr addrspace(1) %out
265   ret void
268 ; FUNC-LABEL: {{^}}zextload_global_v32i16_to_v32i64:
269 ; SI: s_endpgm
270 define amdgpu_kernel void @zextload_global_v32i16_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
271   %load = load <32 x i16>, ptr addrspace(1) %in
272   %ext = zext <32 x i16> %load to <32 x i64>
273   store <32 x i64> %ext, ptr addrspace(1) %out
274   ret void
277 ; FUNC-LABEL: {{^}}sextload_global_v32i16_to_v32i64:
278 ; SI: s_endpgm
279 define amdgpu_kernel void @sextload_global_v32i16_to_v32i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
280   %load = load <32 x i16>, ptr addrspace(1) %in
281   %ext = sext <32 x i16> %load to <32 x i64>
282   store <32 x i64> %ext, ptr addrspace(1) %out
283   ret void
286 ; FUNC-LABEL: {{^}}zextload_global_v64i16_to_v64i64:
287 ; SI: s_endpgm
288 define amdgpu_kernel void @zextload_global_v64i16_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
289   %load = load <64 x i16>, ptr addrspace(1) %in
290   %ext = zext <64 x i16> %load to <64 x i64>
291   store <64 x i64> %ext, ptr addrspace(1) %out
292   ret void
295 ; FUNC-LABEL: {{^}}sextload_global_v64i16_to_v64i64:
296 ; SI: s_endpgm
297 define amdgpu_kernel void @sextload_global_v64i16_to_v64i64(ptr addrspace(1) %out, ptr addrspace(1) nocapture %in) nounwind {
298   %load = load <64 x i16>, ptr addrspace(1) %in
299   %ext = sext <64 x i16> %load to <64 x i64>
300   store <64 x i64> %ext, ptr addrspace(1) %out
301   ret void