xref: /llvm-project/flang/test/Lower/PowerPC/ppc-vec-convert.f90 (revision 246b57cb2086b22ad8b41051c77e86ef478053a1)
1! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-LE" %s
2! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-BE" %s
3! REQUIRES: target=powerpc{{.*}}
4
5!---------
6! vec_ctf
7!---------
8! CHECK-LABEL: vec_ctf_test_i4i1
9subroutine vec_ctf_test_i4i1(arg1)
10  vector(integer(4)), intent(in) :: arg1
11  vector(real(4)) :: r
12  r = vec_ctf(arg1, 1_1)
13
14! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
15! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1)
16! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
17end subroutine vec_ctf_test_i4i1
18
19! CHECK-LABEL: vec_ctf_test_i4i2
20subroutine vec_ctf_test_i4i2(arg1)
21  vector(integer(4)), intent(in) :: arg1
22  vector(real(4)) :: r
23  r = vec_ctf(arg1, 1_2)
24
25! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
26! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1)
27! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
28end subroutine vec_ctf_test_i4i2
29
30! CHECK-LABEL: vec_ctf_test_i4i4
31subroutine vec_ctf_test_i4i4(arg1)
32  vector(integer(4)), intent(in) :: arg1
33  vector(real(4)) :: r
34  r = vec_ctf(arg1, 1_4)
35
36! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
37! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1)
38! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
39end subroutine vec_ctf_test_i4i4
40
41! CHECK-LABEL: vec_ctf_test_i4i8
42subroutine vec_ctf_test_i4i8(arg1)
43  vector(integer(4)), intent(in) :: arg1
44  vector(real(4)) :: r
45  r = vec_ctf(arg1, 1_8)
46
47! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
48! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfsx(<4 x i32> %[[arg1]], i32 1)
49! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
50end subroutine vec_ctf_test_i4i8
51
52! CHECK-LABEL: vec_ctf_test_i8i1
53subroutine vec_ctf_test_i8i1(arg1)
54  vector(integer(8)), intent(in) :: arg1
55  vector(real(8)) :: r
56  r = vec_ctf(arg1, 3_1)
57
58! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
59! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double>
60! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
61! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
62end subroutine vec_ctf_test_i8i1
63
64! CHECK-LABEL: vec_ctf_test_i8i2
65subroutine vec_ctf_test_i8i2(arg1)
66  vector(integer(8)), intent(in) :: arg1
67  vector(real(8)) :: r
68  r = vec_ctf(arg1, 3_2)
69
70! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
71! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double>
72! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
73! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
74end subroutine vec_ctf_test_i8i2
75
76! CHECK-LABEL: vec_ctf_test_i8i4
77subroutine vec_ctf_test_i8i4(arg1)
78  vector(integer(8)), intent(in) :: arg1
79  vector(real(8)) :: r
80  r = vec_ctf(arg1, 3_4)
81
82! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
83! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double>
84! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
85! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
86end subroutine vec_ctf_test_i8i4
87
88! CHECK-LABEL: vec_ctf_test_i8i8
89subroutine vec_ctf_test_i8i8(arg1)
90  vector(integer(8)), intent(in) :: arg1
91  vector(real(8)) :: r
92  r = vec_ctf(arg1, 3_8)
93
94! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
95! LLVMIR: %[[carg:.*]] = sitofp <2 x i64> %[[arg1]] to <2 x double>
96! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
97! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
98end subroutine vec_ctf_test_i8i8
99
100! CHECK-LABEL: vec_ctf_test_u4i1
101subroutine vec_ctf_test_u4i1(arg1)
102  vector(unsigned(4)), intent(in) :: arg1
103  vector(real(4)) :: r
104  r = vec_ctf(arg1, 1_1)
105
106! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
107! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1)
108! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
109end subroutine vec_ctf_test_u4i1
110
111! CHECK-LABEL: vec_ctf_test_u4i2
112subroutine vec_ctf_test_u4i2(arg1)
113  vector(unsigned(4)), intent(in) :: arg1
114  vector(real(4)) :: r
115  r = vec_ctf(arg1, 1_2)
116
117! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
118! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1)
119! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
120end subroutine vec_ctf_test_u4i2
121
122! CHECK-LABEL: vec_ctf_test_u4i4
123subroutine vec_ctf_test_u4i4(arg1)
124  vector(unsigned(4)), intent(in) :: arg1
125  vector(real(4)) :: r
126  r = vec_ctf(arg1, 1_4)
127
128! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
129! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1)
130! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
131end subroutine vec_ctf_test_u4i4
132
133! CHECK-LABEL: vec_ctf_test_u4i8
134subroutine vec_ctf_test_u4i8(arg1)
135  vector(unsigned(4)), intent(in) :: arg1
136  vector(real(4)) :: r
137  r = vec_ctf(arg1, 1_8)
138
139! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
140! LLVMIR: %[[r:.*]] = call contract <4 x float> @llvm.ppc.altivec.vcfux(<4 x i32> %[[arg1]], i32 1)
141! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
142end subroutine vec_ctf_test_u4i8
143
144! CHECK-LABEL: vec_ctf_test_u8i1
145subroutine vec_ctf_test_u8i1(arg1)
146  vector(unsigned(8)), intent(in) :: arg1
147  vector(real(8)) :: r
148  r = vec_ctf(arg1, 3_1)
149
150! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
151! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double>
152! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
153! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
154end subroutine vec_ctf_test_u8i1
155
156! CHECK-LABEL: vec_ctf_test_u8i2
157subroutine vec_ctf_test_u8i2(arg1)
158  vector(unsigned(8)), intent(in) :: arg1
159  vector(real(8)) :: r
160  r = vec_ctf(arg1, 3_2)
161
162! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
163! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double>
164! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
165! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
166end subroutine vec_ctf_test_u8i2
167
168! CHECK-LABEL: vec_ctf_test_u8i4
169subroutine vec_ctf_test_u8i4(arg1)
170  vector(unsigned(8)), intent(in) :: arg1
171  vector(real(8)) :: r
172  r = vec_ctf(arg1, 3_4)
173
174! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
175! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double>
176! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
177! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
178end subroutine vec_ctf_test_u8i4
179
180! CHECK-LABEL: vec_ctf_test_u8i8
181subroutine vec_ctf_test_u8i8(arg1)
182  vector(unsigned(8)), intent(in) :: arg1
183  vector(real(8)) :: r
184  r = vec_ctf(arg1, 3_8)
185
186! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
187! LLVMIR: %[[carg:.*]] = uitofp <2 x i64> %[[arg1]] to <2 x double>
188! LLVMIR: %[[r:.*]] = fmul <2 x double> %[[carg]], splat (double 1.250000e-01)
189! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
190end subroutine vec_ctf_test_u8i8
191
192!-------------
193! vec_convert
194!-------------
195! CHECK-LABEL: vec_convert_test_i1i1
196subroutine vec_convert_test_i1i1(v, mold)
197  vector(integer(1)) :: v
198  vector(integer(1)) :: mold, r
199  r = vec_convert(v, mold)
200
201! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
202! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
203end subroutine vec_convert_test_i1i1
204
205! CHECK-LABEL: vec_convert_test_i1i2
206subroutine vec_convert_test_i1i2(v, mold)
207  vector(integer(1)) :: v
208  vector(integer(2)) :: mold, r
209  r = vec_convert(v, mold)
210
211! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
212! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16>
213! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
214end subroutine vec_convert_test_i1i2
215
216! CHECK-LABEL: vec_convert_test_i1i4
217subroutine vec_convert_test_i1i4(v, mold)
218  vector(integer(1)) :: v
219  vector(integer(4)) :: mold, r
220  r = vec_convert(v, mold)
221
222! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
223! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32>
224! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
225end subroutine vec_convert_test_i1i4
226
227! CHECK-LABEL: vec_convert_test_i1i8
228subroutine vec_convert_test_i1i8(v, mold)
229  vector(integer(1)) :: v
230  vector(integer(8)) :: mold, r
231  r = vec_convert(v, mold)
232
233! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
234! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64>
235! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
236end subroutine vec_convert_test_i1i8
237
238! CHECK-LABEL: vec_convert_test_i1u1
239subroutine vec_convert_test_i1u1(v, mold)
240  vector(integer(1)) :: v
241  vector(unsigned(1)) :: mold, r
242  r = vec_convert(v, mold)
243
244! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
245! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
246end subroutine vec_convert_test_i1u1
247
248! CHECK-LABEL: vec_convert_test_i1u2
249subroutine vec_convert_test_i1u2(v, mold)
250  vector(integer(1)) :: v
251  vector(unsigned(2)) :: mold, r
252  r = vec_convert(v, mold)
253
254! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
255! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16>
256! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
257end subroutine vec_convert_test_i1u2
258
259! CHECK-LABEL: vec_convert_test_i1u4
260subroutine vec_convert_test_i1u4(v, mold)
261  vector(integer(1)) :: v
262  vector(unsigned(4)) :: mold, r
263  r = vec_convert(v, mold)
264
265! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
266! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32>
267! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
268end subroutine vec_convert_test_i1u4
269
270! CHECK-LABEL: vec_convert_test_i1u8
271subroutine vec_convert_test_i1u8(v, mold)
272  vector(integer(1)) :: v
273  vector(unsigned(8)) :: mold, r
274  r = vec_convert(v, mold)
275
276! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
277! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64>
278! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
279end subroutine vec_convert_test_i1u8
280
281! CHECK-LABEL: vec_convert_test_i1r4
282subroutine vec_convert_test_i1r4(v, mold)
283  vector(integer(1)) :: v
284  vector(real(4)) :: mold, r
285  r = vec_convert(v, mold)
286
287! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
288! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x float>
289! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
290end subroutine vec_convert_test_i1r4
291
292! CHECK-LABEL: vec_convert_test_i1r8
293subroutine vec_convert_test_i1r8(v, mold)
294  vector(integer(1)) :: v
295  vector(real(8)) :: mold, r
296  r = vec_convert(v, mold)
297
298! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
299! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x double>
300! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
301end subroutine vec_convert_test_i1r8
302
303! CHECK-LABEL: vec_convert_test_i2i1
304subroutine vec_convert_test_i2i1(v, mold)
305  vector(integer(2)) :: v
306  vector(integer(1)) :: mold, r
307  r = vec_convert(v, mold)
308
309! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
310! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8>
311! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
312end subroutine vec_convert_test_i2i1
313
314! CHECK-LABEL: vec_convert_test_i2i2
315subroutine vec_convert_test_i2i2(v, mold)
316  vector(integer(2)) :: v
317  vector(integer(2)) :: mold, r
318  r = vec_convert(v, mold)
319
320! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
321! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
322end subroutine vec_convert_test_i2i2
323
324! CHECK-LABEL: vec_convert_test_i2i4
325subroutine vec_convert_test_i2i4(v, mold)
326  vector(integer(2)) :: v
327  vector(integer(4)) :: mold, r
328  r = vec_convert(v, mold)
329
330! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
331! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32>
332! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
333end subroutine vec_convert_test_i2i4
334
335! CHECK-LABEL: vec_convert_test_i2i8
336subroutine vec_convert_test_i2i8(v, mold)
337  vector(integer(2)) :: v
338  vector(integer(8)) :: mold, r
339  r = vec_convert(v, mold)
340
341! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
342! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64>
343! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
344end subroutine vec_convert_test_i2i8
345
346! CHECK-LABEL: vec_convert_test_i2u1
347subroutine vec_convert_test_i2u1(v, mold)
348  vector(integer(2)) :: v
349  vector(unsigned(1)) :: mold, r
350  r = vec_convert(v, mold)
351
352! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
353! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8>
354! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
355end subroutine vec_convert_test_i2u1
356
357! CHECK-LABEL: vec_convert_test_i2u2
358subroutine vec_convert_test_i2u2(v, mold)
359  vector(integer(2)) :: v
360  vector(unsigned(2)) :: mold, r
361  r = vec_convert(v, mold)
362
363! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
364! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
365end subroutine vec_convert_test_i2u2
366
367! CHECK-LABEL: vec_convert_test_i2u4
368subroutine vec_convert_test_i2u4(v, mold)
369  vector(integer(2)) :: v
370  vector(unsigned(4)) :: mold, r
371  r = vec_convert(v, mold)
372
373! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
374! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32>
375! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
376end subroutine vec_convert_test_i2u4
377
378! CHECK-LABEL: vec_convert_test_i2u8
379subroutine vec_convert_test_i2u8(v, mold)
380  vector(integer(2)) :: v
381  vector(unsigned(8)) :: mold, r
382  r = vec_convert(v, mold)
383
384! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
385! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64>
386! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
387end subroutine vec_convert_test_i2u8
388
389! CHECK-LABEL: vec_convert_test_i2r4
390subroutine vec_convert_test_i2r4(v, mold)
391  vector(integer(2)) :: v
392  vector(real(4)) :: mold, r
393  r = vec_convert(v, mold)
394
395! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
396! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x float>
397! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
398end subroutine vec_convert_test_i2r4
399
400! CHECK-LABEL: vec_convert_test_i2r8
401subroutine vec_convert_test_i2r8(v, mold)
402  vector(integer(2)) :: v
403  vector(real(8)) :: mold, r
404  r = vec_convert(v, mold)
405
406! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
407! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x double>
408! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
409end subroutine vec_convert_test_i2r8
410
411! CHECK-LABEL: vec_convert_test_i4i1
412subroutine vec_convert_test_i4i1(v, mold)
413  vector(integer(4)) :: v
414  vector(integer(1)) :: mold, r
415  r = vec_convert(v, mold)
416
417! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
418! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8>
419! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
420end subroutine vec_convert_test_i4i1
421
422! CHECK-LABEL: vec_convert_test_i4i2
423subroutine vec_convert_test_i4i2(v, mold)
424  vector(integer(4)) :: v
425  vector(integer(2)) :: mold, r
426  r = vec_convert(v, mold)
427
428! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
429! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16>
430! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
431end subroutine vec_convert_test_i4i2
432
433! CHECK-LABEL: vec_convert_test_i4i4
434subroutine vec_convert_test_i4i4(v, mold)
435  vector(integer(4)) :: v
436  vector(integer(4)) :: mold, r
437  r = vec_convert(v, mold)
438
439! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
440! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
441end subroutine vec_convert_test_i4i4
442
443! CHECK-LABEL: vec_convert_test_i4i8
444subroutine vec_convert_test_i4i8(v, mold)
445  vector(integer(4)) :: v
446  vector(integer(8)) :: mold, r
447  r = vec_convert(v, mold)
448
449! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
450! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64>
451! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
452end subroutine vec_convert_test_i4i8
453
454! CHECK-LABEL: vec_convert_test_i4u1
455subroutine vec_convert_test_i4u1(v, mold)
456  vector(integer(4)) :: v
457  vector(unsigned(1)) :: mold, r
458  r = vec_convert(v, mold)
459
460! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
461! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8>
462! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
463end subroutine vec_convert_test_i4u1
464
465! CHECK-LABEL: vec_convert_test_i4u2
466subroutine vec_convert_test_i4u2(v, mold)
467  vector(integer(4)) :: v
468  vector(unsigned(2)) :: mold, r
469  r = vec_convert(v, mold)
470
471! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
472! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16>
473! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
474end subroutine vec_convert_test_i4u2
475
476! CHECK-LABEL: vec_convert_test_i4u4
477subroutine vec_convert_test_i4u4(v, mold)
478  vector(integer(4)) :: v
479  vector(unsigned(4)) :: mold, r
480  r = vec_convert(v, mold)
481
482! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
483! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
484end subroutine vec_convert_test_i4u4
485
486! CHECK-LABEL: vec_convert_test_i4u8
487subroutine vec_convert_test_i4u8(v, mold)
488  vector(integer(4)) :: v
489  vector(unsigned(8)) :: mold, r
490  r = vec_convert(v, mold)
491
492! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
493! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64>
494! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
495end subroutine vec_convert_test_i4u8
496
497! CHECK-LABEL: vec_convert_test_i4r4
498subroutine vec_convert_test_i4r4(v, mold)
499  vector(integer(4)) :: v
500  vector(real(4)) :: mold, r
501  r = vec_convert(v, mold)
502
503! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
504! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <4 x float>
505! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
506end subroutine vec_convert_test_i4r4
507
508! CHECK-LABEL: vec_convert_test_i4r8
509subroutine vec_convert_test_i4r8(v, mold)
510  vector(integer(4)) :: v
511  vector(real(8)) :: mold, r
512  r = vec_convert(v, mold)
513
514! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
515! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double>
516! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
517end subroutine vec_convert_test_i4r8
518
519! CHECK-LABEL: vec_convert_test_i8i1
520subroutine vec_convert_test_i8i1(v, mold)
521  vector(integer(8)) :: v
522  vector(integer(1)) :: mold, r
523  r = vec_convert(v, mold)
524
525! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
526! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8>
527! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
528end subroutine vec_convert_test_i8i1
529
530! CHECK-LABEL: vec_convert_test_i8i2
531subroutine vec_convert_test_i8i2(v, mold)
532  vector(integer(8)) :: v
533  vector(integer(2)) :: mold, r
534  r = vec_convert(v, mold)
535
536! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
537! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16>
538! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
539end subroutine vec_convert_test_i8i2
540
541! CHECK-LABEL: vec_convert_test_i8i4
542subroutine vec_convert_test_i8i4(v, mold)
543  vector(integer(8)) :: v
544  vector(integer(4)) :: mold, r
545  r = vec_convert(v, mold)
546
547! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
548! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32>
549! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
550end subroutine vec_convert_test_i8i4
551
552! CHECK-LABEL: vec_convert_test_i8i8
553subroutine vec_convert_test_i8i8(v, mold)
554  vector(integer(8)) :: v
555  vector(integer(8)) :: mold, r
556  r = vec_convert(v, mold)
557
558! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
559! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
560end subroutine vec_convert_test_i8i8
561
562! CHECK-LABEL: vec_convert_test_i8u1
563subroutine vec_convert_test_i8u1(v, mold)
564  vector(integer(8)) :: v
565  vector(unsigned(1)) :: mold, r
566  r = vec_convert(v, mold)
567
568! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
569! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8>
570! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
571end subroutine vec_convert_test_i8u1
572
573! CHECK-LABEL: vec_convert_test_i8u2
574subroutine vec_convert_test_i8u2(v, mold)
575  vector(integer(8)) :: v
576  vector(unsigned(2)) :: mold, r
577  r = vec_convert(v, mold)
578
579! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
580! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16>
581! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
582end subroutine vec_convert_test_i8u2
583
584! CHECK-LABEL: vec_convert_test_i8u4
585subroutine vec_convert_test_i8u4(v, mold)
586  vector(integer(8)) :: v
587  vector(unsigned(4)) :: mold, r
588  r = vec_convert(v, mold)
589
590! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
591! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32>
592! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
593end subroutine vec_convert_test_i8u4
594
595! CHECK-LABEL: vec_convert_test_i8u8
596subroutine vec_convert_test_i8u8(v, mold)
597  vector(integer(8)) :: v
598  vector(unsigned(8)) :: mold, r
599  r = vec_convert(v, mold)
600
601! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
602! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
603end subroutine vec_convert_test_i8u8
604
605! CHECK-LABEL: vec_convert_test_i8r4
606subroutine vec_convert_test_i8r4(v, mold)
607  vector(integer(8)) :: v
608  vector(real(4)) :: mold, r
609  r = vec_convert(v, mold)
610
611! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
612! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x float>
613! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
614end subroutine vec_convert_test_i8r4
615
616! CHECK-LABEL: vec_convert_test_i8r8
617subroutine vec_convert_test_i8r8(v, mold)
618  vector(integer(8)) :: v
619  vector(real(8)) :: mold, r
620  r = vec_convert(v, mold)
621
622! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
623! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <2 x double>
624! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
625end subroutine vec_convert_test_i8r8
626
627! CHECK-LABEL: vec_convert_test_u1i1
628subroutine vec_convert_test_u1i1(v, mold)
629  vector(unsigned(1)) :: v
630  vector(integer(1)) :: mold, r
631  r = vec_convert(v, mold)
632
633! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
634! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
635end subroutine vec_convert_test_u1i1
636
637! CHECK-LABEL: vec_convert_test_u1i2
638subroutine vec_convert_test_u1i2(v, mold)
639  vector(unsigned(1)) :: v
640  vector(integer(2)) :: mold, r
641  r = vec_convert(v, mold)
642
643! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
644! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16>
645! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
646end subroutine vec_convert_test_u1i2
647
648! CHECK-LABEL: vec_convert_test_u1i4
649subroutine vec_convert_test_u1i4(v, mold)
650  vector(unsigned(1)) :: v
651  vector(integer(4)) :: mold, r
652  r = vec_convert(v, mold)
653
654! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
655! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32>
656! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
657end subroutine vec_convert_test_u1i4
658
659! CHECK-LABEL: vec_convert_test_u1i8
660subroutine vec_convert_test_u1i8(v, mold)
661  vector(unsigned(1)) :: v
662  vector(integer(8)) :: mold, r
663  r = vec_convert(v, mold)
664
665! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
666! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64>
667! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
668end subroutine vec_convert_test_u1i8
669
670! CHECK-LABEL: vec_convert_test_u1u1
671subroutine vec_convert_test_u1u1(v, mold)
672  vector(unsigned(1)) :: v
673  vector(unsigned(1)) :: mold, r
674  r = vec_convert(v, mold)
675
676! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
677! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
678end subroutine vec_convert_test_u1u1
679
680! CHECK-LABEL: vec_convert_test_u1u2
681subroutine vec_convert_test_u1u2(v, mold)
682  vector(unsigned(1)) :: v
683  vector(unsigned(2)) :: mold, r
684  r = vec_convert(v, mold)
685
686! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
687! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <8 x i16>
688! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
689end subroutine vec_convert_test_u1u2
690
691! CHECK-LABEL: vec_convert_test_u1u4
692subroutine vec_convert_test_u1u4(v, mold)
693  vector(unsigned(1)) :: v
694  vector(unsigned(4)) :: mold, r
695  r = vec_convert(v, mold)
696
697! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
698! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x i32>
699! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
700end subroutine vec_convert_test_u1u4
701
702! CHECK-LABEL: vec_convert_test_u1u8
703subroutine vec_convert_test_u1u8(v, mold)
704  vector(unsigned(1)) :: v
705  vector(unsigned(8)) :: mold, r
706  r = vec_convert(v, mold)
707
708! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
709! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x i64>
710! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
711end subroutine vec_convert_test_u1u8
712
713! CHECK-LABEL: vec_convert_test_u1r4
714subroutine vec_convert_test_u1r4(v, mold)
715  vector(unsigned(1)) :: v
716  vector(real(4)) :: mold, r
717  r = vec_convert(v, mold)
718
719! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
720! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <4 x float>
721! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
722end subroutine vec_convert_test_u1r4
723
724! CHECK-LABEL: vec_convert_test_u1r8
725subroutine vec_convert_test_u1r8(v, mold)
726  vector(unsigned(1)) :: v
727  vector(real(8)) :: mold, r
728  r = vec_convert(v, mold)
729
730! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
731! LLVMIR: %[[r:.*]] = bitcast <16 x i8> %[[v]] to <2 x double>
732! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
733end subroutine vec_convert_test_u1r8
734
735! CHECK-LABEL: vec_convert_test_u2i1
736subroutine vec_convert_test_u2i1(v, mold)
737  vector(unsigned(2)) :: v
738  vector(integer(1)) :: mold, r
739  r = vec_convert(v, mold)
740
741! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
742! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8>
743! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
744end subroutine vec_convert_test_u2i1
745
746! CHECK-LABEL: vec_convert_test_u2i2
747subroutine vec_convert_test_u2i2(v, mold)
748  vector(unsigned(2)) :: v
749  vector(integer(2)) :: mold, r
750  r = vec_convert(v, mold)
751
752! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
753! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
754end subroutine vec_convert_test_u2i2
755
756! CHECK-LABEL: vec_convert_test_u2i4
757subroutine vec_convert_test_u2i4(v, mold)
758  vector(unsigned(2)) :: v
759  vector(integer(4)) :: mold, r
760  r = vec_convert(v, mold)
761
762! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
763! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32>
764! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
765end subroutine vec_convert_test_u2i4
766
767! CHECK-LABEL: vec_convert_test_u2i8
768subroutine vec_convert_test_u2i8(v, mold)
769  vector(unsigned(2)) :: v
770  vector(integer(8)) :: mold, r
771  r = vec_convert(v, mold)
772
773! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
774! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64>
775! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
776end subroutine vec_convert_test_u2i8
777
778! CHECK-LABEL: vec_convert_test_u2u1
779subroutine vec_convert_test_u2u1(v, mold)
780  vector(unsigned(2)) :: v
781  vector(unsigned(1)) :: mold, r
782  r = vec_convert(v, mold)
783
784! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
785! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <16 x i8>
786! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
787end subroutine vec_convert_test_u2u1
788
789! CHECK-LABEL: vec_convert_test_u2u2
790subroutine vec_convert_test_u2u2(v, mold)
791  vector(unsigned(2)) :: v
792  vector(unsigned(2)) :: mold, r
793  r = vec_convert(v, mold)
794
795! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
796! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
797end subroutine vec_convert_test_u2u2
798
799! CHECK-LABEL: vec_convert_test_u2u4
800subroutine vec_convert_test_u2u4(v, mold)
801  vector(unsigned(2)) :: v
802  vector(unsigned(4)) :: mold, r
803  r = vec_convert(v, mold)
804
805! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
806! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x i32>
807! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
808end subroutine vec_convert_test_u2u4
809
810! CHECK-LABEL: vec_convert_test_u2u8
811subroutine vec_convert_test_u2u8(v, mold)
812  vector(unsigned(2)) :: v
813  vector(unsigned(8)) :: mold, r
814  r = vec_convert(v, mold)
815
816! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
817! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x i64>
818! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
819end subroutine vec_convert_test_u2u8
820
821! CHECK-LABEL: vec_convert_test_u2r4
822subroutine vec_convert_test_u2r4(v, mold)
823  vector(unsigned(2)) :: v
824  vector(real(4)) :: mold, r
825  r = vec_convert(v, mold)
826
827! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
828! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <4 x float>
829! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
830end subroutine vec_convert_test_u2r4
831
832! CHECK-LABEL: vec_convert_test_u2r8
833subroutine vec_convert_test_u2r8(v, mold)
834  vector(unsigned(2)) :: v
835  vector(real(8)) :: mold, r
836  r = vec_convert(v, mold)
837
838! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
839! LLVMIR: %[[r:.*]] = bitcast <8 x i16> %[[v]] to <2 x double>
840! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
841end subroutine vec_convert_test_u2r8
842
843! CHECK-LABEL: vec_convert_test_u4i1
844subroutine vec_convert_test_u4i1(v, mold)
845  vector(unsigned(4)) :: v
846  vector(integer(1)) :: mold, r
847  r = vec_convert(v, mold)
848
849! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
850! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8>
851! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
852end subroutine vec_convert_test_u4i1
853
854! CHECK-LABEL: vec_convert_test_u4i2
855subroutine vec_convert_test_u4i2(v, mold)
856  vector(unsigned(4)) :: v
857  vector(integer(2)) :: mold, r
858  r = vec_convert(v, mold)
859
860! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
861! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16>
862! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
863end subroutine vec_convert_test_u4i2
864
865! CHECK-LABEL: vec_convert_test_u4i4
866subroutine vec_convert_test_u4i4(v, mold)
867  vector(unsigned(4)) :: v
868  vector(integer(4)) :: mold, r
869  r = vec_convert(v, mold)
870
871! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
872! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
873end subroutine vec_convert_test_u4i4
874
875! CHECK-LABEL: vec_convert_test_u4i8
876subroutine vec_convert_test_u4i8(v, mold)
877  vector(unsigned(4)) :: v
878  vector(integer(8)) :: mold, r
879  r = vec_convert(v, mold)
880
881! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
882! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64>
883! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
884end subroutine vec_convert_test_u4i8
885
886! CHECK-LABEL: vec_convert_test_u4u1
887subroutine vec_convert_test_u4u1(v, mold)
888  vector(unsigned(4)) :: v
889  vector(unsigned(1)) :: mold, r
890  r = vec_convert(v, mold)
891
892! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
893! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <16 x i8>
894! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
895end subroutine vec_convert_test_u4u1
896
897! CHECK-LABEL: vec_convert_test_u4u2
898subroutine vec_convert_test_u4u2(v, mold)
899  vector(unsigned(4)) :: v
900  vector(unsigned(2)) :: mold, r
901  r = vec_convert(v, mold)
902
903! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
904! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <8 x i16>
905! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
906end subroutine vec_convert_test_u4u2
907
908! CHECK-LABEL: vec_convert_test_u4u4
909subroutine vec_convert_test_u4u4(v, mold)
910  vector(unsigned(4)) :: v
911  vector(unsigned(4)) :: mold, r
912  r = vec_convert(v, mold)
913
914! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
915! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
916end subroutine vec_convert_test_u4u4
917
918! CHECK-LABEL: vec_convert_test_u4u8
919subroutine vec_convert_test_u4u8(v, mold)
920  vector(unsigned(4)) :: v
921  vector(unsigned(8)) :: mold, r
922  r = vec_convert(v, mold)
923
924! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
925! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x i64>
926! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
927end subroutine vec_convert_test_u4u8
928
929! CHECK-LABEL: vec_convert_test_u4r4
930subroutine vec_convert_test_u4r4(v, mold)
931  vector(unsigned(4)) :: v
932  vector(real(4)) :: mold, r
933  r = vec_convert(v, mold)
934
935! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
936! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <4 x float>
937! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
938end subroutine vec_convert_test_u4r4
939
940! CHECK-LABEL: vec_convert_test_u4r8
941subroutine vec_convert_test_u4r8(v, mold)
942  vector(unsigned(4)) :: v
943  vector(real(8)) :: mold, r
944  r = vec_convert(v, mold)
945
946! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
947! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double>
948! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
949end subroutine vec_convert_test_u4r8
950
951! CHECK-LABEL: vec_convert_test_u8i1
952subroutine vec_convert_test_u8i1(v, mold)
953  vector(unsigned(8)) :: v
954  vector(integer(1)) :: mold, r
955  r = vec_convert(v, mold)
956
957! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
958! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8>
959! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
960end subroutine vec_convert_test_u8i1
961
962! CHECK-LABEL: vec_convert_test_u8i2
963subroutine vec_convert_test_u8i2(v, mold)
964  vector(unsigned(8)) :: v
965  vector(integer(2)) :: mold, r
966  r = vec_convert(v, mold)
967
968! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
969! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16>
970! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
971end subroutine vec_convert_test_u8i2
972
973! CHECK-LABEL: vec_convert_test_u8i4
974subroutine vec_convert_test_u8i4(v, mold)
975  vector(unsigned(8)) :: v
976  vector(integer(4)) :: mold, r
977  r = vec_convert(v, mold)
978
979! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
980! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32>
981! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
982end subroutine vec_convert_test_u8i4
983
984! CHECK-LABEL: vec_convert_test_u8i8
985subroutine vec_convert_test_u8i8(v, mold)
986  vector(unsigned(8)) :: v
987  vector(integer(8)) :: mold, r
988  r = vec_convert(v, mold)
989
990! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
991! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
992end subroutine vec_convert_test_u8i8
993
994! CHECK-LABEL: vec_convert_test_u8u1
995subroutine vec_convert_test_u8u1(v, mold)
996  vector(unsigned(8)) :: v
997  vector(unsigned(1)) :: mold, r
998  r = vec_convert(v, mold)
999
1000! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1001! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <16 x i8>
1002! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
1003end subroutine vec_convert_test_u8u1
1004
1005! CHECK-LABEL: vec_convert_test_u8u2
1006subroutine vec_convert_test_u8u2(v, mold)
1007  vector(unsigned(8)) :: v
1008  vector(unsigned(2)) :: mold, r
1009  r = vec_convert(v, mold)
1010
1011! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1012! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16>
1013! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1014end subroutine vec_convert_test_u8u2
1015
1016! CHECK-LABEL: vec_convert_test_u8u4
1017subroutine vec_convert_test_u8u4(v, mold)
1018  vector(unsigned(8)) :: v
1019  vector(unsigned(4)) :: mold, r
1020  r = vec_convert(v, mold)
1021
1022! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1023! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x i32>
1024! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
1025end subroutine vec_convert_test_u8u4
1026
1027! CHECK-LABEL: vec_convert_test_u8u8
1028subroutine vec_convert_test_u8u8(v, mold)
1029  vector(unsigned(8)) :: v
1030  vector(unsigned(8)) :: mold, r
1031  r = vec_convert(v, mold)
1032
1033! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1034! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
1035end subroutine vec_convert_test_u8u8
1036
1037! CHECK-LABEL: vec_convert_test_u8r4
1038subroutine vec_convert_test_u8r4(v, mold)
1039  vector(unsigned(8)) :: v
1040  vector(real(4)) :: mold, r
1041  r = vec_convert(v, mold)
1042
1043! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1044! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <4 x float>
1045! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
1046end subroutine vec_convert_test_u8r4
1047
1048! CHECK-LABEL: vec_convert_test_u8r8
1049subroutine vec_convert_test_u8r8(v, mold)
1050  vector(unsigned(8)) :: v
1051  vector(real(8)) :: mold, r
1052  r = vec_convert(v, mold)
1053
1054! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1055! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <2 x double>
1056! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
1057end subroutine vec_convert_test_u8r8
1058
1059! CHECK-LABEL: vec_convert_test_r4i1
1060subroutine vec_convert_test_r4i1(v, mold)
1061  vector(real(4)) :: v
1062  vector(integer(1)) :: mold, r
1063  r = vec_convert(v, mold)
1064
1065! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1066! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <16 x i8>
1067! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
1068end subroutine vec_convert_test_r4i1
1069
1070! CHECK-LABEL: vec_convert_test_r4i2
1071subroutine vec_convert_test_r4i2(v, mold)
1072  vector(real(4)) :: v
1073  vector(integer(2)) :: mold, r
1074  r = vec_convert(v, mold)
1075
1076! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1077! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <8 x i16>
1078! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1079end subroutine vec_convert_test_r4i2
1080
1081! CHECK-LABEL: vec_convert_test_r4i4
1082subroutine vec_convert_test_r4i4(v, mold)
1083  vector(real(4)) :: v
1084  vector(integer(4)) :: mold, r
1085  r = vec_convert(v, mold)
1086
1087! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1088! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <4 x i32>
1089! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
1090end subroutine vec_convert_test_r4i4
1091
1092! CHECK-LABEL: vec_convert_test_r4i8
1093subroutine vec_convert_test_r4i8(v, mold)
1094  vector(real(4)) :: v
1095  vector(integer(8)) :: mold, r
1096  r = vec_convert(v, mold)
1097
1098! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1099! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x i64>
1100! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
1101end subroutine vec_convert_test_r4i8
1102
1103! CHECK-LABEL: vec_convert_test_r4u1
1104subroutine vec_convert_test_r4u1(v, mold)
1105  vector(real(4)) :: v
1106  vector(unsigned(1)) :: mold, r
1107  r = vec_convert(v, mold)
1108
1109! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1110! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <16 x i8>
1111! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
1112end subroutine vec_convert_test_r4u1
1113
1114! CHECK-LABEL: vec_convert_test_r4u2
1115subroutine vec_convert_test_r4u2(v, mold)
1116  vector(real(4)) :: v
1117  vector(unsigned(2)) :: mold, r
1118  r = vec_convert(v, mold)
1119
1120! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1121! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <8 x i16>
1122! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1123end subroutine vec_convert_test_r4u2
1124
1125! CHECK-LABEL: vec_convert_test_r4u4
1126subroutine vec_convert_test_r4u4(v, mold)
1127  vector(real(4)) :: v
1128  vector(unsigned(4)) :: mold, r
1129  r = vec_convert(v, mold)
1130
1131! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1132! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <4 x i32>
1133! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
1134end subroutine vec_convert_test_r4u4
1135
1136! CHECK-LABEL: vec_convert_test_r4u8
1137subroutine vec_convert_test_r4u8(v, mold)
1138  vector(real(4)) :: v
1139  vector(unsigned(8)) :: mold, r
1140  r = vec_convert(v, mold)
1141
1142! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1143! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x i64>
1144! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
1145end subroutine vec_convert_test_r4u8
1146
1147! CHECK-LABEL: vec_convert_test_r4r4
1148subroutine vec_convert_test_r4r4(v, mold)
1149  vector(real(4)) :: v
1150  vector(real(4)) :: mold, r
1151  r = vec_convert(v, mold)
1152
1153! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1154! LLVMIR: store <4 x float> %[[v]], ptr %{{.*}}, align 16
1155end subroutine vec_convert_test_r4r4
1156
1157! CHECK-LABEL: vec_convert_test_r4r8
1158subroutine vec_convert_test_r4r8(v, mold)
1159  vector(real(4)) :: v
1160  vector(real(8)) :: mold, r
1161  r = vec_convert(v, mold)
1162
1163! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1164! LLVMIR: %[[r:.*]] = bitcast <4 x float> %[[v]] to <2 x double>
1165! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
1166end subroutine vec_convert_test_r4r8
1167
1168! CHECK-LABEL: vec_convert_test_r8i1
1169subroutine vec_convert_test_r8i1(v, mold)
1170  vector(real(8)) :: v
1171  vector(integer(1)) :: mold, r
1172  r = vec_convert(v, mold)
1173
1174! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1175! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <16 x i8>
1176! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
1177end subroutine vec_convert_test_r8i1
1178
1179! CHECK-LABEL: vec_convert_test_r8i2
1180subroutine vec_convert_test_r8i2(v, mold)
1181  vector(real(8)) :: v
1182  vector(integer(2)) :: mold, r
1183  r = vec_convert(v, mold)
1184
1185! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1186! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <8 x i16>
1187! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1188end subroutine vec_convert_test_r8i2
1189
1190! CHECK-LABEL: vec_convert_test_r8i4
1191subroutine vec_convert_test_r8i4(v, mold)
1192  vector(real(8)) :: v
1193  vector(integer(4)) :: mold, r
1194  r = vec_convert(v, mold)
1195
1196! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1197! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x i32>
1198! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
1199end subroutine vec_convert_test_r8i4
1200
1201! CHECK-LABEL: vec_convert_test_r8i8
1202subroutine vec_convert_test_r8i8(v, mold)
1203  vector(real(8)) :: v
1204  vector(integer(8)) :: mold, r
1205  r = vec_convert(v, mold)
1206
1207! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1208! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <2 x i64>
1209! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
1210end subroutine vec_convert_test_r8i8
1211
1212! CHECK-LABEL: vec_convert_test_r8u1
1213subroutine vec_convert_test_r8u1(v, mold)
1214  vector(real(8)) :: v
1215  vector(unsigned(1)) :: mold, r
1216  r = vec_convert(v, mold)
1217
1218! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1219! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <16 x i8>
1220! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16
1221end subroutine vec_convert_test_r8u1
1222
1223! CHECK-LABEL: vec_convert_test_r8u2
1224subroutine vec_convert_test_r8u2(v, mold)
1225  vector(real(8)) :: v
1226  vector(unsigned(2)) :: mold, r
1227  r = vec_convert(v, mold)
1228
1229! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1230! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <8 x i16>
1231! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1232end subroutine vec_convert_test_r8u2
1233
1234! CHECK-LABEL: vec_convert_test_r8u4
1235subroutine vec_convert_test_r8u4(v, mold)
1236  vector(real(8)) :: v
1237  vector(unsigned(4)) :: mold, r
1238  r = vec_convert(v, mold)
1239
1240! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1241! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x i32>
1242! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16
1243end subroutine vec_convert_test_r8u4
1244
1245! CHECK-LABEL: vec_convert_test_r8u8
1246subroutine vec_convert_test_r8u8(v, mold)
1247  vector(real(8)) :: v
1248  vector(unsigned(8)) :: mold, r
1249  r = vec_convert(v, mold)
1250
1251! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1252! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <2 x i64>
1253! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16
1254end subroutine vec_convert_test_r8u8
1255
1256! CHECK-LABEL: vec_convert_test_r8r4
1257subroutine vec_convert_test_r8r4(v, mold)
1258  vector(real(8)) :: v
1259  vector(real(4)) :: mold, r
1260  r = vec_convert(v, mold)
1261
1262! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1263! LLVMIR: %[[r:.*]] = bitcast <2 x double> %[[v]] to <4 x float>
1264! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16
1265end subroutine vec_convert_test_r8r4
1266
1267! CHECK-LABEL: vec_convert_test_r8r8
1268subroutine vec_convert_test_r8r8(v, mold)
1269  vector(real(8)) :: v
1270  vector(real(8)) :: mold, r
1271  r = vec_convert(v, mold)
1272
1273! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1274! LLVMIR: store <2 x double> %[[v]], ptr %{{.*}}, align 16
1275end subroutine vec_convert_test_r8r8
1276
1277! CHECK-LABEL: vec_convert_test_i1i1_array
1278subroutine vec_convert_test_i1i1_array(v, mold)
1279  vector(integer(1)) :: v
1280  vector(integer(1)) :: mold(4, 8), r
1281  r = vec_convert(v, mold)
1282
1283! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
1284! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
1285end subroutine vec_convert_test_i1i1_array
1286
1287! CHECK-LABEL: vec_convert_test_i4r8_array
1288subroutine vec_convert_test_i4r8_array(v, mold)
1289  vector(integer(4)) :: v
1290  vector(real(8)) :: mold(2, 4, 8), r
1291  r = vec_convert(v, mold)
1292
1293! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %{{.*}}, align 16
1294! LLVMIR: %[[r:.*]] = bitcast <4 x i32> %[[v]] to <2 x double>
1295! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16
1296end subroutine vec_convert_test_i4r8_array
1297
1298! CHECK-LABEL: vec_convert_test_u8i2_array
1299subroutine vec_convert_test_u8i2_array(v, mold)
1300  vector(unsigned(8)) :: v
1301  vector(integer(2)) :: mold(10), r
1302  r = vec_convert(v, mold)
1303
1304! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %{{.*}}, align 16
1305! LLVMIR: %[[r:.*]] = bitcast <2 x i64> %[[v]] to <8 x i16>
1306! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16
1307end subroutine vec_convert_test_u8i2_array
1308
1309!---------
1310! vec_cvf
1311!---------
1312! CHECK-LABEL: vec_cvf_test_r4r8
1313subroutine vec_cvf_test_r4r8(arg1)
1314  vector(real(8)), intent(in) :: arg1
1315  vector(real(4)) :: r
1316  r = vec_cvf(arg1)
1317
1318! LLVMIR: %[[arg:.*]] = load <2 x double>, ptr %{{.*}}, align 16
1319! LLVMIR: %[[call:.*]] = call contract <4 x float> @llvm.ppc.vsx.xvcvdpsp(<2 x double> %[[arg]])
1320! LLVMIR-LE: %[[b:.*]] = bitcast <4 x float> %[[call]] to <16 x i8>
1321! LLVMIR-LE: %[[sh:.*]] = shufflevector <16 x i8> %[[b]], <16 x i8> %[[b]], <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11>
1322! LLVMIR-LE: %[[r:.*]] = bitcast <16 x i8> %[[sh]] to <4 x float>
1323! LLVMIR-LE: store <4 x float> %[[r]], ptr %{{.*}}, align 16
1324! LLVMIR-BE: store <4 x float> %[[call]], ptr %{{.*}}, align 16
1325end subroutine vec_cvf_test_r4r8
1326
1327! CHECK-LABEL: vec_cvf_test_r8r4
1328subroutine vec_cvf_test_r8r4(arg1)
1329  vector(real(4)), intent(in) :: arg1
1330  vector(real(8)) :: r
1331  r = vec_cvf(arg1)
1332
1333! LLVMIR: %[[arg:.*]] = load <4 x float>, ptr %{{.*}}, align 16
1334! LLVMIR-LE: %[[bfi:.*]] = bitcast <4 x float> %[[arg]] to <16 x i8>
1335! LLVMIR-LE: %[[sh:.*]] = shufflevector <16 x i8> %[[bfi]], <16 x i8> %[[bfi]], <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11>
1336! LLVMIR-LE: %[[bif:.*]] = bitcast <16 x i8> %[[sh]] to <4 x float>
1337! LLVMIR-LE: %[[r:.*]] = call contract <2 x double> @llvm.ppc.vsx.xvcvspdp(<4 x float> %[[bif]])
1338! LLVMIR-LE: store <2 x double> %[[r]], ptr %{{.*}}, align 16
1339! LLVMIR-BE: %[[r:.*]] = call contract <2 x double> @llvm.ppc.vsx.xvcvspdp(<4 x float> %[[arg]])
1340! LLVMIR-BE: store <2 x double> %[[call]], ptr %{{.*}}, align 16
1341end subroutine vec_cvf_test_r8r4
1342
1343