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
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
;
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
;
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
;
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
;
82 vss
+= vec_revb(vec_xl(idx
, cptrss
));
84 vus
+= vec_revb(vec_xl(idx
, cptrus
));
86 vsi
+= vec_revb(vec_xl(idx
, cptrsi
));
88 vui
+= vec_revb(vec_xl(idx
, cptrui
));
90 vsl
+= vec_revb(vec_xl(idx
, cptrsl
));
92 vul
+= vec_revb(vec_xl(idx
, cptrul
));
94 vslll
+= vec_revb(vec_xl(idx
, cptrslll
));
96 vulll
+= vec_revb(vec_xl(idx
, cptrulll
));
98 vf
+= vec_revb(vec_xl(idx
, cptrf
));
100 vd
+= vec_revb(vec_xl(idx
, cptrd
));
103 vec_xst(vec_revb(vss
), idx
, ptrss
);
105 vec_xst(vec_revb(vus
), idx
, ptrus
);
107 vec_xst(vec_revb(vsi
), idx
, ptrsi
);
109 vec_xst(vec_revb(vui
), idx
, ptrui
);
111 vec_xst(vec_revb(vsl
), idx
, ptrsl
);
113 vec_xst(vec_revb(vul
), idx
, ptrul
);
115 vec_xst(vec_revb(vslll
), idx
, ptrslll
);
117 vec_xst(vec_revb(vulll
), idx
, ptrulll
);
119 vec_xst(vec_revb(vf
), idx
, ptrf
);
121 vec_xst(vec_revb(vd
), idx
, ptrd
);
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
166 vss
+= vec_revb(vec_insert(ss
, vec_revb(vss2
), 0));
169 vus
+= vec_revb(vec_insert(us
, vec_revb(vus2
), 0));
172 vsi
+= vec_revb(vec_insert(si
, vec_revb(vsi2
), 0));
175 vui
+= vec_revb(vec_insert(ui
, vec_revb(vui2
), 0));
178 vsl
+= vec_revb(vec_insert(sl
, vec_revb(vsl2
), 0));
181 vul
+= vec_revb(vec_insert(ul
, vec_revb(vul2
), 0));
184 vf
+= vec_revb(vec_insert(f
, vec_revb(vf2
), 0));
187 vd
+= vec_revb(vec_insert(d
, vec_revb(vd2
), 0));
191 vus
= vec_insert(__builtin_bswap16(us
), vus2
, 0);
194 vui
= vec_insert(__builtin_bswap32(ui
), vui2
, 0);
197 vul
= vec_insert(__builtin_bswap64(ul
), vul2
, 0);
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
));
226 vuc
+= vec_reve(vec_xl(idx
, cptruc
));
228 vss
+= vec_reve(vec_xl(idx
, cptrss
));
230 vus
+= vec_reve(vec_xl(idx
, cptrus
));
232 vsi
+= vec_reve(vec_xl(idx
, cptrsi
));
234 vui
+= vec_reve(vec_xl(idx
, cptrui
));
236 vsl
+= vec_reve(vec_xl(idx
, cptrsl
));
238 vul
+= vec_reve(vec_xl(idx
, cptrul
));
240 vf
+= vec_reve(vec_xl(idx
, cptrf
));
242 vd
+= vec_reve(vec_xl(idx
, cptrd
));
245 vec_xst(vec_reve(vsc
), idx
, ptrsc
);
247 vec_xst(vec_reve(vuc
), idx
, ptruc
);
249 vec_xst(vec_reve(vss
), idx
, ptrss
);
251 vec_xst(vec_reve(vus
), idx
, ptrus
);
253 vec_xst(vec_reve(vsi
), idx
, ptrsi
);
255 vec_xst(vec_reve(vui
), idx
, ptrui
);
257 vec_xst(vec_reve(vsl
), idx
, ptrsl
);
259 vec_xst(vec_reve(vul
), idx
, ptrul
);
261 vec_xst(vec_reve(vf
), idx
, ptrf
);
263 vec_xst(vec_reve(vd
), idx
, ptrd
);
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)
273 vsc
= vec_sldb(vsc
, vsc
, 7);
274 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
276 vuc
= vec_sldb(vuc
, vuc
, 0);
277 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
279 vuc
= vec_sldb(vuc
, vuc
, 7);
280 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
282 vss
= vec_sldb(vss
, vss
, 0);
283 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
285 vss
= vec_sldb(vss
, vss
, 7);
286 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
288 vus
= vec_sldb(vus
, vus
, 0);
289 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
291 vus
= vec_sldb(vus
, vus
, 7);
292 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
294 vsi
= vec_sldb(vsi
, vsi
, 0);
295 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
297 vsi
= vec_sldb(vsi
, vsi
, 7);
298 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
300 vui
= vec_sldb(vui
, vui
, 0);
301 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
303 vui
= vec_sldb(vui
, vui
, 7);
304 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
306 vsl
= vec_sldb(vsl
, vsl
, 0);
307 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
309 vsl
= vec_sldb(vsl
, vsl
, 7);
310 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
312 vul
= vec_sldb(vul
, vul
, 0);
313 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
315 vul
= vec_sldb(vul
, vul
, 7);
316 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
318 vslll
= vec_sldb(vslll
, vslll
, 0);
319 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
321 vslll
= vec_sldb(vslll
, vslll
, 7);
322 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
324 vulll
= vec_sldb(vulll
, vulll
, 0);
325 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
327 vulll
= vec_sldb(vulll
, vulll
, 7);
328 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
330 vf
= vec_sldb(vf
, vf
, 0);
331 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
333 vf
= vec_sldb(vf
, vf
, 7);
334 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
336 vd
= vec_sldb(vd
, vd
, 0);
337 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
339 vd
= vec_sldb(vd
, vd
, 7);
340 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
343 vsc
= vec_srdb(vsc
, vsc
, 0);
344 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
346 vsc
= vec_srdb(vsc
, vsc
, 7);
347 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
349 vuc
= vec_srdb(vuc
, vuc
, 0);
350 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
352 vuc
= vec_srdb(vuc
, vuc
, 7);
353 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
355 vss
= vec_srdb(vss
, vss
, 0);
356 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
358 vss
= vec_srdb(vss
, vss
, 7);
359 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
361 vus
= vec_srdb(vus
, vus
, 0);
362 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
364 vus
= vec_srdb(vus
, vus
, 7);
365 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
367 vsi
= vec_srdb(vsi
, vsi
, 0);
368 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
370 vsi
= vec_srdb(vsi
, vsi
, 7);
371 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
373 vui
= vec_srdb(vui
, vui
, 0);
374 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
376 vui
= vec_srdb(vui
, vui
, 7);
377 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
379 vsl
= vec_srdb(vsl
, vsl
, 0);
380 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
382 vsl
= vec_srdb(vsl
, vsl
, 7);
383 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
385 vul
= vec_srdb(vul
, vul
, 0);
386 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
388 vul
= vec_srdb(vul
, vul
, 7);
389 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
391 vslll
= vec_srdb(vslll
, vslll
, 0);
392 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
394 vslll
= vec_srdb(vslll
, vslll
, 7);
395 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
397 vulll
= vec_srdb(vulll
, vulll
, 0);
398 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
400 vulll
= vec_srdb(vulll
, vulll
, 7);
401 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
403 vf
= vec_srdb(vf
, vf
, 0);
404 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
406 vf
= vec_srdb(vf
, vf
, 7);
407 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
409 vd
= vec_srdb(vd
, vd
, 0);
410 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
412 vd
= vec_srdb(vd
, vd
, 7);
413 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
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>
483 vd
= vec_double(vul
);
484 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
487 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float>
490 // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float>
493 vsl
= vec_signed(vd
);
494 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
496 vsi
= vec_signed(vf
);
497 // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32>
499 vul
= vec_unsigned(vd
);
500 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
502 vui
= vec_unsigned(vf
);
503 // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32>