[Github] Label lldb-dap PRs (#125139)
[llvm-project.git] / clang / test / CodeGen / SystemZ / builtins-systemz-zvector3.c
blobce8b315127237db2553bc3c100f3edc5723d531b
1 // REQUIRES: systemz-registered-target
2 // RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \
3 // RUN: -O2 -fzvector -flax-vector-conversions=none \
4 // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s
5 // RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \
6 // RUN: -O2 -fzvector -flax-vector-conversions=none \
7 // RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM
9 #include <vecintrin.h>
11 volatile vector signed char vsc;
12 volatile vector signed short vss;
13 volatile vector signed int vsi;
14 volatile vector signed long long vsl;
15 volatile vector signed __int128 vslll;
16 volatile vector unsigned char vuc;
17 volatile vector unsigned short vus;
18 volatile vector unsigned int vui;
19 volatile vector unsigned long long vul;
20 volatile vector unsigned __int128 vulll;
21 volatile vector bool char vbc;
22 volatile vector bool short vbs;
23 volatile vector bool int vbi;
24 volatile vector bool long long vbl;
25 volatile vector float vf;
26 volatile vector double vd;
28 volatile signed char sc;
29 volatile signed short ss;
30 volatile signed int si;
31 volatile signed long long sl;
32 volatile unsigned char uc;
33 volatile unsigned short us;
34 volatile unsigned int ui;
35 volatile unsigned long long ul;
36 volatile float f;
37 volatile double d;
39 const void * volatile cptr;
40 const signed char * volatile cptrsc;
41 const signed short * volatile cptrss;
42 const signed int * volatile cptrsi;
43 const signed long long * volatile cptrsl;
44 const signed __int128 * volatile cptrslll;
45 const unsigned char * volatile cptruc;
46 const unsigned short * volatile cptrus;
47 const unsigned int * volatile cptrui;
48 const unsigned long long * volatile cptrul;
49 const unsigned __int128 * volatile cptrulll;
50 const float * volatile cptrf;
51 const double * volatile cptrd;
53 void * volatile ptr;
54 signed char * volatile ptrsc;
55 signed short * volatile ptrss;
56 signed int * volatile ptrsi;
57 signed long long * volatile ptrsl;
58 signed __int128 * volatile ptrslll;
59 unsigned char * volatile ptruc;
60 unsigned short * volatile ptrus;
61 unsigned int * volatile ptrui;
62 unsigned long long * volatile ptrul;
63 unsigned __int128 * volatile ptrulll;
64 float * volatile ptrf;
65 double * volatile ptrd;
67 volatile unsigned int len;
68 volatile int idx;
69 int cc;
71 void test_core(void) {
72 // CHECK-ASM-LABEL: test_core
73 vector signed short vss2;
74 vector signed int vsi2;
75 vector signed long long vsl2;
76 vector unsigned short vus2;
77 vector unsigned int vui2;
78 vector unsigned long long vul2;
79 vector float vf2;
80 vector double vd2;
82 vss += vec_revb(vec_xl(idx, cptrss));
83 // CHECK-ASM: vlbrh
84 vus += vec_revb(vec_xl(idx, cptrus));
85 // CHECK-ASM: vlbrh
86 vsi += vec_revb(vec_xl(idx, cptrsi));
87 // CHECK-ASM: vlbrf
88 vui += vec_revb(vec_xl(idx, cptrui));
89 // CHECK-ASM: vlbrf
90 vsl += vec_revb(vec_xl(idx, cptrsl));
91 // CHECK-ASM: vlbrg
92 vul += vec_revb(vec_xl(idx, cptrul));
93 // CHECK-ASM: vlbrg
94 vslll += vec_revb(vec_xl(idx, cptrslll));
95 // CHECK-ASM: vlbrq
96 vulll += vec_revb(vec_xl(idx, cptrulll));
97 // CHECK-ASM: vlbrq
98 vf += vec_revb(vec_xl(idx, cptrf));
99 // CHECK-ASM: vlbrf
100 vd += vec_revb(vec_xl(idx, cptrd));
101 // CHECK-ASM: vlbrg
103 vec_xst(vec_revb(vss), idx, ptrss);
104 // CHECK-ASM: vstbrh
105 vec_xst(vec_revb(vus), idx, ptrus);
106 // CHECK-ASM: vstbrh
107 vec_xst(vec_revb(vsi), idx, ptrsi);
108 // CHECK-ASM: vstbrf
109 vec_xst(vec_revb(vui), idx, ptrui);
110 // CHECK-ASM: vstbrf
111 vec_xst(vec_revb(vsl), idx, ptrsl);
112 // CHECK-ASM: vstbrg
113 vec_xst(vec_revb(vul), idx, ptrul);
114 // CHECK-ASM: vstbrg
115 vec_xst(vec_revb(vslll), idx, ptrslll);
116 // CHECK-ASM: vstbrq
117 vec_xst(vec_revb(vulll), idx, ptrulll);
118 // CHECK-ASM: vstbrq
119 vec_xst(vec_revb(vf), idx, ptrf);
120 // CHECK-ASM: vstbrf
121 vec_xst(vec_revb(vd), idx, ptrd);
122 // CHECK-ASM: vstbrg
124 vss += vec_revb(vec_insert_and_zero(cptrss));
125 // CHECK-ASM: vllebrzh
126 vus += vec_revb(vec_insert_and_zero(cptrus));
127 // CHECK-ASM: vllebrzh
128 vsi += vec_revb(vec_insert_and_zero(cptrsi));
129 // CHECK-ASM: vllebrzf
130 vui += vec_revb(vec_insert_and_zero(cptrui));
131 // CHECK-ASM: vllebrzf
132 vsl += vec_revb(vec_insert_and_zero(cptrsl));
133 // CHECK-ASM: vllebrzg
134 vul += vec_revb(vec_insert_and_zero(cptrul));
135 // CHECK-ASM: vllebrzg
136 vf += vec_revb(vec_insert_and_zero(cptrf));
137 // CHECK-ASM: vllebrzf
138 vd += vec_revb(vec_insert_and_zero(cptrd));
139 // CHECK-ASM: vllebrzg
141 vss += vec_revb(vec_splats(ss));
142 // CHECK-ASM: vlbrreph
143 vus += vec_revb(vec_splats(us));
144 // CHECK-ASM: vlbrreph
145 vsi += vec_revb(vec_splats(si));
146 // CHECK-ASM: vlbrrepf
147 vui += vec_revb(vec_splats(ui));
148 // CHECK-ASM: vlbrrepf
149 vsl += vec_revb(vec_splats(sl));
150 // CHECK-ASM: vlbrrepg
151 vul += vec_revb(vec_splats(ul));
152 // CHECK-ASM: vlbrrepg
153 vf += vec_revb(vec_splats(f));
154 // CHECK-ASM: vlbrrepf
155 vd += vec_revb(vec_splats(d));
156 // CHECK-ASM: vlbrrepg
158 vus = vec_splats(__builtin_bswap16(us));
159 // CHECK-ASM: vlbrreph
160 vui = vec_splats(__builtin_bswap32(ui));
161 // CHECK-ASM: vlbrrepf
162 vul = vec_splats((unsigned long long)__builtin_bswap64(ul));
163 // CHECK-ASM: vlbrrepg
165 vss2 = vss;
166 vss += vec_revb(vec_insert(ss, vec_revb(vss2), 0));
167 // CHECK-ASM: vlebrh
168 vus2 = vus;
169 vus += vec_revb(vec_insert(us, vec_revb(vus2), 0));
170 // CHECK-ASM: vlebrh
171 vsi2 = vsi;
172 vsi += vec_revb(vec_insert(si, vec_revb(vsi2), 0));
173 // CHECK-ASM: vlebrf
174 vui2 = vui;
175 vui += vec_revb(vec_insert(ui, vec_revb(vui2), 0));
176 // CHECK-ASM: vlebrf
177 vsl2 = vsl;
178 vsl += vec_revb(vec_insert(sl, vec_revb(vsl2), 0));
179 // CHECK-ASM: vlebrg
180 vul2 = vul;
181 vul += vec_revb(vec_insert(ul, vec_revb(vul2), 0));
182 // CHECK-ASM: vlebrg
183 vf2 = vf;
184 vf += vec_revb(vec_insert(f, vec_revb(vf2), 0));
185 // CHECK-ASM: vlebrf
186 vd2 = vd;
187 vd += vec_revb(vec_insert(d, vec_revb(vd2), 0));
188 // CHECK-ASM: vlebrg
190 vus2 = vus;
191 vus = vec_insert(__builtin_bswap16(us), vus2, 0);
192 // CHECK-ASM: vlebrh
193 vui2 = vui;
194 vui = vec_insert(__builtin_bswap32(ui), vui2, 0);
195 // CHECK-ASM: vlebrf
196 vul2 = vul;
197 vul = vec_insert(__builtin_bswap64(ul), vul2, 0);
198 // CHECK-ASM: vlebrg
200 ss = vec_extract(vec_revb(vss), 0);
201 // CHECK-ASM: vstebrh
202 us = vec_extract(vec_revb(vus), 0);
203 // CHECK-ASM: vstebrh
204 si = vec_extract(vec_revb(vsi), 0);
205 // CHECK-ASM: vstebrf
206 ui = vec_extract(vec_revb(vui), 0);
207 // CHECK-ASM: vstebrf
208 sl = vec_extract(vec_revb(vsl), 0);
209 // CHECK-ASM: vstebrg
210 ul = vec_extract(vec_revb(vul), 0);
211 // CHECK-ASM: vstebrg
212 f = vec_extract(vec_revb(vf), 0);
213 // CHECK-ASM: vstebrf
214 d = vec_extract(vec_revb(vd), 0);
215 // CHECK-ASM: vstebrg
217 us = __builtin_bswap16(vec_extract(vus, 0));
218 // CHECK-ASM: vstebrh
219 ui = __builtin_bswap32(vec_extract(vui, 0));
220 // CHECK-ASM: vstebrf
221 ul = __builtin_bswap64(vec_extract(vul, 0));
222 // CHECK-ASM: vstebrg
224 vsc += vec_reve(vec_xl(idx, cptrsc));
225 // CHECK-ASM: vlbrq
226 vuc += vec_reve(vec_xl(idx, cptruc));
227 // CHECK-ASM: vlbrq
228 vss += vec_reve(vec_xl(idx, cptrss));
229 // CHECK-ASM: vlerh
230 vus += vec_reve(vec_xl(idx, cptrus));
231 // CHECK-ASM: vlerh
232 vsi += vec_reve(vec_xl(idx, cptrsi));
233 // CHECK-ASM: vlerf
234 vui += vec_reve(vec_xl(idx, cptrui));
235 // CHECK-ASM: vlerf
236 vsl += vec_reve(vec_xl(idx, cptrsl));
237 // CHECK-ASM: vlerg
238 vul += vec_reve(vec_xl(idx, cptrul));
239 // CHECK-ASM: vlerg
240 vf += vec_reve(vec_xl(idx, cptrf));
241 // CHECK-ASM: vlerf
242 vd += vec_reve(vec_xl(idx, cptrd));
243 // CHECK-ASM: vlerg
245 vec_xst(vec_reve(vsc), idx, ptrsc);
246 // CHECK-ASM: vstbrq
247 vec_xst(vec_reve(vuc), idx, ptruc);
248 // CHECK-ASM: vstbrq
249 vec_xst(vec_reve(vss), idx, ptrss);
250 // CHECK-ASM: vsterh
251 vec_xst(vec_reve(vus), idx, ptrus);
252 // CHECK-ASM: vsterh
253 vec_xst(vec_reve(vsi), idx, ptrsi);
254 // CHECK-ASM: vsterf
255 vec_xst(vec_reve(vui), idx, ptrui);
256 // CHECK-ASM: vsterf
257 vec_xst(vec_reve(vsl), idx, ptrsl);
258 // CHECK-ASM: vsterg
259 vec_xst(vec_reve(vul), idx, ptrul);
260 // CHECK-ASM: vsterg
261 vec_xst(vec_reve(vf), idx, ptrf);
262 // CHECK-ASM: vsterf
263 vec_xst(vec_reve(vd), idx, ptrd);
264 // CHECK-ASM: vsterg
267 void test_integer(void) {
268 // CHECK-ASM-LABEL: test_integer
270 vsc = vec_sldb(vsc, vsc, 0);
271 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
272 // CHECK-ASM: vsld
273 vsc = vec_sldb(vsc, vsc, 7);
274 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
275 // CHECK-ASM: vsld
276 vuc = vec_sldb(vuc, vuc, 0);
277 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
278 // CHECK-ASM: vsld
279 vuc = vec_sldb(vuc, vuc, 7);
280 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
281 // CHECK-ASM: vsld
282 vss = vec_sldb(vss, vss, 0);
283 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
284 // CHECK-ASM: vsld
285 vss = vec_sldb(vss, vss, 7);
286 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
287 // CHECK-ASM: vsld
288 vus = vec_sldb(vus, vus, 0);
289 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
290 // CHECK-ASM: vsld
291 vus = vec_sldb(vus, vus, 7);
292 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
293 // CHECK-ASM: vsld
294 vsi = vec_sldb(vsi, vsi, 0);
295 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
296 // CHECK-ASM: vsld
297 vsi = vec_sldb(vsi, vsi, 7);
298 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
299 // CHECK-ASM: vsld
300 vui = vec_sldb(vui, vui, 0);
301 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
302 // CHECK-ASM: vsld
303 vui = vec_sldb(vui, vui, 7);
304 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
305 // CHECK-ASM: vsld
306 vsl = vec_sldb(vsl, vsl, 0);
307 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
308 // CHECK-ASM: vsld
309 vsl = vec_sldb(vsl, vsl, 7);
310 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
311 // CHECK-ASM: vsld
312 vul = vec_sldb(vul, vul, 0);
313 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
314 // CHECK-ASM: vsld
315 vul = vec_sldb(vul, vul, 7);
316 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
317 // CHECK-ASM: vsld
318 vslll = vec_sldb(vslll, vslll, 0);
319 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
320 // CHECK-ASM: vsld
321 vslll = vec_sldb(vslll, vslll, 7);
322 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
323 // CHECK-ASM: vsld
324 vulll = vec_sldb(vulll, vulll, 0);
325 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
326 // CHECK-ASM: vsld
327 vulll = vec_sldb(vulll, vulll, 7);
328 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
329 // CHECK-ASM: vsld
330 vf = vec_sldb(vf, vf, 0);
331 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
332 // CHECK-ASM: vsld
333 vf = vec_sldb(vf, vf, 7);
334 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
335 // CHECK-ASM: vsld
336 vd = vec_sldb(vd, vd, 0);
337 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
338 // CHECK-ASM: vsld
339 vd = vec_sldb(vd, vd, 7);
340 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
341 // CHECK-ASM: vsld
343 vsc = vec_srdb(vsc, vsc, 0);
344 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
345 // CHECK-ASM: vsrd
346 vsc = vec_srdb(vsc, vsc, 7);
347 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
348 // CHECK-ASM: vsrd
349 vuc = vec_srdb(vuc, vuc, 0);
350 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
351 // CHECK-ASM: vsrd
352 vuc = vec_srdb(vuc, vuc, 7);
353 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
354 // CHECK-ASM: vsrd
355 vss = vec_srdb(vss, vss, 0);
356 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
357 // CHECK-ASM: vsrd
358 vss = vec_srdb(vss, vss, 7);
359 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
360 // CHECK-ASM: vsrd
361 vus = vec_srdb(vus, vus, 0);
362 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
363 // CHECK-ASM: vsrd
364 vus = vec_srdb(vus, vus, 7);
365 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
366 // CHECK-ASM: vsrd
367 vsi = vec_srdb(vsi, vsi, 0);
368 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
369 // CHECK-ASM: vsrd
370 vsi = vec_srdb(vsi, vsi, 7);
371 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
372 // CHECK-ASM: vsrd
373 vui = vec_srdb(vui, vui, 0);
374 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
375 // CHECK-ASM: vsrd
376 vui = vec_srdb(vui, vui, 7);
377 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
378 // CHECK-ASM: vsrd
379 vsl = vec_srdb(vsl, vsl, 0);
380 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
381 // CHECK-ASM: vsrd
382 vsl = vec_srdb(vsl, vsl, 7);
383 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
384 // CHECK-ASM: vsrd
385 vul = vec_srdb(vul, vul, 0);
386 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
387 // CHECK-ASM: vsrd
388 vul = vec_srdb(vul, vul, 7);
389 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
390 // CHECK-ASM: vsrd
391 vslll = vec_srdb(vslll, vslll, 0);
392 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
393 // CHECK-ASM: vsrd
394 vslll = vec_srdb(vslll, vslll, 7);
395 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
396 // CHECK-ASM: vsrd
397 vulll = vec_srdb(vulll, vulll, 0);
398 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
399 // CHECK-ASM: vsrd
400 vulll = vec_srdb(vulll, vulll, 7);
401 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
402 // CHECK-ASM: vsrd
403 vf = vec_srdb(vf, vf, 0);
404 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
405 // CHECK-ASM: vsrd
406 vf = vec_srdb(vf, vf, 7);
407 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
408 // CHECK-ASM: vsrd
409 vd = vec_srdb(vd, vd, 0);
410 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
411 // CHECK-ASM: vsrd
412 vd = vec_srdb(vd, vd, 7);
413 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
414 // CHECK-ASM: vsrd
417 void test_string(void) {
418 // CHECK-ASM-LABEL: test_string
420 vuc = vec_search_string_cc(vsc, vsc, vuc, &cc);
421 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
422 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
423 vuc = vec_search_string_cc(vbc, vbc, vuc, &cc);
424 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
425 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
426 vuc = vec_search_string_cc(vuc, vuc, vuc, &cc);
427 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
428 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
429 vuc = vec_search_string_cc(vss, vss, vuc, &cc);
430 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
431 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
432 vuc = vec_search_string_cc(vbs, vbs, vuc, &cc);
433 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
434 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
435 vuc = vec_search_string_cc(vus, vus, vuc, &cc);
436 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
437 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
438 vuc = vec_search_string_cc(vsi, vsi, vuc, &cc);
439 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
440 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
441 vuc = vec_search_string_cc(vbi, vbi, vuc, &cc);
442 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
443 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
444 vuc = vec_search_string_cc(vui, vui, vuc, &cc);
445 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
446 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
448 vuc = vec_search_string_until_zero_cc(vsc, vsc, vuc, &cc);
449 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
450 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
451 vuc = vec_search_string_until_zero_cc(vbc, vbc, vuc, &cc);
452 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
453 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
454 vuc = vec_search_string_until_zero_cc(vuc, vuc, vuc, &cc);
455 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
456 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
457 vuc = vec_search_string_until_zero_cc(vss, vss, vuc, &cc);
458 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
459 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
460 vuc = vec_search_string_until_zero_cc(vbs, vbs, vuc, &cc);
461 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
462 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
463 vuc = vec_search_string_until_zero_cc(vus, vus, vuc, &cc);
464 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
465 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
466 vuc = vec_search_string_until_zero_cc(vsi, vsi, vuc, &cc);
467 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
468 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
469 vuc = vec_search_string_until_zero_cc(vbi, vbi, vuc, &cc);
470 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
471 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
472 vuc = vec_search_string_until_zero_cc(vui, vui, vuc, &cc);
473 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
474 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
477 void test_float(void) {
478 // CHECK-ASM-LABEL: test_float
480 vd = vec_double(vsl);
481 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
482 // CHECK-ASM: vcdgb
483 vd = vec_double(vul);
484 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
485 // CHECK-ASM: vcdlgb
486 vf = vec_float(vsi);
487 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float>
488 // CHECK-ASM: vcefb
489 vf = vec_float(vui);
490 // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float>
491 // CHECK-ASM: vcelfb
493 vsl = vec_signed(vd);
494 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
495 // CHECK-ASM: vcgdb
496 vsi = vec_signed(vf);
497 // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32>
498 // CHECK-ASM: vcfeb
499 vul = vec_unsigned(vd);
500 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
501 // CHECK-ASM: vclgdb
502 vui = vec_unsigned(vf);
503 // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32>
504 // CHECK-ASM: vclfeb