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
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
;
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
;
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
;
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
;
76 vss
+= vec_revb(vec_xl(idx
, cptrss
));
78 vus
+= vec_revb(vec_xl(idx
, cptrus
));
80 vsi
+= vec_revb(vec_xl(idx
, cptrsi
));
82 vui
+= vec_revb(vec_xl(idx
, cptrui
));
84 vsl
+= vec_revb(vec_xl(idx
, cptrsl
));
86 vul
+= vec_revb(vec_xl(idx
, cptrul
));
88 vf
+= vec_revb(vec_xl(idx
, cptrf
));
90 vd
+= vec_revb(vec_xl(idx
, cptrd
));
93 vec_xst(vec_revb(vss
), idx
, ptrss
);
95 vec_xst(vec_revb(vus
), idx
, ptrus
);
97 vec_xst(vec_revb(vsi
), idx
, ptrsi
);
99 vec_xst(vec_revb(vui
), idx
, ptrui
);
101 vec_xst(vec_revb(vsl
), idx
, ptrsl
);
103 vec_xst(vec_revb(vul
), idx
, ptrul
);
105 vec_xst(vec_revb(vf
), idx
, ptrf
);
107 vec_xst(vec_revb(vd
), idx
, ptrd
);
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
152 vss
+= vec_revb(vec_insert(ss
, vec_revb(vss2
), 0));
155 vus
+= vec_revb(vec_insert(us
, vec_revb(vus2
), 0));
158 vsi
+= vec_revb(vec_insert(si
, vec_revb(vsi2
), 0));
161 vui
+= vec_revb(vec_insert(ui
, vec_revb(vui2
), 0));
164 vsl
+= vec_revb(vec_insert(sl
, vec_revb(vsl2
), 0));
167 vul
+= vec_revb(vec_insert(ul
, vec_revb(vul2
), 0));
170 vf
+= vec_revb(vec_insert(f
, vec_revb(vf2
), 0));
173 vd
+= vec_revb(vec_insert(d
, vec_revb(vd2
), 0));
177 vus
= vec_insert(__builtin_bswap16(us
), vus2
, 0);
180 vui
= vec_insert(__builtin_bswap32(ui
), vui2
, 0);
183 vul
= vec_insert(__builtin_bswap64(ul
), vul2
, 0);
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
));
212 vuc
+= vec_reve(vec_xl(idx
, cptruc
));
214 vss
+= vec_reve(vec_xl(idx
, cptrss
));
216 vus
+= vec_reve(vec_xl(idx
, cptrus
));
218 vsi
+= vec_reve(vec_xl(idx
, cptrsi
));
220 vui
+= vec_reve(vec_xl(idx
, cptrui
));
222 vsl
+= vec_reve(vec_xl(idx
, cptrsl
));
224 vul
+= vec_reve(vec_xl(idx
, cptrul
));
226 vf
+= vec_reve(vec_xl(idx
, cptrf
));
228 vd
+= vec_reve(vec_xl(idx
, cptrd
));
231 vec_xst(vec_reve(vsc
), idx
, ptrsc
);
233 vec_xst(vec_reve(vuc
), idx
, ptruc
);
235 vec_xst(vec_reve(vss
), idx
, ptrss
);
237 vec_xst(vec_reve(vus
), idx
, ptrus
);
239 vec_xst(vec_reve(vsi
), idx
, ptrsi
);
241 vec_xst(vec_reve(vui
), idx
, ptrui
);
243 vec_xst(vec_reve(vsl
), idx
, ptrsl
);
245 vec_xst(vec_reve(vul
), idx
, ptrul
);
247 vec_xst(vec_reve(vf
), idx
, ptrf
);
249 vec_xst(vec_reve(vd
), idx
, ptrd
);
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)
259 vsc
= vec_sldb(vsc
, vsc
, 7);
260 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
262 vuc
= vec_sldb(vuc
, vuc
, 0);
263 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
265 vuc
= vec_sldb(vuc
, vuc
, 7);
266 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
268 vss
= vec_sldb(vss
, vss
, 0);
269 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
271 vss
= vec_sldb(vss
, vss
, 7);
272 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
274 vus
= vec_sldb(vus
, vus
, 0);
275 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
277 vus
= vec_sldb(vus
, vus
, 7);
278 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
280 vsi
= vec_sldb(vsi
, vsi
, 0);
281 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
283 vsi
= vec_sldb(vsi
, vsi
, 7);
284 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
286 vui
= vec_sldb(vui
, vui
, 0);
287 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
289 vui
= vec_sldb(vui
, vui
, 7);
290 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
292 vsl
= vec_sldb(vsl
, vsl
, 0);
293 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
295 vsl
= vec_sldb(vsl
, vsl
, 7);
296 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
298 vul
= vec_sldb(vul
, vul
, 0);
299 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
301 vul
= vec_sldb(vul
, vul
, 7);
302 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
304 vf
= vec_sldb(vf
, vf
, 0);
305 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
307 vf
= vec_sldb(vf
, vf
, 7);
308 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
310 vd
= vec_sldb(vd
, vd
, 0);
311 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
313 vd
= vec_sldb(vd
, vd
, 7);
314 // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
317 vsc
= vec_srdb(vsc
, vsc
, 0);
318 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
320 vsc
= vec_srdb(vsc
, vsc
, 7);
321 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
323 vuc
= vec_srdb(vuc
, vuc
, 0);
324 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
326 vuc
= vec_srdb(vuc
, vuc
, 7);
327 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
329 vss
= vec_srdb(vss
, vss
, 0);
330 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
332 vss
= vec_srdb(vss
, vss
, 7);
333 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
335 vus
= vec_srdb(vus
, vus
, 0);
336 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
338 vus
= vec_srdb(vus
, vus
, 7);
339 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
341 vsi
= vec_srdb(vsi
, vsi
, 0);
342 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
344 vsi
= vec_srdb(vsi
, vsi
, 7);
345 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
347 vui
= vec_srdb(vui
, vui
, 0);
348 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
350 vui
= vec_srdb(vui
, vui
, 7);
351 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
353 vsl
= vec_srdb(vsl
, vsl
, 0);
354 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
356 vsl
= vec_srdb(vsl
, vsl
, 7);
357 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
359 vul
= vec_srdb(vul
, vul
, 0);
360 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
362 vul
= vec_srdb(vul
, vul
, 7);
363 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
365 vf
= vec_srdb(vf
, vf
, 0);
366 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
368 vf
= vec_srdb(vf
, vf
, 7);
369 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
371 vd
= vec_srdb(vd
, vd
, 0);
372 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
374 vd
= vec_srdb(vd
, vd
, 7);
375 // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)
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>
445 vd
= vec_double(vul
);
446 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
449 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float>
452 // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float>
455 vsl
= vec_signed(vd
);
456 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
458 vsi
= vec_signed(vf
);
459 // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32>
461 vul
= vec_unsigned(vd
);
462 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
464 vui
= vec_unsigned(vf
);
465 // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32>