1 // REQUIRES: systemz-registered-target
2 // RUN: %clang_cc1 -target-cpu z14 -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 z14 -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
bool __int128 vblll
;
26 volatile vector
float vf
;
27 volatile vector
double vd
;
29 volatile signed char sc
;
30 volatile signed short ss
;
31 volatile signed int si
;
32 volatile signed long long sl
;
33 volatile unsigned char uc
;
34 volatile unsigned short us
;
35 volatile unsigned int ui
;
36 volatile unsigned long long ul
;
40 const void * volatile cptr
;
41 const signed char * volatile cptrsc
;
42 const signed short * volatile cptrss
;
43 const signed int * volatile cptrsi
;
44 const signed long long * volatile cptrsl
;
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 float * volatile cptrf
;
50 const double * volatile cptrd
;
53 signed char * volatile ptrsc
;
54 signed short * volatile ptrss
;
55 signed int * volatile ptrsi
;
56 signed long long * volatile ptrsl
;
57 unsigned char * volatile ptruc
;
58 unsigned short * volatile ptrus
;
59 unsigned int * volatile ptrui
;
60 unsigned long long * volatile ptrul
;
61 float * volatile ptrf
;
62 double * volatile ptrd
;
64 volatile unsigned int len
;
68 void test_core(void) {
69 // CHECK-ASM-LABEL: test_core
73 f
= vec_extract(vf
, 0);
74 // CHECK: extractelement <4 x float> %{{.*}}, i64 0
76 f
= vec_extract(vf
, idx
);
77 // CHECK: extractelement <4 x float> %{{.*}}, i32 %{{.*}}
79 d
= vec_extract(vd
, 0);
80 // CHECK: extractelement <2 x double> %{{.*}}, i64 0
82 d
= vec_extract(vd
, idx
);
83 // CHECK: extractelement <2 x double> %{{.*}}, i32 %{{.*}}
87 vf
= vec_insert(f
, vf2
, 0);
88 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0
90 vf
= vec_insert(0.0f
, vf
, 1);
91 // CHECK: insertelement <4 x float> %{{.*}}, float 0.000000e+00, i64 1
92 // CHECK-ASM: vleif %{{.*}}, 0, 1
93 vf
= vec_insert(f
, vf
, idx
);
94 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 %{{.*}}
97 vd
= vec_insert(d
, vd2
, 0);
98 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0
100 vd
= vec_insert(0.0, vd
, 1);
101 // CHECK: insertelement <2 x double> %{{.*}}, double 0.000000e+00, i64 1
102 // CHECK-ASM: vleig %{{.*}}, 0, 1
103 vd
= vec_insert(d
, vd
, idx
);
104 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 %{{.*}}
107 vf
= vec_promote(f
, idx
);
108 // CHECK: insertelement <4 x float> poison, float %{{.*}}, i32 %{{.*}}
110 vd
= vec_promote(d
, idx
);
111 // CHECK: insertelement <2 x double> poison, double %{{.*}}, i32 %{{.*}}
114 vf
= vec_insert_and_zero(cptrf
);
115 // CHECK: insertelement <4 x float> <float 0.000000e+00, float poison, float 0.000000e+00, float 0.000000e+00>, float %{{.*}}, i64 1
117 vd
= vec_insert_and_zero(cptrd
);
118 // CHECK: insertelement <2 x double> <double poison, double 0.000000e+00>, double %{{.*}}, i64 0
121 vf
= vec_perm(vf
, vf
, vuc
);
122 // CHECK: call <16 x i8> @llvm.s390.vperm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
124 vd
= vec_perm(vd
, vd
, vuc
);
125 // CHECK: call <16 x i8> @llvm.s390.vperm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
128 vul
= vec_bperm(vulll
, vuc
);
129 // CHECK: call <2 x i64> @llvm.s390.vbperm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
132 vul
= vec_bperm_u128(vuc
, vuc
);
133 // CHECK: call <2 x i64> @llvm.s390.vbperm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
144 // CHECK-ASM: {{vperm|vpdi}}
146 vf
= vec_sel(vf
, vf
, vui
);
148 vf
= vec_sel(vf
, vf
, vbi
);
150 vd
= vec_sel(vd
, vd
, vul
);
152 vd
= vec_sel(vd
, vd
, vbl
);
155 vf
= vec_gather_element(vf
, vui
, cptrf
, 0);
156 // CHECK-ASM: vgef %{{.*}}, 0(%{{.*}},%{{.*}}), 0
157 vf
= vec_gather_element(vf
, vui
, cptrf
, 1);
158 // CHECK-ASM: vgef %{{.*}}, 0(%{{.*}},%{{.*}}), 1
159 vf
= vec_gather_element(vf
, vui
, cptrf
, 2);
160 // CHECK-ASM: vgef %{{.*}}, 0(%{{.*}},%{{.*}}), 2
161 vf
= vec_gather_element(vf
, vui
, cptrf
, 3);
162 // CHECK-ASM: vgef %{{.*}}, 0(%{{.*}},%{{.*}}), 3
163 vd
= vec_gather_element(vd
, vul
, cptrd
, 0);
164 // CHECK-ASM: vgeg %{{.*}}, 0(%{{.*}},%{{.*}}), 0
165 vd
= vec_gather_element(vd
, vul
, cptrd
, 1);
166 // CHECK-ASM: vgeg %{{.*}}, 0(%{{.*}},%{{.*}}), 1
168 vec_scatter_element(vf
, vui
, ptrf
, 0);
169 // CHECK-ASM: vscef %{{.*}}, 0(%{{.*}},%{{.*}}), 0
170 vec_scatter_element(vf
, vui
, ptrf
, 1);
171 // CHECK-ASM: vscef %{{.*}}, 0(%{{.*}},%{{.*}}), 1
172 vec_scatter_element(vf
, vui
, ptrf
, 2);
173 // CHECK-ASM: vscef %{{.*}}, 0(%{{.*}},%{{.*}}), 2
174 vec_scatter_element(vf
, vui
, ptrf
, 3);
175 // CHECK-ASM: vscef %{{.*}}, 0(%{{.*}},%{{.*}}), 3
176 vec_scatter_element(vd
, vul
, ptrd
, 0);
177 // CHECK-ASM: vsceg %{{.*}}, 0(%{{.*}},%{{.*}}), 0
178 vec_scatter_element(vd
, vul
, ptrd
, 1);
179 // CHECK-ASM: vsceg %{{.*}}, 0(%{{.*}},%{{.*}}), 1
181 vf
= vec_xl(idx
, cptrf
);
183 vd
= vec_xl(idx
, cptrd
);
186 vec_xst(vf
, idx
, ptrf
);
188 vec_xst(vd
, idx
, ptrd
);
191 vd
= vec_load_bndry(cptrd
, 64);
192 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 0)
194 vf
= vec_load_bndry(cptrf
, 64);
195 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 0)
197 vf
= vec_load_bndry(cptrf
, 128);
198 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 1)
200 vf
= vec_load_bndry(cptrf
, 256);
201 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 2)
203 vf
= vec_load_bndry(cptrf
, 512);
204 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 3)
206 vf
= vec_load_bndry(cptrf
, 1024);
207 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 4)
209 vf
= vec_load_bndry(cptrf
, 2048);
210 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 5)
212 vf
= vec_load_bndry(cptrf
, 4096);
213 // CHECK: call <16 x i8> @llvm.s390.vlbb(ptr %{{.*}}, i32 6)
216 vf
= vec_load_len(cptrf
, idx
);
217 // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}})
219 vd
= vec_load_len(cptrd
, idx
);
220 // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}})
223 vec_store_len(vf
, ptrf
, idx
);
224 // CHECK: call void @llvm.s390.vstl(<16 x i8> %{{.*}}, i32 %{{.*}}, ptr %{{.*}})
226 vec_store_len(vd
, ptrd
, idx
);
227 // CHECK: call void @llvm.s390.vstl(<16 x i8> %{{.*}}, i32 %{{.*}}, ptr %{{.*}})
230 vsc
= vec_load_len_r(cptrsc
, 0);
231 // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 0, ptr %{{.*}})
232 // CHECK-ASM: vlrl %{{.*}}, 0(%{{.*}}), 0
233 vsc
= vec_load_len_r(cptrsc
, idx
);
234 // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 %{{.*}}, ptr %{{.*}})
236 vuc
= vec_load_len_r(cptruc
, 0);
237 // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 0, ptr %{{.*}})
238 // CHECK-ASM: vlrl %{{.*}}, 0(%{{.*}}), 0
239 vuc
= vec_load_len_r(cptruc
, idx
);
240 // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 %{{.*}}, ptr %{{.*}})
243 vec_store_len_r(vsc
, ptrsc
, 0);
244 // CHECK: call void @llvm.s390.vstrl(<16 x i8> %{{.*}}, i32 0, ptr %{{.*}})
245 // CHECK-ASM: vstrl %{{.*}}, 0(%{{.*}}), 0
246 vec_store_len_r(vsc
, ptrsc
, idx
);
247 // CHECK: call void @llvm.s390.vstrl(<16 x i8> %{{.*}}, i32 %{{.*}}, ptr %{{.*}})
249 vec_store_len_r(vuc
, ptruc
, 0);
250 // CHECK: call void @llvm.s390.vstrl(<16 x i8> %{{.*}}, i32 0, ptr %{{.*}})
251 // CHECK-ASM: vstrl %{{.*}}, 0(%{{.*}}), 0
252 vec_store_len_r(vuc
, ptruc
, idx
);
253 // CHECK: call void @llvm.s390.vstrl(<16 x i8> %{{.*}}, i32 %{{.*}}, ptr %{{.*}})
256 vf
= vec_splat(vf
, 0);
257 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> zeroinitializer
259 vf
= vec_splat(vf
, 1);
260 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
262 vd
= vec_splat(vd
, 0);
263 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
265 vd
= vec_splat(vd
, 1);
266 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 1>
270 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> zeroinitializer
273 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
276 vf
= vec_mergeh(vf
, vf
);
277 // shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
279 vd
= vec_mergeh(vd
, vd
);
280 // shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 0, i32 2>
283 vf
= vec_mergel(vf
, vf
);
284 // shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <i32 2, i32 6, i32 3, i32 7>
286 vd
= vec_mergel(vd
, vd
);
287 // shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <i32 1, i32 3>
291 void test_compare(void) {
292 // CHECK-ASM-LABEL: test_compare
294 vbi
= vec_cmpeq(vf
, vf
);
295 // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
297 vbl
= vec_cmpeq(vd
, vd
);
298 // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
301 vbi
= vec_cmpge(vf
, vf
);
302 // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
303 // CHECK-ASM: vfchesb
304 vbl
= vec_cmpge(vd
, vd
);
305 // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
306 // CHECK-ASM: vfchedb
308 vbi
= vec_cmpgt(vf
, vf
);
309 // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
311 vbl
= vec_cmpgt(vd
, vd
);
312 // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
315 vbi
= vec_cmple(vf
, vf
);
316 // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
317 // CHECK-ASM: vfchesb
318 vbl
= vec_cmple(vd
, vd
);
319 // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
320 // CHECK-ASM: vfchedb
322 vbi
= vec_cmplt(vf
, vf
);
323 // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
325 vbl
= vec_cmplt(vd
, vd
);
326 // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
329 idx
= vec_all_eq(vf
, vf
);
330 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfcesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
331 // CHECK-ASM: vfcesbs
332 idx
= vec_all_eq(vd
, vd
);
333 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfcedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
334 // CHECK-ASM: vfcedbs
336 idx
= vec_all_ne(vf
, vf
);
337 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfcesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
338 // CHECK-ASM: vfcesbs
339 idx
= vec_all_ne(vd
, vd
);
340 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfcedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
341 // CHECK-ASM: vfcedbs
343 idx
= vec_all_ge(vf
, vf
);
344 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
345 // CHECK-ASM: vfchesbs
346 idx
= vec_all_ge(vd
, vd
);
347 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
348 // CHECK-ASM: vfchedbs
350 idx
= vec_all_gt(vf
, vf
);
351 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
352 // CHECK-ASM: vfchsbs
353 idx
= vec_all_gt(vd
, vd
);
354 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
355 // CHECK-ASM: vfchdbs
357 idx
= vec_all_le(vf
, vf
);
358 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
359 // CHECK-ASM: vfchesbs
360 idx
= vec_all_le(vd
, vd
);
361 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
362 // CHECK-ASM: vfchedbs
364 idx
= vec_all_lt(vf
, vf
);
365 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
366 // CHECK-ASM: vfchsbs
367 idx
= vec_all_lt(vd
, vd
);
368 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
369 // CHECK-ASM: vfchdbs
371 idx
= vec_all_nge(vf
, vf
);
372 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
373 // CHECK-ASM: vfchesbs
374 idx
= vec_all_nge(vd
, vd
);
375 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
376 // CHECK-ASM: vfchedbs
378 idx
= vec_all_ngt(vf
, vf
);
379 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
380 // CHECK-ASM: vfchsbs
381 idx
= vec_all_ngt(vd
, vd
);
382 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
383 // CHECK-ASM: vfchdbs
385 idx
= vec_all_nle(vf
, vf
);
386 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
387 // CHECK-ASM: vfchesbs
388 idx
= vec_all_nle(vd
, vd
);
389 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
390 // CHECK-ASM: vfchedbs
392 idx
= vec_all_nlt(vf
, vf
);
393 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
394 // CHECK-ASM: vfchsbs
395 idx
= vec_all_nlt(vd
, vd
);
396 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
397 // CHECK-ASM: vfchdbs
399 idx
= vec_all_nan(vf
);
400 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 15)
401 // CHECK-ASM: vftcisb
402 idx
= vec_all_nan(vd
);
403 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 15)
404 // CHECK-ASM: vftcidb
406 idx
= vec_all_numeric(vf
);
407 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 15)
408 // CHECK-ASM: vftcisb
409 idx
= vec_all_numeric(vd
);
410 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 15)
411 // CHECK-ASM: vftcidb
413 idx
= vec_any_eq(vf
, vf
);
414 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfcesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
415 // CHECK-ASM: vfcesbs
416 idx
= vec_any_eq(vd
, vd
);
417 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfcedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
418 // CHECK-ASM: vfcedbs
420 idx
= vec_any_ne(vf
, vf
);
421 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfcesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
422 // CHECK-ASM: vfcesbs
423 idx
= vec_any_ne(vd
, vd
);
424 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfcedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
425 // CHECK-ASM: vfcedbs
427 idx
= vec_any_ge(vf
, vf
);
428 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
429 // CHECK-ASM: vfchesbs
430 idx
= vec_any_ge(vd
, vd
);
431 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
432 // CHECK-ASM: vfchedbs
434 idx
= vec_any_gt(vf
, vf
);
435 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
436 // CHECK-ASM: vfchsbs
437 idx
= vec_any_gt(vd
, vd
);
438 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
439 // CHECK-ASM: vfchdbs
441 idx
= vec_any_le(vf
, vf
);
442 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
443 // CHECK-ASM: vfchesbs
444 idx
= vec_any_le(vd
, vd
);
445 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
446 // CHECK-ASM: vfchedbs
448 idx
= vec_any_lt(vf
, vf
);
449 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
450 // CHECK-ASM: vfchsbs
451 idx
= vec_any_lt(vd
, vd
);
452 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
453 // CHECK-ASM: vfchdbs
455 idx
= vec_any_nge(vf
, vf
);
456 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
457 // CHECK-ASM: vfchesbs
458 idx
= vec_any_nge(vd
, vd
);
459 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
460 // CHECK-ASM: vfchedbs
462 idx
= vec_any_ngt(vf
, vf
);
463 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
464 // CHECK-ASM: vfchsbs
465 idx
= vec_any_ngt(vd
, vd
);
466 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
467 // CHECK-ASM: vfchdbs
469 idx
= vec_any_nle(vf
, vf
);
470 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchesbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
471 // CHECK-ASM: vfchesbs
472 idx
= vec_any_nle(vd
, vd
);
473 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchedbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
474 // CHECK-ASM: vfchedbs
476 idx
= vec_any_nlt(vf
, vf
);
477 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vfchsbs(<4 x float> %{{.*}}, <4 x float> %{{.*}})
478 // CHECK-ASM: vfchsbs
479 idx
= vec_any_nlt(vd
, vd
);
480 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vfchdbs(<2 x double> %{{.*}}, <2 x double> %{{.*}})
481 // CHECK-ASM: vfchdbs
483 idx
= vec_any_nan(vf
);
484 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 15)
485 // CHECK-ASM: vftcisb
486 idx
= vec_any_nan(vd
);
487 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 15)
488 // CHECK-ASM: vftcidb
490 idx
= vec_any_numeric(vf
);
491 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 15)
492 // CHECK-ASM: vftcisb
493 idx
= vec_any_numeric(vd
);
494 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 15)
495 // CHECK-ASM: vftcidb
498 void test_integer(void) {
499 // CHECK-ASM-LABEL: test_integer
501 vf
= vec_and(vf
, vf
);
503 vd
= vec_and(vd
, vd
);
511 vf
= vec_xor(vf
, vf
);
513 vd
= vec_xor(vd
, vd
);
516 vf
= vec_andc(vf
, vf
);
518 vd
= vec_andc(vd
, vd
);
521 vf
= vec_nor(vf
, vf
);
523 vd
= vec_nor(vd
, vd
);
526 vsc
= vec_nand(vsc
, vsc
);
528 vuc
= vec_nand(vuc
, vuc
);
530 vbc
= vec_nand(vbc
, vbc
);
532 vss
= vec_nand(vss
, vss
);
534 vus
= vec_nand(vus
, vus
);
536 vbs
= vec_nand(vbs
, vbs
);
538 vsi
= vec_nand(vsi
, vsi
);
540 vui
= vec_nand(vui
, vui
);
542 vbi
= vec_nand(vbi
, vbi
);
544 vsl
= vec_nand(vsl
, vsl
);
546 vul
= vec_nand(vul
, vul
);
548 vbl
= vec_nand(vbl
, vbl
);
550 vslll
= vec_nand(vslll
, vslll
);
552 vulll
= vec_nand(vulll
, vulll
);
554 vblll
= vec_nand(vblll
, vblll
);
556 vf
= vec_nand(vf
, vf
);
558 vd
= vec_nand(vd
, vd
);
561 vsc
= vec_orc(vsc
, vsc
);
563 vuc
= vec_orc(vuc
, vuc
);
565 vbc
= vec_orc(vbc
, vbc
);
567 vss
= vec_orc(vss
, vss
);
569 vus
= vec_orc(vus
, vus
);
571 vbs
= vec_orc(vbs
, vbs
);
573 vsi
= vec_orc(vsi
, vsi
);
575 vui
= vec_orc(vui
, vui
);
577 vbi
= vec_orc(vbi
, vbi
);
579 vsl
= vec_orc(vsl
, vsl
);
581 vul
= vec_orc(vul
, vul
);
583 vbl
= vec_orc(vbl
, vbl
);
585 vslll
= vec_orc(vslll
, vslll
);
587 vulll
= vec_orc(vulll
, vulll
);
589 vblll
= vec_orc(vblll
, vblll
);
591 vf
= vec_orc(vf
, vf
);
593 vd
= vec_orc(vd
, vd
);
596 vsc
= vec_eqv(vsc
, vsc
);
598 vuc
= vec_eqv(vuc
, vuc
);
600 vbc
= vec_eqv(vbc
, vbc
);
602 vss
= vec_eqv(vss
, vss
);
604 vus
= vec_eqv(vus
, vus
);
606 vbs
= vec_eqv(vbs
, vbs
);
608 vsi
= vec_eqv(vsi
, vsi
);
610 vui
= vec_eqv(vui
, vui
);
612 vbi
= vec_eqv(vbi
, vbi
);
614 vsl
= vec_eqv(vsl
, vsl
);
616 vul
= vec_eqv(vul
, vul
);
618 vbl
= vec_eqv(vbl
, vbl
);
620 vslll
= vec_eqv(vslll
, vslll
);
622 vulll
= vec_eqv(vulll
, vulll
);
624 vblll
= vec_eqv(vblll
, vblll
);
626 vf
= vec_eqv(vf
, vf
);
628 vd
= vec_eqv(vd
, vd
);
631 vuc
= vec_popcnt(vsc
);
632 // CHECK: call range(i8 0, 9) <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %{{.*}})
633 // CHECK-ASM: vpopctb
634 vuc
= vec_popcnt(vuc
);
635 // CHECK: call range(i8 0, 9) <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %{{.*}})
636 // CHECK-ASM: vpopctb
637 vus
= vec_popcnt(vss
);
638 // CHECK: call range(i16 0, 17) <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %{{.*}})
639 // CHECK-ASM: vpopcth
640 vus
= vec_popcnt(vus
);
641 // CHECK: call range(i16 0, 17) <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %{{.*}})
642 // CHECK-ASM: vpopcth
643 vui
= vec_popcnt(vsi
);
644 // CHECK: call range(i32 0, 33) <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %{{.*}})
645 // CHECK-ASM: vpopctf
646 vui
= vec_popcnt(vui
);
647 // CHECK: call range(i32 0, 33) <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %{{.*}})
648 // CHECK-ASM: vpopctf
649 vul
= vec_popcnt(vsl
);
650 // CHECK: call range(i64 0, 65) <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %{{.*}})
651 // CHECK-ASM: vpopctg
652 vul
= vec_popcnt(vul
);
653 // CHECK: call range(i64 0, 65) <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %{{.*}})
654 // CHECK-ASM: vpopctg
656 vf
= vec_slb(vf
, vsi
);
657 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
659 vf
= vec_slb(vf
, vui
);
660 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
662 vf
= vec_slb(vf
, vuc
);
663 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
665 vd
= vec_slb(vd
, vsl
);
666 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
668 vd
= vec_slb(vd
, vul
);
669 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
671 vd
= vec_slb(vd
, vuc
);
672 // CHECK: call <16 x i8> @llvm.s390.vslb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
675 vf
= vec_sld(vf
, vf
, 0);
676 // CHECK: call <16 x i8> @llvm.s390.vsldb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
678 vf
= vec_sld(vf
, vf
, 15);
679 // CHECK: call <16 x i8> @llvm.s390.vsldb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 15)
681 vd
= vec_sld(vd
, vd
, 0);
682 // CHECK: call <16 x i8> @llvm.s390.vsldb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)
684 vd
= vec_sld(vd
, vd
, 15);
685 // CHECK: call <16 x i8> @llvm.s390.vsldb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 15)
688 vf
= vec_srab(vf
, vsi
);
689 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
691 vf
= vec_srab(vf
, vui
);
692 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
694 vf
= vec_srab(vf
, vuc
);
695 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
697 vd
= vec_srab(vd
, vsl
);
698 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
700 vd
= vec_srab(vd
, vul
);
701 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
703 vd
= vec_srab(vd
, vuc
);
704 // CHECK: call <16 x i8> @llvm.s390.vsrab(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
707 vf
= vec_srb(vf
, vsi
);
708 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
710 vf
= vec_srb(vf
, vui
);
711 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
713 vf
= vec_srb(vf
, vuc
);
714 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
716 vd
= vec_srb(vd
, vsl
);
717 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
719 vd
= vec_srb(vd
, vul
);
720 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
722 vd
= vec_srb(vd
, vuc
);
723 // CHECK: call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
726 idx
= vec_test_mask(vf
, vui
);
727 // CHECK: call i32 @llvm.s390.vtm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
729 idx
= vec_test_mask(vd
, vul
);
730 // CHECK: call i32 @llvm.s390.vtm(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
733 vulll
= vec_msum(vul
, vul
, vulll
, 0);
734 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 0)
736 vulll
= vec_msum(vul
, vul
, vulll
, 4);
737 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 4)
739 vulll
= vec_msum(vul
, vul
, vulll
, 8);
740 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 8)
742 vulll
= vec_msum(vul
, vul
, vulll
, 12);
743 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 12)
746 vuc
= vec_msum_u128(vul
, vul
, vuc
, 0);
747 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 0)
749 vuc
= vec_msum_u128(vul
, vul
, vuc
, 4);
750 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 4)
752 vuc
= vec_msum_u128(vul
, vul
, vuc
, 8);
753 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 8)
755 vuc
= vec_msum_u128(vul
, vul
, vuc
, 12);
756 // CHECK: call i128 @llvm.s390.vmslg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}}, i32 12)
760 void test_float(void) {
761 // CHECK-ASM-LABEL: test_float
764 // CHECK: call <4 x float> @llvm.fabs.v4f32(<4 x float> %{{.*}})
767 // CHECK: call <2 x double> @llvm.fabs.v2f64(<2 x double> %{{.*}})
771 // CHECK: [[ABS:%[^ ]+]] = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %{{.*}})
772 // CHECK-NEXT: fneg <4 x float> [[ABS]]
775 // CHECK: [[ABS:%[^ ]+]] = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %{{.*}})
776 // CHECK-NEXT: fneg <2 x double> [[ABS]]
779 vf
= vec_max(vf
, vf
);
780 // CHECK: call <4 x float> @llvm.s390.vfmaxsb(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 0)
781 // CHECK-ASM: vfmaxsb
782 vd
= vec_max(vd
, vd
);
783 // CHECK: call <2 x double> @llvm.s390.vfmaxdb(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 0)
784 // CHECK-ASM: vfmaxdb
786 vf
= vec_min(vf
, vf
);
787 // CHECK: call <4 x float> @llvm.s390.vfminsb(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 0)
788 // CHECK-ASM: vfminsb
789 vd
= vec_min(vd
, vd
);
790 // CHECK: call <2 x double> @llvm.s390.vfmindb(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 0)
791 // CHECK-ASM: vfmindb
793 vf
= vec_madd(vf
, vf
, vf
);
794 // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
796 vd
= vec_madd(vd
, vd
, vd
);
797 // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})
800 vf
= vec_msub(vf
, vf
, vf
);
801 // CHECK: [[NEG:%[^ ]+]] = fneg <4 x float> %{{.*}}
802 // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]])
804 vd
= vec_msub(vd
, vd
, vd
);
805 // CHECK: [[NEG:%[^ ]+]] = fneg <2 x double> %{{.*}}
806 // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]])
809 vf
= vec_nmadd(vf
, vf
, vf
);
810 // CHECK: [[RES:%[^ ]+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
811 // CHECK: fneg <4 x float> [[RES]]
812 // CHECK-ASM: vfnmasb
813 vd
= vec_nmadd(vd
, vd
, vd
);
814 // CHECK: [[RES:%[^ ]+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})
815 // CHECK: fneg <2 x double> [[RES]]
816 // CHECK-ASM: vfnmadb
818 vf
= vec_nmsub(vf
, vf
, vf
);
819 // CHECK: [[NEG:%[^ ]+]] = fneg <4 x float> %{{.*}}
820 // CHECK: [[RES:%[^ ]+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]])
821 // CHECK: fneg <4 x float> [[RES]]
822 // CHECK-ASM: vfnmssb
823 vd
= vec_nmsub(vd
, vd
, vd
);
824 // CHECK: [[NEG:%[^ ]+]] = fneg <2 x double> %{{.*}}
825 // CHECK: [[RES:%[^ ]+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]])
826 // CHECK: fneg <2 x double> [[RES]]
827 // CHECK-ASM: vfnmsdb
830 // CHECK: call <4 x float> @llvm.sqrt.v4f32(<4 x float> %{{.*}})
833 // CHECK: call <2 x double> @llvm.sqrt.v2f64(<2 x double> %{{.*}})
836 vd
= vec_doublee(vf
);
837 // CHECK: fpext <2 x float> %{{.*}} to <2 x double>
840 // CHECK: fptrunc <2 x double> %{{.*}} to <2 x float>
843 vd
= vec_double(vsl
);
844 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
846 vd
= vec_double(vul
);
847 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
850 vsl
= vec_signed(vd
);
851 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
853 vul
= vec_unsigned(vd
);
854 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
858 // CHECK: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{.*}})
859 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 6
861 // CHECK: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{.*}})
862 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 6
864 // CHECK: call <2 x double> @llvm.ceil.v2f64(<2 x double> %{{.*}})
865 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 6
867 // CHECK: call <2 x double> @llvm.ceil.v2f64(<2 x double> %{{.*}})
868 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 6
871 // CHECK: call <4 x float> @llvm.floor.v4f32(<4 x float> %{{.*}})
872 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 7
874 // CHECK: call <4 x float> @llvm.floor.v4f32(<4 x float> %{{.*}})
875 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 7
877 // CHECK: call <2 x double> @llvm.floor.v2f64(<2 x double> %{{.*}})
878 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 7
880 // CHECK: call <2 x double> @llvm.floor.v2f64(<2 x double> %{{.*}})
881 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 7
884 // CHECK: call <4 x float> @llvm.trunc.v4f32(<4 x float> %{{.*}})
885 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 5
887 // CHECK: call <4 x float> @llvm.trunc.v4f32(<4 x float> %{{.*}})
888 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 5
890 // CHECK: call <2 x double> @llvm.trunc.v2f64(<2 x double> %{{.*}})
891 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 5
893 // CHECK: call <2 x double> @llvm.trunc.v2f64(<2 x double> %{{.*}})
894 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 5
897 // CHECK: call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %{{.*}})
898 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 0
900 // CHECK: call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %{{.*}})
901 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 0
904 // CHECK: call <4 x float> @llvm.rint.v4f32(<4 x float> %{{.*}})
905 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 0, 0
907 // CHECK: call <2 x double> @llvm.rint.v2f64(<2 x double> %{{.*}})
908 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 0, 0
911 // CHECK: call <4 x float> @llvm.s390.vfisb(<4 x float> %{{.*}}, i32 4, i32 4)
912 // CHECK-ASM: vfisb %{{.*}}, %{{.*}}, 4, 4
914 // CHECK: call <2 x double> @llvm.s390.vfidb(<2 x double> %{{.*}}, i32 4, i32 4)
915 // CHECK-ASM: vfidb %{{.*}}, %{{.*}}, 4, 4
917 vbi
= vec_fp_test_data_class(vf
, 0, &cc
);
918 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 0)
919 // CHECK-ASM: vftcisb
920 vbi
= vec_fp_test_data_class(vf
, 4095, &cc
);
921 // CHECK: call { <4 x i32>, i32 } @llvm.s390.vftcisb(<4 x float> %{{.*}}, i32 4095)
922 // CHECK-ASM: vftcisb
923 vbl
= vec_fp_test_data_class(vd
, 0, &cc
);
924 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 0)
925 // CHECK-ASM: vftcidb
926 vbl
= vec_fp_test_data_class(vd
, 4095, &cc
);
927 // CHECK: call { <2 x i64>, i32 } @llvm.s390.vftcidb(<2 x double> %{{.*}}, i32 4095)
928 // CHECK-ASM: vftcidb