[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / SystemZ / builtins-systemz-zvector3.c
blob1b0520d471f9ff58792c104200594e24f8a77ec0
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 unsigned char vuc;
16 volatile vector unsigned short vus;
17 volatile vector unsigned int vui;
18 volatile vector unsigned long long vul;
19 volatile vector bool char vbc;
20 volatile vector bool short vbs;
21 volatile vector bool int vbi;
22 volatile vector bool long long vbl;
23 volatile vector float vf;
24 volatile vector double vd;
26 volatile signed char sc;
27 volatile signed short ss;
28 volatile signed int si;
29 volatile signed long long sl;
30 volatile unsigned char uc;
31 volatile unsigned short us;
32 volatile unsigned int ui;
33 volatile unsigned long long ul;
34 volatile float f;
35 volatile double d;
37 const void * volatile cptr;
38 const signed char * volatile cptrsc;
39 const signed short * volatile cptrss;
40 const signed int * volatile cptrsi;
41 const signed long long * volatile cptrsl;
42 const unsigned char * volatile cptruc;
43 const unsigned short * volatile cptrus;
44 const unsigned int * volatile cptrui;
45 const unsigned long long * volatile cptrul;
46 const float * volatile cptrf;
47 const double * volatile cptrd;
49 void * volatile ptr;
50 signed char * volatile ptrsc;
51 signed short * volatile ptrss;
52 signed int * volatile ptrsi;
53 signed long long * volatile ptrsl;
54 unsigned char * volatile ptruc;
55 unsigned short * volatile ptrus;
56 unsigned int * volatile ptrui;
57 unsigned long long * volatile ptrul;
58 float * volatile ptrf;
59 double * volatile ptrd;
61 volatile unsigned int len;
62 volatile int idx;
63 int cc;
65 void test_core(void) {
66 // CHECK-ASM-LABEL: test_core
67 vector signed short vss2;
68 vector signed int vsi2;
69 vector signed long long vsl2;
70 vector unsigned short vus2;
71 vector unsigned int vui2;
72 vector unsigned long long vul2;
73 vector float vf2;
74 vector double vd2;
76 vss += vec_revb(vec_xl(idx, cptrss));
77 // CHECK-ASM: vlbrh
78 vus += vec_revb(vec_xl(idx, cptrus));
79 // CHECK-ASM: vlbrh
80 vsi += vec_revb(vec_xl(idx, cptrsi));
81 // CHECK-ASM: vlbrf
82 vui += vec_revb(vec_xl(idx, cptrui));
83 // CHECK-ASM: vlbrf
84 vsl += vec_revb(vec_xl(idx, cptrsl));
85 // CHECK-ASM: vlbrg
86 vul += vec_revb(vec_xl(idx, cptrul));
87 // CHECK-ASM: vlbrg
88 vf += vec_revb(vec_xl(idx, cptrf));
89 // CHECK-ASM: vlbrf
90 vd += vec_revb(vec_xl(idx, cptrd));
91 // CHECK-ASM: vlbrg
93 vec_xst(vec_revb(vss), idx, ptrss);
94 // CHECK-ASM: vstbrh
95 vec_xst(vec_revb(vus), idx, ptrus);
96 // CHECK-ASM: vstbrh
97 vec_xst(vec_revb(vsi), idx, ptrsi);
98 // CHECK-ASM: vstbrf
99 vec_xst(vec_revb(vui), idx, ptrui);
100 // CHECK-ASM: vstbrf
101 vec_xst(vec_revb(vsl), idx, ptrsl);
102 // CHECK-ASM: vstbrg
103 vec_xst(vec_revb(vul), idx, ptrul);
104 // CHECK-ASM: vstbrg
105 vec_xst(vec_revb(vf), idx, ptrf);
106 // CHECK-ASM: vstbrf
107 vec_xst(vec_revb(vd), idx, ptrd);
108 // CHECK-ASM: vstbrg
110 vss += vec_revb(vec_insert_and_zero(cptrss));
111 // CHECK-ASM: vllebrzh
112 vus += vec_revb(vec_insert_and_zero(cptrus));
113 // CHECK-ASM: vllebrzh
114 vsi += vec_revb(vec_insert_and_zero(cptrsi));
115 // CHECK-ASM: vllebrzf
116 vui += vec_revb(vec_insert_and_zero(cptrui));
117 // CHECK-ASM: vllebrzf
118 vsl += vec_revb(vec_insert_and_zero(cptrsl));
119 // CHECK-ASM: vllebrzg
120 vul += vec_revb(vec_insert_and_zero(cptrul));
121 // CHECK-ASM: vllebrzg
122 vf += vec_revb(vec_insert_and_zero(cptrf));
123 // CHECK-ASM: vllebrzf
124 vd += vec_revb(vec_insert_and_zero(cptrd));
125 // CHECK-ASM: vllebrzg
127 vss += vec_revb(vec_splats(ss));
128 // CHECK-ASM: vlbrreph
129 vus += vec_revb(vec_splats(us));
130 // CHECK-ASM: vlbrreph
131 vsi += vec_revb(vec_splats(si));
132 // CHECK-ASM: vlbrrepf
133 vui += vec_revb(vec_splats(ui));
134 // CHECK-ASM: vlbrrepf
135 vsl += vec_revb(vec_splats(sl));
136 // CHECK-ASM: vlbrrepg
137 vul += vec_revb(vec_splats(ul));
138 // CHECK-ASM: vlbrrepg
139 vf += vec_revb(vec_splats(f));
140 // CHECK-ASM: vlbrrepf
141 vd += vec_revb(vec_splats(d));
142 // CHECK-ASM: vlbrrepg
144 vus = vec_splats(__builtin_bswap16(us));
145 // CHECK-ASM: vlbrreph
146 vui = vec_splats(__builtin_bswap32(ui));
147 // CHECK-ASM: vlbrrepf
148 vul = vec_splats((unsigned long long)__builtin_bswap64(ul));
149 // CHECK-ASM: vlbrrepg
151 vss2 = vss;
152 vss += vec_revb(vec_insert(ss, vec_revb(vss2), 0));
153 // CHECK-ASM: vlebrh
154 vus2 = vus;
155 vus += vec_revb(vec_insert(us, vec_revb(vus2), 0));
156 // CHECK-ASM: vlebrh
157 vsi2 = vsi;
158 vsi += vec_revb(vec_insert(si, vec_revb(vsi2), 0));
159 // CHECK-ASM: vlebrf
160 vui2 = vui;
161 vui += vec_revb(vec_insert(ui, vec_revb(vui2), 0));
162 // CHECK-ASM: vlebrf
163 vsl2 = vsl;
164 vsl += vec_revb(vec_insert(sl, vec_revb(vsl2), 0));
165 // CHECK-ASM: vlebrg
166 vul2 = vul;
167 vul += vec_revb(vec_insert(ul, vec_revb(vul2), 0));
168 // CHECK-ASM: vlebrg
169 vf2 = vf;
170 vf += vec_revb(vec_insert(f, vec_revb(vf2), 0));
171 // CHECK-ASM: vlebrf
172 vd2 = vd;
173 vd += vec_revb(vec_insert(d, vec_revb(vd2), 0));
174 // CHECK-ASM: vlebrg
176 vus2 = vus;
177 vus = vec_insert(__builtin_bswap16(us), vus2, 0);
178 // CHECK-ASM: vlebrh
179 vui2 = vui;
180 vui = vec_insert(__builtin_bswap32(ui), vui2, 0);
181 // CHECK-ASM: vlebrf
182 vul2 = vul;
183 vul = vec_insert(__builtin_bswap64(ul), vul2, 0);
184 // CHECK-ASM: vlebrg
186 ss = vec_extract(vec_revb(vss), 0);
187 // CHECK-ASM: vstebrh
188 us = vec_extract(vec_revb(vus), 0);
189 // CHECK-ASM: vstebrh
190 si = vec_extract(vec_revb(vsi), 0);
191 // CHECK-ASM: vstebrf
192 ui = vec_extract(vec_revb(vui), 0);
193 // CHECK-ASM: vstebrf
194 sl = vec_extract(vec_revb(vsl), 0);
195 // CHECK-ASM: vstebrg
196 ul = vec_extract(vec_revb(vul), 0);
197 // CHECK-ASM: vstebrg
198 f = vec_extract(vec_revb(vf), 0);
199 // CHECK-ASM: vstebrf
200 d = vec_extract(vec_revb(vd), 0);
201 // CHECK-ASM: vstebrg
203 us = __builtin_bswap16(vec_extract(vus, 0));
204 // CHECK-ASM: vstebrh
205 ui = __builtin_bswap32(vec_extract(vui, 0));
206 // CHECK-ASM: vstebrf
207 ul = __builtin_bswap64(vec_extract(vul, 0));
208 // CHECK-ASM: vstebrg
210 vsc += vec_reve(vec_xl(idx, cptrsc));
211 // CHECK-ASM: vlbrq
212 vuc += vec_reve(vec_xl(idx, cptruc));
213 // CHECK-ASM: vlbrq
214 vss += vec_reve(vec_xl(idx, cptrss));
215 // CHECK-ASM: vlerh
216 vus += vec_reve(vec_xl(idx, cptrus));
217 // CHECK-ASM: vlerh
218 vsi += vec_reve(vec_xl(idx, cptrsi));
219 // CHECK-ASM: vlerf
220 vui += vec_reve(vec_xl(idx, cptrui));
221 // CHECK-ASM: vlerf
222 vsl += vec_reve(vec_xl(idx, cptrsl));
223 // CHECK-ASM: vlerg
224 vul += vec_reve(vec_xl(idx, cptrul));
225 // CHECK-ASM: vlerg
226 vf += vec_reve(vec_xl(idx, cptrf));
227 // CHECK-ASM: vlerf
228 vd += vec_reve(vec_xl(idx, cptrd));
229 // CHECK-ASM: vlerg
231 vec_xst(vec_reve(vsc), idx, ptrsc);
232 // CHECK-ASM: vstbrq
233 vec_xst(vec_reve(vuc), idx, ptruc);
234 // CHECK-ASM: vstbrq
235 vec_xst(vec_reve(vss), idx, ptrss);
236 // CHECK-ASM: vsterh
237 vec_xst(vec_reve(vus), idx, ptrus);
238 // CHECK-ASM: vsterh
239 vec_xst(vec_reve(vsi), idx, ptrsi);
240 // CHECK-ASM: vsterf
241 vec_xst(vec_reve(vui), idx, ptrui);
242 // CHECK-ASM: vsterf
243 vec_xst(vec_reve(vsl), idx, ptrsl);
244 // CHECK-ASM: vsterg
245 vec_xst(vec_reve(vul), idx, ptrul);
246 // CHECK-ASM: vsterg
247 vec_xst(vec_reve(vf), idx, ptrf);
248 // CHECK-ASM: vsterf
249 vec_xst(vec_reve(vd), idx, ptrd);
250 // CHECK-ASM: vsterg
253 void test_integer(void) {
254 // CHECK-ASM-LABEL: test_integer
256 vsc = vec_sldb(vsc, vsc, 0);
257 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
258 // CHECK-ASM: vsld
259 vsc = vec_sldb(vsc, vsc, 7);
260 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
261 // CHECK-ASM: vsld
262 vuc = vec_sldb(vuc, vuc, 0);
263 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
264 // CHECK-ASM: vsld
265 vuc = vec_sldb(vuc, vuc, 7);
266 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
267 // CHECK-ASM: vsld
268 vss = vec_sldb(vss, vss, 0);
269 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
270 // CHECK-ASM: vsld
271 vss = vec_sldb(vss, vss, 7);
272 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
273 // CHECK-ASM: vsld
274 vus = vec_sldb(vus, vus, 0);
275 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
276 // CHECK-ASM: vsld
277 vus = vec_sldb(vus, vus, 7);
278 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
279 // CHECK-ASM: vsld
280 vsi = vec_sldb(vsi, vsi, 0);
281 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
282 // CHECK-ASM: vsld
283 vsi = vec_sldb(vsi, vsi, 7);
284 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
285 // CHECK-ASM: vsld
286 vui = vec_sldb(vui, vui, 0);
287 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
288 // CHECK-ASM: vsld
289 vui = vec_sldb(vui, vui, 7);
290 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
291 // CHECK-ASM: vsld
292 vsl = vec_sldb(vsl, vsl, 0);
293 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
294 // CHECK-ASM: vsld
295 vsl = vec_sldb(vsl, vsl, 7);
296 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
297 // CHECK-ASM: vsld
298 vul = vec_sldb(vul, vul, 0);
299 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
300 // CHECK-ASM: vsld
301 vul = vec_sldb(vul, vul, 7);
302 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
303 // CHECK-ASM: vsld
304 vf = vec_sldb(vf, vf, 0);
305 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
306 // CHECK-ASM: vsld
307 vf = vec_sldb(vf, vf, 7);
308 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
309 // CHECK-ASM: vsld
310 vd = vec_sldb(vd, vd, 0);
311 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
312 // CHECK-ASM: vsld
313 vd = vec_sldb(vd, vd, 7);
314 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
315 // CHECK-ASM: vsld
317 vsc = vec_srdb(vsc, vsc, 0);
318 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
319 // CHECK-ASM: vsrd
320 vsc = vec_srdb(vsc, vsc, 7);
321 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
322 // CHECK-ASM: vsrd
323 vuc = vec_srdb(vuc, vuc, 0);
324 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
325 // CHECK-ASM: vsrd
326 vuc = vec_srdb(vuc, vuc, 7);
327 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
328 // CHECK-ASM: vsrd
329 vss = vec_srdb(vss, vss, 0);
330 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
331 // CHECK-ASM: vsrd
332 vss = vec_srdb(vss, vss, 7);
333 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
334 // CHECK-ASM: vsrd
335 vus = vec_srdb(vus, vus, 0);
336 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
337 // CHECK-ASM: vsrd
338 vus = vec_srdb(vus, vus, 7);
339 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
340 // CHECK-ASM: vsrd
341 vsi = vec_srdb(vsi, vsi, 0);
342 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
343 // CHECK-ASM: vsrd
344 vsi = vec_srdb(vsi, vsi, 7);
345 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
346 // CHECK-ASM: vsrd
347 vui = vec_srdb(vui, vui, 0);
348 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
349 // CHECK-ASM: vsrd
350 vui = vec_srdb(vui, vui, 7);
351 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
352 // CHECK-ASM: vsrd
353 vsl = vec_srdb(vsl, vsl, 0);
354 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
355 // CHECK-ASM: vsrd
356 vsl = vec_srdb(vsl, vsl, 7);
357 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
358 // CHECK-ASM: vsrd
359 vul = vec_srdb(vul, vul, 0);
360 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
361 // CHECK-ASM: vsrd
362 vul = vec_srdb(vul, vul, 7);
363 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
364 // CHECK-ASM: vsrd
365 vf = vec_srdb(vf, vf, 0);
366 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
367 // CHECK-ASM: vsrd
368 vf = vec_srdb(vf, vf, 7);
369 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
370 // CHECK-ASM: vsrd
371 vd = vec_srdb(vd, vd, 0);
372 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
373 // CHECK-ASM: vsrd
374 vd = vec_srdb(vd, vd, 7);
375 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
376 // CHECK-ASM: vsrd
379 void test_string(void) {
380 // CHECK-ASM-LABEL: test_string
382 vuc = vec_search_string_cc(vsc, vsc, vuc, &cc);
383 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
384 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
385 vuc = vec_search_string_cc(vbc, vbc, vuc, &cc);
386 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
387 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
388 vuc = vec_search_string_cc(vuc, vuc, vuc, &cc);
389 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
390 // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
391 vuc = vec_search_string_cc(vss, vss, vuc, &cc);
392 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
393 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
394 vuc = vec_search_string_cc(vbs, vbs, vuc, &cc);
395 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
396 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
397 vuc = vec_search_string_cc(vus, vus, vuc, &cc);
398 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
399 // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
400 vuc = vec_search_string_cc(vsi, vsi, vuc, &cc);
401 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
402 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
403 vuc = vec_search_string_cc(vbi, vbi, vuc, &cc);
404 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
405 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
406 vuc = vec_search_string_cc(vui, vui, vuc, &cc);
407 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
408 // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0
410 vuc = vec_search_string_until_zero_cc(vsc, vsc, vuc, &cc);
411 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
412 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
413 vuc = vec_search_string_until_zero_cc(vbc, vbc, vuc, &cc);
414 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
415 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
416 vuc = vec_search_string_until_zero_cc(vuc, vuc, vuc, &cc);
417 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
418 // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
419 vuc = vec_search_string_until_zero_cc(vss, vss, vuc, &cc);
420 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
421 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
422 vuc = vec_search_string_until_zero_cc(vbs, vbs, vuc, &cc);
423 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
424 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
425 vuc = vec_search_string_until_zero_cc(vus, vus, vuc, &cc);
426 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})
427 // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
428 vuc = vec_search_string_until_zero_cc(vsi, vsi, vuc, &cc);
429 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
430 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
431 vuc = vec_search_string_until_zero_cc(vbi, vbi, vuc, &cc);
432 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
433 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
434 vuc = vec_search_string_until_zero_cc(vui, vui, vuc, &cc);
435 // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})
436 // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
439 void test_float(void) {
440 // CHECK-ASM-LABEL: test_float
442 vd = vec_double(vsl);
443 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
444 // CHECK-ASM: vcdgb
445 vd = vec_double(vul);
446 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
447 // CHECK-ASM: vcdlgb
448 vf = vec_float(vsi);
449 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float>
450 // CHECK-ASM: vcefb
451 vf = vec_float(vui);
452 // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float>
453 // CHECK-ASM: vcelfb
455 vsl = vec_signed(vd);
456 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
457 // CHECK-ASM: vcgdb
458 vsi = vec_signed(vf);
459 // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32>
460 // CHECK-ASM: vcfeb
461 vul = vec_unsigned(vd);
462 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
463 // CHECK-ASM: vclgdb
464 vui = vec_unsigned(vf);
465 // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32>
466 // CHECK-ASM: vclfeb