[ConstraintElim] Add support for decomposing gep nuw (#118639)
[llvm-project.git] / flang / test / Lower / PowerPC / ppc-vec-convert.f90
blob47763c660e8e8186df5ff14071310849c691cab1
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{{.*}}
5 !---------
6 ! vec_ctf
7 !---------
8 ! CHECK-LABEL: vec_ctf_test_i4i1
9 subroutine vec_ctf_test_i4i1(arg1)
10 vector(integer(4)), intent(in) :: arg1
11 vector(real(4)) :: r
12 r = vec_ctf(arg1, 1_1)
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
17 end subroutine vec_ctf_test_i4i1
19 ! CHECK-LABEL: vec_ctf_test_i4i2
20 subroutine vec_ctf_test_i4i2(arg1)
21 vector(integer(4)), intent(in) :: arg1
22 vector(real(4)) :: r
23 r = vec_ctf(arg1, 1_2)
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
28 end subroutine vec_ctf_test_i4i2
30 ! CHECK-LABEL: vec_ctf_test_i4i4
31 subroutine vec_ctf_test_i4i4(arg1)
32 vector(integer(4)), intent(in) :: arg1
33 vector(real(4)) :: r
34 r = vec_ctf(arg1, 1_4)
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
39 end subroutine vec_ctf_test_i4i4
41 ! CHECK-LABEL: vec_ctf_test_i4i8
42 subroutine vec_ctf_test_i4i8(arg1)
43 vector(integer(4)), intent(in) :: arg1
44 vector(real(4)) :: r
45 r = vec_ctf(arg1, 1_8)
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
50 end subroutine vec_ctf_test_i4i8
52 ! CHECK-LABEL: vec_ctf_test_i8i1
53 subroutine vec_ctf_test_i8i1(arg1)
54 vector(integer(8)), intent(in) :: arg1
55 vector(real(8)) :: r
56 r = vec_ctf(arg1, 3_1)
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
62 end subroutine vec_ctf_test_i8i1
64 ! CHECK-LABEL: vec_ctf_test_i8i2
65 subroutine vec_ctf_test_i8i2(arg1)
66 vector(integer(8)), intent(in) :: arg1
67 vector(real(8)) :: r
68 r = vec_ctf(arg1, 3_2)
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
74 end subroutine vec_ctf_test_i8i2
76 ! CHECK-LABEL: vec_ctf_test_i8i4
77 subroutine vec_ctf_test_i8i4(arg1)
78 vector(integer(8)), intent(in) :: arg1
79 vector(real(8)) :: r
80 r = vec_ctf(arg1, 3_4)
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
86 end subroutine vec_ctf_test_i8i4
88 ! CHECK-LABEL: vec_ctf_test_i8i8
89 subroutine vec_ctf_test_i8i8(arg1)
90 vector(integer(8)), intent(in) :: arg1
91 vector(real(8)) :: r
92 r = vec_ctf(arg1, 3_8)
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
98 end subroutine vec_ctf_test_i8i8
100 ! CHECK-LABEL: vec_ctf_test_u4i1
101 subroutine vec_ctf_test_u4i1(arg1)
102 vector(unsigned(4)), intent(in) :: arg1
103 vector(real(4)) :: r
104 r = vec_ctf(arg1, 1_1)
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
109 end subroutine vec_ctf_test_u4i1
111 ! CHECK-LABEL: vec_ctf_test_u4i2
112 subroutine vec_ctf_test_u4i2(arg1)
113 vector(unsigned(4)), intent(in) :: arg1
114 vector(real(4)) :: r
115 r = vec_ctf(arg1, 1_2)
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
120 end subroutine vec_ctf_test_u4i2
122 ! CHECK-LABEL: vec_ctf_test_u4i4
123 subroutine vec_ctf_test_u4i4(arg1)
124 vector(unsigned(4)), intent(in) :: arg1
125 vector(real(4)) :: r
126 r = vec_ctf(arg1, 1_4)
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
131 end subroutine vec_ctf_test_u4i4
133 ! CHECK-LABEL: vec_ctf_test_u4i8
134 subroutine vec_ctf_test_u4i8(arg1)
135 vector(unsigned(4)), intent(in) :: arg1
136 vector(real(4)) :: r
137 r = vec_ctf(arg1, 1_8)
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
142 end subroutine vec_ctf_test_u4i8
144 ! CHECK-LABEL: vec_ctf_test_u8i1
145 subroutine vec_ctf_test_u8i1(arg1)
146 vector(unsigned(8)), intent(in) :: arg1
147 vector(real(8)) :: r
148 r = vec_ctf(arg1, 3_1)
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
154 end subroutine vec_ctf_test_u8i1
156 ! CHECK-LABEL: vec_ctf_test_u8i2
157 subroutine vec_ctf_test_u8i2(arg1)
158 vector(unsigned(8)), intent(in) :: arg1
159 vector(real(8)) :: r
160 r = vec_ctf(arg1, 3_2)
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
166 end subroutine vec_ctf_test_u8i2
168 ! CHECK-LABEL: vec_ctf_test_u8i4
169 subroutine vec_ctf_test_u8i4(arg1)
170 vector(unsigned(8)), intent(in) :: arg1
171 vector(real(8)) :: r
172 r = vec_ctf(arg1, 3_4)
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
178 end subroutine vec_ctf_test_u8i4
180 ! CHECK-LABEL: vec_ctf_test_u8i8
181 subroutine vec_ctf_test_u8i8(arg1)
182 vector(unsigned(8)), intent(in) :: arg1
183 vector(real(8)) :: r
184 r = vec_ctf(arg1, 3_8)
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
190 end subroutine vec_ctf_test_u8i8
192 !-------------
193 ! vec_convert
194 !-------------
195 ! CHECK-LABEL: vec_convert_test_i1i1
196 subroutine vec_convert_test_i1i1(v, mold)
197 vector(integer(1)) :: v
198 vector(integer(1)) :: mold, r
199 r = vec_convert(v, mold)
201 ! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
202 ! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
203 end subroutine vec_convert_test_i1i1
205 ! CHECK-LABEL: vec_convert_test_i1i2
206 subroutine vec_convert_test_i1i2(v, mold)
207 vector(integer(1)) :: v
208 vector(integer(2)) :: mold, r
209 r = vec_convert(v, mold)
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
214 end subroutine vec_convert_test_i1i2
216 ! CHECK-LABEL: vec_convert_test_i1i4
217 subroutine vec_convert_test_i1i4(v, mold)
218 vector(integer(1)) :: v
219 vector(integer(4)) :: mold, r
220 r = vec_convert(v, mold)
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
225 end subroutine vec_convert_test_i1i4
227 ! CHECK-LABEL: vec_convert_test_i1i8
228 subroutine vec_convert_test_i1i8(v, mold)
229 vector(integer(1)) :: v
230 vector(integer(8)) :: mold, r
231 r = vec_convert(v, mold)
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
236 end subroutine vec_convert_test_i1i8
238 ! CHECK-LABEL: vec_convert_test_i1u1
239 subroutine vec_convert_test_i1u1(v, mold)
240 vector(integer(1)) :: v
241 vector(unsigned(1)) :: mold, r
242 r = vec_convert(v, mold)
244 ! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
245 ! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
246 end subroutine vec_convert_test_i1u1
248 ! CHECK-LABEL: vec_convert_test_i1u2
249 subroutine vec_convert_test_i1u2(v, mold)
250 vector(integer(1)) :: v
251 vector(unsigned(2)) :: mold, r
252 r = vec_convert(v, mold)
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
257 end subroutine vec_convert_test_i1u2
259 ! CHECK-LABEL: vec_convert_test_i1u4
260 subroutine vec_convert_test_i1u4(v, mold)
261 vector(integer(1)) :: v
262 vector(unsigned(4)) :: mold, r
263 r = vec_convert(v, mold)
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
268 end subroutine vec_convert_test_i1u4
270 ! CHECK-LABEL: vec_convert_test_i1u8
271 subroutine vec_convert_test_i1u8(v, mold)
272 vector(integer(1)) :: v
273 vector(unsigned(8)) :: mold, r
274 r = vec_convert(v, mold)
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
279 end subroutine vec_convert_test_i1u8
281 ! CHECK-LABEL: vec_convert_test_i1r4
282 subroutine vec_convert_test_i1r4(v, mold)
283 vector(integer(1)) :: v
284 vector(real(4)) :: mold, r
285 r = vec_convert(v, mold)
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
290 end subroutine vec_convert_test_i1r4
292 ! CHECK-LABEL: vec_convert_test_i1r8
293 subroutine vec_convert_test_i1r8(v, mold)
294 vector(integer(1)) :: v
295 vector(real(8)) :: mold, r
296 r = vec_convert(v, mold)
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
301 end subroutine vec_convert_test_i1r8
303 ! CHECK-LABEL: vec_convert_test_i2i1
304 subroutine vec_convert_test_i2i1(v, mold)
305 vector(integer(2)) :: v
306 vector(integer(1)) :: mold, r
307 r = vec_convert(v, mold)
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
312 end subroutine vec_convert_test_i2i1
314 ! CHECK-LABEL: vec_convert_test_i2i2
315 subroutine vec_convert_test_i2i2(v, mold)
316 vector(integer(2)) :: v
317 vector(integer(2)) :: mold, r
318 r = vec_convert(v, mold)
320 ! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
321 ! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
322 end subroutine vec_convert_test_i2i2
324 ! CHECK-LABEL: vec_convert_test_i2i4
325 subroutine vec_convert_test_i2i4(v, mold)
326 vector(integer(2)) :: v
327 vector(integer(4)) :: mold, r
328 r = vec_convert(v, mold)
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
333 end subroutine vec_convert_test_i2i4
335 ! CHECK-LABEL: vec_convert_test_i2i8
336 subroutine vec_convert_test_i2i8(v, mold)
337 vector(integer(2)) :: v
338 vector(integer(8)) :: mold, r
339 r = vec_convert(v, mold)
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
344 end subroutine vec_convert_test_i2i8
346 ! CHECK-LABEL: vec_convert_test_i2u1
347 subroutine vec_convert_test_i2u1(v, mold)
348 vector(integer(2)) :: v
349 vector(unsigned(1)) :: mold, r
350 r = vec_convert(v, mold)
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
355 end subroutine vec_convert_test_i2u1
357 ! CHECK-LABEL: vec_convert_test_i2u2
358 subroutine vec_convert_test_i2u2(v, mold)
359 vector(integer(2)) :: v
360 vector(unsigned(2)) :: mold, r
361 r = vec_convert(v, mold)
363 ! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
364 ! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
365 end subroutine vec_convert_test_i2u2
367 ! CHECK-LABEL: vec_convert_test_i2u4
368 subroutine vec_convert_test_i2u4(v, mold)
369 vector(integer(2)) :: v
370 vector(unsigned(4)) :: mold, r
371 r = vec_convert(v, mold)
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
376 end subroutine vec_convert_test_i2u4
378 ! CHECK-LABEL: vec_convert_test_i2u8
379 subroutine vec_convert_test_i2u8(v, mold)
380 vector(integer(2)) :: v
381 vector(unsigned(8)) :: mold, r
382 r = vec_convert(v, mold)
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
387 end subroutine vec_convert_test_i2u8
389 ! CHECK-LABEL: vec_convert_test_i2r4
390 subroutine vec_convert_test_i2r4(v, mold)
391 vector(integer(2)) :: v
392 vector(real(4)) :: mold, r
393 r = vec_convert(v, mold)
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
398 end subroutine vec_convert_test_i2r4
400 ! CHECK-LABEL: vec_convert_test_i2r8
401 subroutine vec_convert_test_i2r8(v, mold)
402 vector(integer(2)) :: v
403 vector(real(8)) :: mold, r
404 r = vec_convert(v, mold)
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
409 end subroutine vec_convert_test_i2r8
411 ! CHECK-LABEL: vec_convert_test_i4i1
412 subroutine vec_convert_test_i4i1(v, mold)
413 vector(integer(4)) :: v
414 vector(integer(1)) :: mold, r
415 r = vec_convert(v, mold)
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
420 end subroutine vec_convert_test_i4i1
422 ! CHECK-LABEL: vec_convert_test_i4i2
423 subroutine vec_convert_test_i4i2(v, mold)
424 vector(integer(4)) :: v
425 vector(integer(2)) :: mold, r
426 r = vec_convert(v, mold)
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
431 end subroutine vec_convert_test_i4i2
433 ! CHECK-LABEL: vec_convert_test_i4i4
434 subroutine vec_convert_test_i4i4(v, mold)
435 vector(integer(4)) :: v
436 vector(integer(4)) :: mold, r
437 r = vec_convert(v, mold)
439 ! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
440 ! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
441 end subroutine vec_convert_test_i4i4
443 ! CHECK-LABEL: vec_convert_test_i4i8
444 subroutine vec_convert_test_i4i8(v, mold)
445 vector(integer(4)) :: v
446 vector(integer(8)) :: mold, r
447 r = vec_convert(v, mold)
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
452 end subroutine vec_convert_test_i4i8
454 ! CHECK-LABEL: vec_convert_test_i4u1
455 subroutine vec_convert_test_i4u1(v, mold)
456 vector(integer(4)) :: v
457 vector(unsigned(1)) :: mold, r
458 r = vec_convert(v, mold)
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
463 end subroutine vec_convert_test_i4u1
465 ! CHECK-LABEL: vec_convert_test_i4u2
466 subroutine vec_convert_test_i4u2(v, mold)
467 vector(integer(4)) :: v
468 vector(unsigned(2)) :: mold, r
469 r = vec_convert(v, mold)
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
474 end subroutine vec_convert_test_i4u2
476 ! CHECK-LABEL: vec_convert_test_i4u4
477 subroutine vec_convert_test_i4u4(v, mold)
478 vector(integer(4)) :: v
479 vector(unsigned(4)) :: mold, r
480 r = vec_convert(v, mold)
482 ! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
483 ! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
484 end subroutine vec_convert_test_i4u4
486 ! CHECK-LABEL: vec_convert_test_i4u8
487 subroutine vec_convert_test_i4u8(v, mold)
488 vector(integer(4)) :: v
489 vector(unsigned(8)) :: mold, r
490 r = vec_convert(v, mold)
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
495 end subroutine vec_convert_test_i4u8
497 ! CHECK-LABEL: vec_convert_test_i4r4
498 subroutine vec_convert_test_i4r4(v, mold)
499 vector(integer(4)) :: v
500 vector(real(4)) :: mold, r
501 r = vec_convert(v, mold)
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
506 end subroutine vec_convert_test_i4r4
508 ! CHECK-LABEL: vec_convert_test_i4r8
509 subroutine vec_convert_test_i4r8(v, mold)
510 vector(integer(4)) :: v
511 vector(real(8)) :: mold, r
512 r = vec_convert(v, mold)
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
517 end subroutine vec_convert_test_i4r8
519 ! CHECK-LABEL: vec_convert_test_i8i1
520 subroutine vec_convert_test_i8i1(v, mold)
521 vector(integer(8)) :: v
522 vector(integer(1)) :: mold, r
523 r = vec_convert(v, mold)
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
528 end subroutine vec_convert_test_i8i1
530 ! CHECK-LABEL: vec_convert_test_i8i2
531 subroutine vec_convert_test_i8i2(v, mold)
532 vector(integer(8)) :: v
533 vector(integer(2)) :: mold, r
534 r = vec_convert(v, mold)
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
539 end subroutine vec_convert_test_i8i2
541 ! CHECK-LABEL: vec_convert_test_i8i4
542 subroutine vec_convert_test_i8i4(v, mold)
543 vector(integer(8)) :: v
544 vector(integer(4)) :: mold, r
545 r = vec_convert(v, mold)
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
550 end subroutine vec_convert_test_i8i4
552 ! CHECK-LABEL: vec_convert_test_i8i8
553 subroutine vec_convert_test_i8i8(v, mold)
554 vector(integer(8)) :: v
555 vector(integer(8)) :: mold, r
556 r = vec_convert(v, mold)
558 ! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
559 ! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
560 end subroutine vec_convert_test_i8i8
562 ! CHECK-LABEL: vec_convert_test_i8u1
563 subroutine vec_convert_test_i8u1(v, mold)
564 vector(integer(8)) :: v
565 vector(unsigned(1)) :: mold, r
566 r = vec_convert(v, mold)
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
571 end subroutine vec_convert_test_i8u1
573 ! CHECK-LABEL: vec_convert_test_i8u2
574 subroutine vec_convert_test_i8u2(v, mold)
575 vector(integer(8)) :: v
576 vector(unsigned(2)) :: mold, r
577 r = vec_convert(v, mold)
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
582 end subroutine vec_convert_test_i8u2
584 ! CHECK-LABEL: vec_convert_test_i8u4
585 subroutine vec_convert_test_i8u4(v, mold)
586 vector(integer(8)) :: v
587 vector(unsigned(4)) :: mold, r
588 r = vec_convert(v, mold)
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
593 end subroutine vec_convert_test_i8u4
595 ! CHECK-LABEL: vec_convert_test_i8u8
596 subroutine vec_convert_test_i8u8(v, mold)
597 vector(integer(8)) :: v
598 vector(unsigned(8)) :: mold, r
599 r = vec_convert(v, mold)
601 ! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
602 ! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
603 end subroutine vec_convert_test_i8u8
605 ! CHECK-LABEL: vec_convert_test_i8r4
606 subroutine vec_convert_test_i8r4(v, mold)
607 vector(integer(8)) :: v
608 vector(real(4)) :: mold, r
609 r = vec_convert(v, mold)
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
614 end subroutine vec_convert_test_i8r4
616 ! CHECK-LABEL: vec_convert_test_i8r8
617 subroutine vec_convert_test_i8r8(v, mold)
618 vector(integer(8)) :: v
619 vector(real(8)) :: mold, r
620 r = vec_convert(v, mold)
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
625 end subroutine vec_convert_test_i8r8
627 ! CHECK-LABEL: vec_convert_test_u1i1
628 subroutine vec_convert_test_u1i1(v, mold)
629 vector(unsigned(1)) :: v
630 vector(integer(1)) :: mold, r
631 r = vec_convert(v, mold)
633 ! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
634 ! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
635 end subroutine vec_convert_test_u1i1
637 ! CHECK-LABEL: vec_convert_test_u1i2
638 subroutine vec_convert_test_u1i2(v, mold)
639 vector(unsigned(1)) :: v
640 vector(integer(2)) :: mold, r
641 r = vec_convert(v, mold)
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
646 end subroutine vec_convert_test_u1i2
648 ! CHECK-LABEL: vec_convert_test_u1i4
649 subroutine vec_convert_test_u1i4(v, mold)
650 vector(unsigned(1)) :: v
651 vector(integer(4)) :: mold, r
652 r = vec_convert(v, mold)
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
657 end subroutine vec_convert_test_u1i4
659 ! CHECK-LABEL: vec_convert_test_u1i8
660 subroutine vec_convert_test_u1i8(v, mold)
661 vector(unsigned(1)) :: v
662 vector(integer(8)) :: mold, r
663 r = vec_convert(v, mold)
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
668 end subroutine vec_convert_test_u1i8
670 ! CHECK-LABEL: vec_convert_test_u1u1
671 subroutine vec_convert_test_u1u1(v, mold)
672 vector(unsigned(1)) :: v
673 vector(unsigned(1)) :: mold, r
674 r = vec_convert(v, mold)
676 ! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %0, align 16
677 ! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
678 end subroutine vec_convert_test_u1u1
680 ! CHECK-LABEL: vec_convert_test_u1u2
681 subroutine vec_convert_test_u1u2(v, mold)
682 vector(unsigned(1)) :: v
683 vector(unsigned(2)) :: mold, r
684 r = vec_convert(v, mold)
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
689 end subroutine vec_convert_test_u1u2
691 ! CHECK-LABEL: vec_convert_test_u1u4
692 subroutine vec_convert_test_u1u4(v, mold)
693 vector(unsigned(1)) :: v
694 vector(unsigned(4)) :: mold, r
695 r = vec_convert(v, mold)
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
700 end subroutine vec_convert_test_u1u4
702 ! CHECK-LABEL: vec_convert_test_u1u8
703 subroutine vec_convert_test_u1u8(v, mold)
704 vector(unsigned(1)) :: v
705 vector(unsigned(8)) :: mold, r
706 r = vec_convert(v, mold)
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
711 end subroutine vec_convert_test_u1u8
713 ! CHECK-LABEL: vec_convert_test_u1r4
714 subroutine vec_convert_test_u1r4(v, mold)
715 vector(unsigned(1)) :: v
716 vector(real(4)) :: mold, r
717 r = vec_convert(v, mold)
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
722 end subroutine vec_convert_test_u1r4
724 ! CHECK-LABEL: vec_convert_test_u1r8
725 subroutine vec_convert_test_u1r8(v, mold)
726 vector(unsigned(1)) :: v
727 vector(real(8)) :: mold, r
728 r = vec_convert(v, mold)
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
733 end subroutine vec_convert_test_u1r8
735 ! CHECK-LABEL: vec_convert_test_u2i1
736 subroutine vec_convert_test_u2i1(v, mold)
737 vector(unsigned(2)) :: v
738 vector(integer(1)) :: mold, r
739 r = vec_convert(v, mold)
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
744 end subroutine vec_convert_test_u2i1
746 ! CHECK-LABEL: vec_convert_test_u2i2
747 subroutine vec_convert_test_u2i2(v, mold)
748 vector(unsigned(2)) :: v
749 vector(integer(2)) :: mold, r
750 r = vec_convert(v, mold)
752 ! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
753 ! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
754 end subroutine vec_convert_test_u2i2
756 ! CHECK-LABEL: vec_convert_test_u2i4
757 subroutine vec_convert_test_u2i4(v, mold)
758 vector(unsigned(2)) :: v
759 vector(integer(4)) :: mold, r
760 r = vec_convert(v, mold)
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
765 end subroutine vec_convert_test_u2i4
767 ! CHECK-LABEL: vec_convert_test_u2i8
768 subroutine vec_convert_test_u2i8(v, mold)
769 vector(unsigned(2)) :: v
770 vector(integer(8)) :: mold, r
771 r = vec_convert(v, mold)
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
776 end subroutine vec_convert_test_u2i8
778 ! CHECK-LABEL: vec_convert_test_u2u1
779 subroutine vec_convert_test_u2u1(v, mold)
780 vector(unsigned(2)) :: v
781 vector(unsigned(1)) :: mold, r
782 r = vec_convert(v, mold)
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
787 end subroutine vec_convert_test_u2u1
789 ! CHECK-LABEL: vec_convert_test_u2u2
790 subroutine vec_convert_test_u2u2(v, mold)
791 vector(unsigned(2)) :: v
792 vector(unsigned(2)) :: mold, r
793 r = vec_convert(v, mold)
795 ! LLVMIR: %[[v:.*]] = load <8 x i16>, ptr %0, align 16
796 ! LLVMIR: store <8 x i16> %[[v]], ptr %{{.*}}, align 16
797 end subroutine vec_convert_test_u2u2
799 ! CHECK-LABEL: vec_convert_test_u2u4
800 subroutine vec_convert_test_u2u4(v, mold)
801 vector(unsigned(2)) :: v
802 vector(unsigned(4)) :: mold, r
803 r = vec_convert(v, mold)
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
808 end subroutine vec_convert_test_u2u4
810 ! CHECK-LABEL: vec_convert_test_u2u8
811 subroutine vec_convert_test_u2u8(v, mold)
812 vector(unsigned(2)) :: v
813 vector(unsigned(8)) :: mold, r
814 r = vec_convert(v, mold)
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
819 end subroutine vec_convert_test_u2u8
821 ! CHECK-LABEL: vec_convert_test_u2r4
822 subroutine vec_convert_test_u2r4(v, mold)
823 vector(unsigned(2)) :: v
824 vector(real(4)) :: mold, r
825 r = vec_convert(v, mold)
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
830 end subroutine vec_convert_test_u2r4
832 ! CHECK-LABEL: vec_convert_test_u2r8
833 subroutine vec_convert_test_u2r8(v, mold)
834 vector(unsigned(2)) :: v
835 vector(real(8)) :: mold, r
836 r = vec_convert(v, mold)
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
841 end subroutine vec_convert_test_u2r8
843 ! CHECK-LABEL: vec_convert_test_u4i1
844 subroutine vec_convert_test_u4i1(v, mold)
845 vector(unsigned(4)) :: v
846 vector(integer(1)) :: mold, r
847 r = vec_convert(v, mold)
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
852 end subroutine vec_convert_test_u4i1
854 ! CHECK-LABEL: vec_convert_test_u4i2
855 subroutine vec_convert_test_u4i2(v, mold)
856 vector(unsigned(4)) :: v
857 vector(integer(2)) :: mold, r
858 r = vec_convert(v, mold)
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
863 end subroutine vec_convert_test_u4i2
865 ! CHECK-LABEL: vec_convert_test_u4i4
866 subroutine vec_convert_test_u4i4(v, mold)
867 vector(unsigned(4)) :: v
868 vector(integer(4)) :: mold, r
869 r = vec_convert(v, mold)
871 ! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
872 ! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
873 end subroutine vec_convert_test_u4i4
875 ! CHECK-LABEL: vec_convert_test_u4i8
876 subroutine vec_convert_test_u4i8(v, mold)
877 vector(unsigned(4)) :: v
878 vector(integer(8)) :: mold, r
879 r = vec_convert(v, mold)
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
884 end subroutine vec_convert_test_u4i8
886 ! CHECK-LABEL: vec_convert_test_u4u1
887 subroutine vec_convert_test_u4u1(v, mold)
888 vector(unsigned(4)) :: v
889 vector(unsigned(1)) :: mold, r
890 r = vec_convert(v, mold)
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
895 end subroutine vec_convert_test_u4u1
897 ! CHECK-LABEL: vec_convert_test_u4u2
898 subroutine vec_convert_test_u4u2(v, mold)
899 vector(unsigned(4)) :: v
900 vector(unsigned(2)) :: mold, r
901 r = vec_convert(v, mold)
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
906 end subroutine vec_convert_test_u4u2
908 ! CHECK-LABEL: vec_convert_test_u4u4
909 subroutine vec_convert_test_u4u4(v, mold)
910 vector(unsigned(4)) :: v
911 vector(unsigned(4)) :: mold, r
912 r = vec_convert(v, mold)
914 ! LLVMIR: %[[v:.*]] = load <4 x i32>, ptr %0, align 16
915 ! LLVMIR: store <4 x i32> %[[v]], ptr %{{.*}}, align 16
916 end subroutine vec_convert_test_u4u4
918 ! CHECK-LABEL: vec_convert_test_u4u8
919 subroutine vec_convert_test_u4u8(v, mold)
920 vector(unsigned(4)) :: v
921 vector(unsigned(8)) :: mold, r
922 r = vec_convert(v, mold)
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
927 end subroutine vec_convert_test_u4u8
929 ! CHECK-LABEL: vec_convert_test_u4r4
930 subroutine vec_convert_test_u4r4(v, mold)
931 vector(unsigned(4)) :: v
932 vector(real(4)) :: mold, r
933 r = vec_convert(v, mold)
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
938 end subroutine vec_convert_test_u4r4
940 ! CHECK-LABEL: vec_convert_test_u4r8
941 subroutine vec_convert_test_u4r8(v, mold)
942 vector(unsigned(4)) :: v
943 vector(real(8)) :: mold, r
944 r = vec_convert(v, mold)
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
949 end subroutine vec_convert_test_u4r8
951 ! CHECK-LABEL: vec_convert_test_u8i1
952 subroutine vec_convert_test_u8i1(v, mold)
953 vector(unsigned(8)) :: v
954 vector(integer(1)) :: mold, r
955 r = vec_convert(v, mold)
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
960 end subroutine vec_convert_test_u8i1
962 ! CHECK-LABEL: vec_convert_test_u8i2
963 subroutine vec_convert_test_u8i2(v, mold)
964 vector(unsigned(8)) :: v
965 vector(integer(2)) :: mold, r
966 r = vec_convert(v, mold)
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
971 end subroutine vec_convert_test_u8i2
973 ! CHECK-LABEL: vec_convert_test_u8i4
974 subroutine vec_convert_test_u8i4(v, mold)
975 vector(unsigned(8)) :: v
976 vector(integer(4)) :: mold, r
977 r = vec_convert(v, mold)
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
982 end subroutine vec_convert_test_u8i4
984 ! CHECK-LABEL: vec_convert_test_u8i8
985 subroutine vec_convert_test_u8i8(v, mold)
986 vector(unsigned(8)) :: v
987 vector(integer(8)) :: mold, r
988 r = vec_convert(v, mold)
990 ! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
991 ! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
992 end subroutine vec_convert_test_u8i8
994 ! CHECK-LABEL: vec_convert_test_u8u1
995 subroutine vec_convert_test_u8u1(v, mold)
996 vector(unsigned(8)) :: v
997 vector(unsigned(1)) :: mold, r
998 r = vec_convert(v, mold)
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
1003 end subroutine vec_convert_test_u8u1
1005 ! CHECK-LABEL: vec_convert_test_u8u2
1006 subroutine vec_convert_test_u8u2(v, mold)
1007 vector(unsigned(8)) :: v
1008 vector(unsigned(2)) :: mold, r
1009 r = vec_convert(v, mold)
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
1014 end subroutine vec_convert_test_u8u2
1016 ! CHECK-LABEL: vec_convert_test_u8u4
1017 subroutine vec_convert_test_u8u4(v, mold)
1018 vector(unsigned(8)) :: v
1019 vector(unsigned(4)) :: mold, r
1020 r = vec_convert(v, mold)
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
1025 end subroutine vec_convert_test_u8u4
1027 ! CHECK-LABEL: vec_convert_test_u8u8
1028 subroutine vec_convert_test_u8u8(v, mold)
1029 vector(unsigned(8)) :: v
1030 vector(unsigned(8)) :: mold, r
1031 r = vec_convert(v, mold)
1033 ! LLVMIR: %[[v:.*]] = load <2 x i64>, ptr %0, align 16
1034 ! LLVMIR: store <2 x i64> %[[v]], ptr %{{.*}}, align 16
1035 end subroutine vec_convert_test_u8u8
1037 ! CHECK-LABEL: vec_convert_test_u8r4
1038 subroutine vec_convert_test_u8r4(v, mold)
1039 vector(unsigned(8)) :: v
1040 vector(real(4)) :: mold, r
1041 r = vec_convert(v, mold)
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
1046 end subroutine vec_convert_test_u8r4
1048 ! CHECK-LABEL: vec_convert_test_u8r8
1049 subroutine vec_convert_test_u8r8(v, mold)
1050 vector(unsigned(8)) :: v
1051 vector(real(8)) :: mold, r
1052 r = vec_convert(v, mold)
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
1057 end subroutine vec_convert_test_u8r8
1059 ! CHECK-LABEL: vec_convert_test_r4i1
1060 subroutine vec_convert_test_r4i1(v, mold)
1061 vector(real(4)) :: v
1062 vector(integer(1)) :: mold, r
1063 r = vec_convert(v, mold)
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
1068 end subroutine vec_convert_test_r4i1
1070 ! CHECK-LABEL: vec_convert_test_r4i2
1071 subroutine vec_convert_test_r4i2(v, mold)
1072 vector(real(4)) :: v
1073 vector(integer(2)) :: mold, r
1074 r = vec_convert(v, mold)
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
1079 end subroutine vec_convert_test_r4i2
1081 ! CHECK-LABEL: vec_convert_test_r4i4
1082 subroutine vec_convert_test_r4i4(v, mold)
1083 vector(real(4)) :: v
1084 vector(integer(4)) :: mold, r
1085 r = vec_convert(v, mold)
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
1090 end subroutine vec_convert_test_r4i4
1092 ! CHECK-LABEL: vec_convert_test_r4i8
1093 subroutine vec_convert_test_r4i8(v, mold)
1094 vector(real(4)) :: v
1095 vector(integer(8)) :: mold, r
1096 r = vec_convert(v, mold)
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
1101 end subroutine vec_convert_test_r4i8
1103 ! CHECK-LABEL: vec_convert_test_r4u1
1104 subroutine vec_convert_test_r4u1(v, mold)
1105 vector(real(4)) :: v
1106 vector(unsigned(1)) :: mold, r
1107 r = vec_convert(v, mold)
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
1112 end subroutine vec_convert_test_r4u1
1114 ! CHECK-LABEL: vec_convert_test_r4u2
1115 subroutine vec_convert_test_r4u2(v, mold)
1116 vector(real(4)) :: v
1117 vector(unsigned(2)) :: mold, r
1118 r = vec_convert(v, mold)
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
1123 end subroutine vec_convert_test_r4u2
1125 ! CHECK-LABEL: vec_convert_test_r4u4
1126 subroutine vec_convert_test_r4u4(v, mold)
1127 vector(real(4)) :: v
1128 vector(unsigned(4)) :: mold, r
1129 r = vec_convert(v, mold)
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
1134 end subroutine vec_convert_test_r4u4
1136 ! CHECK-LABEL: vec_convert_test_r4u8
1137 subroutine vec_convert_test_r4u8(v, mold)
1138 vector(real(4)) :: v
1139 vector(unsigned(8)) :: mold, r
1140 r = vec_convert(v, mold)
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
1145 end subroutine vec_convert_test_r4u8
1147 ! CHECK-LABEL: vec_convert_test_r4r4
1148 subroutine vec_convert_test_r4r4(v, mold)
1149 vector(real(4)) :: v
1150 vector(real(4)) :: mold, r
1151 r = vec_convert(v, mold)
1153 ! LLVMIR: %[[v:.*]] = load <4 x float>, ptr %0, align 16
1154 ! LLVMIR: store <4 x float> %[[v]], ptr %{{.*}}, align 16
1155 end subroutine vec_convert_test_r4r4
1157 ! CHECK-LABEL: vec_convert_test_r4r8
1158 subroutine vec_convert_test_r4r8(v, mold)
1159 vector(real(4)) :: v
1160 vector(real(8)) :: mold, r
1161 r = vec_convert(v, mold)
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
1166 end subroutine vec_convert_test_r4r8
1168 ! CHECK-LABEL: vec_convert_test_r8i1
1169 subroutine vec_convert_test_r8i1(v, mold)
1170 vector(real(8)) :: v
1171 vector(integer(1)) :: mold, r
1172 r = vec_convert(v, mold)
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
1177 end subroutine vec_convert_test_r8i1
1179 ! CHECK-LABEL: vec_convert_test_r8i2
1180 subroutine vec_convert_test_r8i2(v, mold)
1181 vector(real(8)) :: v
1182 vector(integer(2)) :: mold, r
1183 r = vec_convert(v, mold)
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
1188 end subroutine vec_convert_test_r8i2
1190 ! CHECK-LABEL: vec_convert_test_r8i4
1191 subroutine vec_convert_test_r8i4(v, mold)
1192 vector(real(8)) :: v
1193 vector(integer(4)) :: mold, r
1194 r = vec_convert(v, mold)
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
1199 end subroutine vec_convert_test_r8i4
1201 ! CHECK-LABEL: vec_convert_test_r8i8
1202 subroutine vec_convert_test_r8i8(v, mold)
1203 vector(real(8)) :: v
1204 vector(integer(8)) :: mold, r
1205 r = vec_convert(v, mold)
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
1210 end subroutine vec_convert_test_r8i8
1212 ! CHECK-LABEL: vec_convert_test_r8u1
1213 subroutine vec_convert_test_r8u1(v, mold)
1214 vector(real(8)) :: v
1215 vector(unsigned(1)) :: mold, r
1216 r = vec_convert(v, mold)
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
1221 end subroutine vec_convert_test_r8u1
1223 ! CHECK-LABEL: vec_convert_test_r8u2
1224 subroutine vec_convert_test_r8u2(v, mold)
1225 vector(real(8)) :: v
1226 vector(unsigned(2)) :: mold, r
1227 r = vec_convert(v, mold)
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
1232 end subroutine vec_convert_test_r8u2
1234 ! CHECK-LABEL: vec_convert_test_r8u4
1235 subroutine vec_convert_test_r8u4(v, mold)
1236 vector(real(8)) :: v
1237 vector(unsigned(4)) :: mold, r
1238 r = vec_convert(v, mold)
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
1243 end subroutine vec_convert_test_r8u4
1245 ! CHECK-LABEL: vec_convert_test_r8u8
1246 subroutine vec_convert_test_r8u8(v, mold)
1247 vector(real(8)) :: v
1248 vector(unsigned(8)) :: mold, r
1249 r = vec_convert(v, mold)
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
1254 end subroutine vec_convert_test_r8u8
1256 ! CHECK-LABEL: vec_convert_test_r8r4
1257 subroutine vec_convert_test_r8r4(v, mold)
1258 vector(real(8)) :: v
1259 vector(real(4)) :: mold, r
1260 r = vec_convert(v, mold)
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
1265 end subroutine vec_convert_test_r8r4
1267 ! CHECK-LABEL: vec_convert_test_r8r8
1268 subroutine vec_convert_test_r8r8(v, mold)
1269 vector(real(8)) :: v
1270 vector(real(8)) :: mold, r
1271 r = vec_convert(v, mold)
1273 ! LLVMIR: %[[v:.*]] = load <2 x double>, ptr %0, align 16
1274 ! LLVMIR: store <2 x double> %[[v]], ptr %{{.*}}, align 16
1275 end subroutine vec_convert_test_r8r8
1277 ! CHECK-LABEL: vec_convert_test_i1i1_array
1278 subroutine 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)
1283 ! LLVMIR: %[[v:.*]] = load <16 x i8>, ptr %{{.*}}, align 16
1284 ! LLVMIR: store <16 x i8> %[[v]], ptr %{{.*}}, align 16
1285 end subroutine vec_convert_test_i1i1_array
1287 ! CHECK-LABEL: vec_convert_test_i4r8_array
1288 subroutine 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)
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
1296 end subroutine vec_convert_test_i4r8_array
1298 ! CHECK-LABEL: vec_convert_test_u8i2_array
1299 subroutine 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)
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
1307 end subroutine vec_convert_test_u8i2_array
1309 !---------
1310 ! vec_cvf
1311 !---------
1312 ! CHECK-LABEL: vec_cvf_test_r4r8
1313 subroutine vec_cvf_test_r4r8(arg1)
1314 vector(real(8)), intent(in) :: arg1
1315 vector(real(4)) :: r
1316 r = vec_cvf(arg1)
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
1325 end subroutine vec_cvf_test_r4r8
1327 ! CHECK-LABEL: vec_cvf_test_r8r4
1328 subroutine vec_cvf_test_r8r4(arg1)
1329 vector(real(4)), intent(in) :: arg1
1330 vector(real(8)) :: r
1331 r = vec_cvf(arg1)
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
1341 end subroutine vec_cvf_test_r8r4