1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \
3 ; RUN: -relocation-model=pic -ppc-asm-full-reg-names -verify-machineinstrs \
4 ; RUN: -enable-ppc-quad-precision < %s | FileCheck %s
5 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-unknown -ppc-vsr-nums-as-vr \
6 ; RUN: -ppc-asm-full-reg-names -verify-machineinstrs \
7 ; RUN: -enable-ppc-quad-precision < %s | FileCheck %s -check-prefix=CHECK-BE
9 ; Vector extract DWord and convert to quad precision.
11 @sdwVecMem = global <2 x i64> <i64 88, i64 99>, align 16
12 @udwVecMem = global <2 x i64> <i64 88, i64 99>, align 16
14 ; Function Attrs: norecurse nounwind
15 define void @sdwVecConv2qp(fp128* nocapture %a, <2 x i64> %b) {
16 ; CHECK-LABEL: sdwVecConv2qp:
17 ; CHECK: # %bb.0: # %entry
18 ; CHECK-NEXT: xxspltd v2, v2, 1
19 ; CHECK-NEXT: xscvsdqp v2, v2
20 ; CHECK-NEXT: stxv v2, 0(r3)
23 ; CHECK-BE-LABEL: sdwVecConv2qp:
24 ; CHECK-BE: xscvsdqp v2, v2
25 ; CHECK-BE-NEXT: stxv v2, 0(r3)
28 %vecext = extractelement <2 x i64> %b, i32 0
29 %conv = sitofp i64 %vecext to fp128
30 store fp128 %conv, fp128* %a, align 16
34 ; Function Attrs: norecurse nounwind
35 define void @sdwVecConv2qp1(fp128* nocapture %a, <2 x i64> %b) {
36 ; CHECK-LABEL: sdwVecConv2qp1:
37 ; CHECK: # %bb.0: # %entry
38 ; CHECK-NEXT: xscvsdqp v2, v2
39 ; CHECK-NEXT: stxv v2, 0(r3)
42 ; CHECK-BE-LABEL: sdwVecConv2qp1:
43 ; CHECK-BE: # %bb.0: # %entry
44 ; CHECK-BE-NEXT: xxspltd v2, v2, 1
45 ; CHECK-BE-NEXT: xscvsdqp v2, v2
46 ; CHECK-BE-NEXT: stxv v2, 0(r3)
49 %vecext = extractelement <2 x i64> %b, i32 1
50 %conv = sitofp i64 %vecext to fp128
51 store fp128 %conv, fp128* %a, align 16
55 ; Function Attrs: norecurse nounwind
56 define void @sdwVecConv2qp_02(fp128* nocapture %a) {
57 ; CHECK-LABEL: sdwVecConv2qp_02:
58 ; CHECK: # %bb.0: # %entry
59 ; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
60 ; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
61 ; CHECK-NEXT: lxsd v2, 0(r4)
62 ; CHECK-NEXT: xscvsdqp v2, v2
63 ; CHECK-NEXT: stxv v2, 0(r3)
66 %0 = load <2 x i64>, <2 x i64>* @sdwVecMem, align 16
67 %vecext = extractelement <2 x i64> %0, i32 0
68 %conv = sitofp i64 %vecext to fp128
69 store fp128 %conv, fp128* %a, align 16
73 ; Function Attrs: norecurse nounwind
74 define void @sdwVecConv2qp1_03(fp128* nocapture %a, <2 x i64>* nocapture readonly %b) {
75 ; CHECK-LABEL: sdwVecConv2qp1_03:
76 ; CHECK: # %bb.0: # %entry
77 ; CHECK-NEXT: lxsd v2, 8(r4)
78 ; CHECK-NEXT: xscvsdqp v2, v2
79 ; CHECK-NEXT: stxv v2, 0(r3)
82 %0 = load <2 x i64>, <2 x i64>* %b, align 16
83 %vecext = extractelement <2 x i64> %0, i32 1
84 %conv = sitofp i64 %vecext to fp128
85 store fp128 %conv, fp128* %a, align 16
89 ; Function Attrs: norecurse nounwind
90 define void @udwVecConv2qp(fp128* nocapture %a, <2 x i64> %b) {
91 ; CHECK-LABEL: udwVecConv2qp:
92 ; CHECK: # %bb.0: # %entry
93 ; CHECK-NEXT: xxspltd v2, v2, 1
94 ; CHECK-NEXT: xscvudqp v2, v2
95 ; CHECK-NEXT: stxv v2, 0(r3)
98 ; CHECK-BE-LABEL: udwVecConv2qp:
99 ; CHECK-BE: # %bb.0: # %entry
100 ; CHECK-BE-NEXT: xscvudqp v2, v2
101 ; CHECK-BE-NEXT: stxv v2, 0(r3)
104 %vecext = extractelement <2 x i64> %b, i32 0
105 %conv = uitofp i64 %vecext to fp128
106 store fp128 %conv, fp128* %a, align 16
110 ; Function Attrs: norecurse nounwind
111 define void @udwVecConv2qp1(fp128* nocapture %a, <2 x i64> %b) {
112 ; CHECK-LABEL: udwVecConv2qp1:
113 ; CHECK: # %bb.0: # %entry
114 ; CHECK-NEXT: xscvudqp v2, v2
115 ; CHECK-NEXT: stxv v2, 0(r3)
118 ; CHECK-BE-LABEL: udwVecConv2qp1:
119 ; CHECK-BE: # %bb.0: # %entry
120 ; CHECK-BE-NEXT: xxspltd v2, v2, 1
121 ; CHECK-BE-NEXT: xscvudqp v2, v2
122 ; CHECK-BE-NEXT: stxv v2, 0(r3)
125 %vecext = extractelement <2 x i64> %b, i32 1
126 %conv = uitofp i64 %vecext to fp128
127 store fp128 %conv, fp128* %a, align 16
131 ; Function Attrs: norecurse nounwind
132 define void @udwVecConv2qp1_02(fp128* nocapture %a) {
133 ; CHECK-LABEL: udwVecConv2qp1_02:
134 ; CHECK: # %bb.0: # %entry
135 ; CHECK-NEXT: addis r4, r2, .LC1@toc@ha
136 ; CHECK-NEXT: ld r4, .LC1@toc@l(r4)
137 ; CHECK-NEXT: lxsd v2, 8(r4)
138 ; CHECK-NEXT: xscvudqp v2, v2
139 ; CHECK-NEXT: stxv v2, 0(r3)
142 %0 = load <2 x i64>, <2 x i64>* @udwVecMem, align 16
143 %vecext = extractelement <2 x i64> %0, i32 1
144 %conv = uitofp i64 %vecext to fp128
145 store fp128 %conv, fp128* %a, align 16
149 ; Function Attrs: norecurse nounwind
150 define void @udwVecConv2qp_03(fp128* nocapture %a, <2 x i64>* nocapture readonly %b) {
151 ; CHECK-LABEL: udwVecConv2qp_03:
152 ; CHECK: # %bb.0: # %entry
153 ; CHECK-NEXT: lxsd v2, 0(r4)
154 ; CHECK-NEXT: xscvudqp v2, v2
155 ; CHECK-NEXT: stxv v2, 0(r3)
158 %0 = load <2 x i64>, <2 x i64>* %b, align 16
159 %vecext = extractelement <2 x i64> %0, i32 0
160 %conv = uitofp i64 %vecext to fp128
161 store fp128 %conv, fp128* %a, align 16
165 ; Vector extract Word and convert to quad precision.
167 ; Function Attrs: norecurse nounwind
168 define void @swVecConv2qp(fp128* nocapture %a, <4 x i32> %b) {
169 ; CHECK-LABEL: swVecConv2qp:
170 ; CHECK: # %bb.0: # %entry
171 ; CHECK-NEXT: vspltw v2, v2, 3
172 ; CHECK-NEXT: vextsw2d v2, v2
173 ; CHECK-NEXT: xscvsdqp v2, v2
174 ; CHECK-NEXT: stxv v2, 0(r3)
177 ; CHECK-BE-LABEL: swVecConv2qp:
178 ; CHECK-BE: vspltw v2, v2, 0
179 ; CHECK-BE-NEXT: vextsw2d v2, v2
180 ; CHECK-BE-NEXT: xscvsdqp v2, v2
181 ; CHECK-BE-NEXT: stxv v2, 0(r3)
184 %vecext = extractelement <4 x i32> %b, i32 0
185 %conv = sitofp i32 %vecext to fp128
186 store fp128 %conv, fp128* %a, align 16
190 ; Function Attrs: norecurse nounwind
191 define void @swVecConv2qp1(fp128* nocapture %a, <4 x i32> %b) {
192 ; CHECK-LABEL: swVecConv2qp1:
193 ; CHECK: # %bb.0: # %entry
194 ; CHECK-NEXT: vspltw v2, v2, 2
195 ; CHECK-NEXT: vextsw2d v2, v2
196 ; CHECK-NEXT: xscvsdqp v2, v2
197 ; CHECK-NEXT: stxv v2, 0(r3)
200 ; CHECK-BE-LABEL: swVecConv2qp1:
201 ; CHECK-BE: vextsw2d v2, v2
202 ; CHECK-BE-NEXT: xscvsdqp v2, v2
203 ; CHECK-BE-NEXT: stxv v2, 0(r3)
206 %vecext = extractelement <4 x i32> %b, i32 1
207 %conv = sitofp i32 %vecext to fp128
208 store fp128 %conv, fp128* %a, align 16
212 ; Function Attrs: norecurse nounwind
213 define void @swVecConv2qp2(fp128* nocapture %a, <4 x i32> %b) {
214 ; CHECK-LABEL: swVecConv2qp2:
215 ; CHECK: # %bb.0: # %entry
216 ; CHECK-NEXT: vextsw2d v2, v2
217 ; CHECK-NEXT: xscvsdqp v2, v2
218 ; CHECK-NEXT: stxv v2, 0(r3)
221 ; CHECK-BE-LABEL: swVecConv2qp2:
222 ; CHECK-BE: vspltw v2, v2, 2
223 ; CHECK-BE-NEXT: vextsw2d v2, v2
224 ; CHECK-BE-NEXT: xscvsdqp v2, v2
225 ; CHECK-BE-NEXT: stxv v2, 0(r3)
228 %vecext = extractelement <4 x i32> %b, i32 2
229 %conv = sitofp i32 %vecext to fp128
230 store fp128 %conv, fp128* %a, align 16
234 ; Function Attrs: norecurse nounwind
235 define void @swVecConv2qp3(fp128* nocapture %a, <4 x i32> %b) {
236 ; CHECK-LABEL: swVecConv2qp3:
237 ; CHECK: # %bb.0: # %entry
238 ; CHECK-NEXT: vspltw v2, v2, 0
239 ; CHECK-NEXT: vextsw2d v2, v2
240 ; CHECK-NEXT: xscvsdqp v2, v2
241 ; CHECK-NEXT: stxv v2, 0(r3)
244 ; CHECK-BE-LABEL: swVecConv2qp3:
245 ; CHECK-BE: vspltw v2, v2, 3
246 ; CHECK-BE-NEXT: vextsw2d v2, v2
247 ; CHECK-BE-NEXT: xscvsdqp v2, v2
248 ; CHECK-BE-NEXT: stxv v2, 0(r3)
251 %vecext = extractelement <4 x i32> %b, i32 3
252 %conv = sitofp i32 %vecext to fp128
253 store fp128 %conv, fp128* %a, align 16
257 ; Function Attrs: norecurse nounwind
258 define void @uwVecConv2qp(fp128* nocapture %a, <4 x i32> %b) {
259 ; CHECK-LABEL: uwVecConv2qp:
260 ; CHECK: # %bb.0: # %entry
261 ; CHECK-NEXT: xxextractuw v2, v2, 12
262 ; CHECK-NEXT: xscvudqp v2, v2
263 ; CHECK-NEXT: stxv v2, 0(r3)
266 ; CHECK-BE-LABEL: uwVecConv2qp:
267 ; CHECK-BE: xxextractuw v2, v2, 0
268 ; CHECK-BE-NEXT: xscvudqp v2, v2
269 ; CHECK-BE-NEXT: stxv v2, 0(r3)
272 %vecext = extractelement <4 x i32> %b, i32 0
273 %conv = uitofp i32 %vecext to fp128
274 store fp128 %conv, fp128* %a, align 16
278 ; Function Attrs: norecurse nounwind
279 define void @uwVecConv2qp1(fp128* nocapture %a, <4 x i32> %b) {
280 ; CHECK-LABEL: uwVecConv2qp1:
281 ; CHECK: # %bb.0: # %entry
282 ; CHECK-NEXT: xxextractuw v2, v2, 8
283 ; CHECK-NEXT: xscvudqp v2, v2
284 ; CHECK-NEXT: stxv v2, 0(r3)
287 ; CHECK-BE-LABEL: uwVecConv2qp1:
288 ; CHECK-BE: xxextractuw v2, v2, 4
289 ; CHECK-BE-NEXT: xscvudqp v2, v2
290 ; CHECK-BE-NEXT: stxv v2, 0(r3)
293 %vecext = extractelement <4 x i32> %b, i32 1
294 %conv = uitofp i32 %vecext to fp128
295 store fp128 %conv, fp128* %a, align 16
299 ; Function Attrs: norecurse nounwind
300 define void @uwVecConv2qp2(fp128* nocapture %a, <4 x i32> %b) {
301 ; CHECK-LABEL: uwVecConv2qp2:
302 ; CHECK: # %bb.0: # %entry
303 ; CHECK-NEXT: xxextractuw v2, v2, 4
304 ; CHECK-NEXT: xscvudqp v2, v2
305 ; CHECK-NEXT: stxv v2, 0(r3)
308 ; CHECK-BE-LABEL: uwVecConv2qp2:
309 ; CHECK-BE: xxextractuw v2, v2, 8
310 ; CHECK-BE-NEXT: xscvudqp v2, v2
311 ; CHECK-BE-NEXT: stxv v2, 0(r3)
314 %vecext = extractelement <4 x i32> %b, i32 2
315 %conv = uitofp i32 %vecext to fp128
316 store fp128 %conv, fp128* %a, align 16
320 ; Function Attrs: norecurse nounwind
321 define void @uwVecConv2qp3(fp128* nocapture %a, <4 x i32> %b) {
322 ; CHECK-LABEL: uwVecConv2qp3:
323 ; CHECK: # %bb.0: # %entry
324 ; CHECK-NEXT: xxextractuw v2, v2, 0
325 ; CHECK-NEXT: xscvudqp v2, v2
326 ; CHECK-NEXT: stxv v2, 0(r3)
329 ; CHECK-BE-LABEL: uwVecConv2qp3:
330 ; CHECK-BE: xxextractuw v2, v2, 12
331 ; CHECK-BE-NEXT: xscvudqp v2, v2
332 ; CHECK-BE-NEXT: stxv v2, 0(r3)
335 %vecext = extractelement <4 x i32> %b, i32 3
336 %conv = uitofp i32 %vecext to fp128
337 store fp128 %conv, fp128* %a, align 16
341 ; Vector extract HWord and convert to quad precision.
343 ; Function Attrs: norecurse nounwind
344 define void @shwVecConv2qp(fp128* nocapture %a, <8 x i16> %b) {
345 ; CHECK-LABEL: shwVecConv2qp:
346 ; CHECK: # %bb.0: # %entry
347 ; CHECK-NEXT: vextractuh v2, v2, 14
348 ; CHECK-NEXT: vextsh2d v2, v2
349 ; CHECK-NEXT: xscvsdqp v2, v2
350 ; CHECK-NEXT: stxv v2, 0(r3)
353 ; CHECK-BE-LABEL: shwVecConv2qp:
354 ; CHECK-BE: # %bb.0: # %entry
355 ; CHECK-BE-NEXT: vextractuh v2, v2, 0
356 ; CHECK-BE-NEXT: vextsh2d v2, v2
357 ; CHECK-BE-NEXT: xscvsdqp v2, v2
358 ; CHECK-BE-NEXT: stxv v2, 0(r3)
361 %vecext = extractelement <8 x i16> %b, i32 0
362 %conv = sitofp i16 %vecext to fp128
363 store fp128 %conv, fp128* %a, align 16
367 ; Function Attrs: norecurse nounwind
368 define void @shwVecConv2qp1(fp128* nocapture %a, <8 x i16> %b) {
369 ; CHECK-LABEL: shwVecConv2qp1:
370 ; CHECK: # %bb.0: # %entry
371 ; CHECK-NEXT: vextractuh v2, v2, 12
372 ; CHECK-NEXT: vextsh2d v2, v2
373 ; CHECK-NEXT: xscvsdqp v2, v2
374 ; CHECK-NEXT: stxv v2, 0(r3)
377 ; CHECK-BE-LABEL: shwVecConv2qp1:
378 ; CHECK-BE: # %bb.0: # %entry
379 ; CHECK-BE-NEXT: vextractuh v2, v2, 2
380 ; CHECK-BE-NEXT: vextsh2d v2, v2
381 ; CHECK-BE-NEXT: xscvsdqp v2, v2
382 ; CHECK-BE-NEXT: stxv v2, 0(r3)
385 %vecext = extractelement <8 x i16> %b, i32 1
386 %conv = sitofp i16 %vecext to fp128
387 store fp128 %conv, fp128* %a, align 16
391 ; Function Attrs: norecurse nounwind
392 define void @shwVecConv2qp2(fp128* nocapture %a, <8 x i16> %b) {
393 ; CHECK-LABEL: shwVecConv2qp2:
394 ; CHECK: # %bb.0: # %entry
395 ; CHECK-NEXT: vextractuh v2, v2, 10
396 ; CHECK-NEXT: vextsh2d v2, v2
397 ; CHECK-NEXT: xscvsdqp v2, v2
398 ; CHECK-NEXT: stxv v2, 0(r3)
401 ; CHECK-BE-LABEL: shwVecConv2qp2:
402 ; CHECK-BE: # %bb.0: # %entry
403 ; CHECK-BE-NEXT: vextractuh v2, v2, 4
404 ; CHECK-BE-NEXT: vextsh2d v2, v2
405 ; CHECK-BE-NEXT: xscvsdqp v2, v2
406 ; CHECK-BE-NEXT: stxv v2, 0(r3)
409 %vecext = extractelement <8 x i16> %b, i32 2
410 %conv = sitofp i16 %vecext to fp128
411 store fp128 %conv, fp128* %a, align 16
415 ; Function Attrs: norecurse nounwind
416 define void @shwVecConv2qp3(fp128* nocapture %a, <8 x i16> %b) {
417 ; CHECK-LABEL: shwVecConv2qp3:
418 ; CHECK: # %bb.0: # %entry
419 ; CHECK-NEXT: vextractuh v2, v2, 8
420 ; CHECK-NEXT: vextsh2d v2, v2
421 ; CHECK-NEXT: xscvsdqp v2, v2
422 ; CHECK-NEXT: stxv v2, 0(r3)
425 ; CHECK-BE-LABEL: shwVecConv2qp3:
426 ; CHECK-BE: # %bb.0: # %entry
427 ; CHECK-BE-NEXT: vextractuh v2, v2, 6
428 ; CHECK-BE-NEXT: vextsh2d v2, v2
429 ; CHECK-BE-NEXT: xscvsdqp v2, v2
430 ; CHECK-BE-NEXT: stxv v2, 0(r3)
433 %vecext = extractelement <8 x i16> %b, i32 3
434 %conv = sitofp i16 %vecext to fp128
435 store fp128 %conv, fp128* %a, align 16
439 ; Function Attrs: norecurse nounwind
440 define void @shwVecConv2qp4(fp128* nocapture %a, <8 x i16> %b) {
441 ; CHECK-LABEL: shwVecConv2qp4:
442 ; CHECK: # %bb.0: # %entry
443 ; CHECK-NEXT: vextractuh v2, v2, 6
444 ; CHECK-NEXT: vextsh2d v2, v2
445 ; CHECK-NEXT: xscvsdqp v2, v2
446 ; CHECK-NEXT: stxv v2, 0(r3)
449 ; CHECK-BE-LABEL: shwVecConv2qp4:
450 ; CHECK-BE: # %bb.0: # %entry
451 ; CHECK-BE-NEXT: vextractuh v2, v2, 8
452 ; CHECK-BE-NEXT: vextsh2d v2, v2
453 ; CHECK-BE-NEXT: xscvsdqp v2, v2
454 ; CHECK-BE-NEXT: stxv v2, 0(r3)
457 %vecext = extractelement <8 x i16> %b, i32 4
458 %conv = sitofp i16 %vecext to fp128
459 store fp128 %conv, fp128* %a, align 16
463 ; Function Attrs: norecurse nounwind
464 define void @shwVecConv2qp5(fp128* nocapture %a, <8 x i16> %b) {
465 ; CHECK-LABEL: shwVecConv2qp5:
466 ; CHECK: # %bb.0: # %entry
467 ; CHECK-NEXT: vextractuh v2, v2, 4
468 ; CHECK-NEXT: vextsh2d v2, v2
469 ; CHECK-NEXT: xscvsdqp v2, v2
470 ; CHECK-NEXT: stxv v2, 0(r3)
473 ; CHECK-BE-LABEL: shwVecConv2qp5:
474 ; CHECK-BE: # %bb.0: # %entry
475 ; CHECK-BE-NEXT: vextractuh v2, v2, 10
476 ; CHECK-BE-NEXT: vextsh2d v2, v2
477 ; CHECK-BE-NEXT: xscvsdqp v2, v2
478 ; CHECK-BE-NEXT: stxv v2, 0(r3)
481 %vecext = extractelement <8 x i16> %b, i32 5
482 %conv = sitofp i16 %vecext to fp128
483 store fp128 %conv, fp128* %a, align 16
487 ; Function Attrs: norecurse nounwind
488 define void @shwVecConv2qp6(fp128* nocapture %a, <8 x i16> %b) {
489 ; CHECK-LABEL: shwVecConv2qp6:
490 ; CHECK: # %bb.0: # %entry
491 ; CHECK-NEXT: vextractuh v2, v2, 2
492 ; CHECK-NEXT: vextsh2d v2, v2
493 ; CHECK-NEXT: xscvsdqp v2, v2
494 ; CHECK-NEXT: stxv v2, 0(r3)
497 ; CHECK-BE-LABEL: shwVecConv2qp6:
498 ; CHECK-BE: # %bb.0: # %entry
499 ; CHECK-BE-NEXT: vextractuh v2, v2, 12
500 ; CHECK-BE-NEXT: vextsh2d v2, v2
501 ; CHECK-BE-NEXT: xscvsdqp v2, v2
502 ; CHECK-BE-NEXT: stxv v2, 0(r3)
505 %vecext = extractelement <8 x i16> %b, i32 6
506 %conv = sitofp i16 %vecext to fp128
507 store fp128 %conv, fp128* %a, align 16
511 ; Function Attrs: norecurse nounwind
512 define void @shwVecConv2qp7(fp128* nocapture %a, <8 x i16> %b) {
513 ; CHECK-LABEL: shwVecConv2qp7:
514 ; CHECK: # %bb.0: # %entry
515 ; CHECK-NEXT: vextractuh v2, v2, 0
516 ; CHECK-NEXT: vextsh2d v2, v2
517 ; CHECK-NEXT: xscvsdqp v2, v2
518 ; CHECK-NEXT: stxv v2, 0(r3)
521 ; CHECK-BE-LABEL: shwVecConv2qp7:
522 ; CHECK-BE: # %bb.0: # %entry
523 ; CHECK-BE-NEXT: vextractuh v2, v2, 14
524 ; CHECK-BE-NEXT: vextsh2d v2, v2
525 ; CHECK-BE-NEXT: xscvsdqp v2, v2
526 ; CHECK-BE-NEXT: stxv v2, 0(r3)
529 %vecext = extractelement <8 x i16> %b, i32 7
530 %conv = sitofp i16 %vecext to fp128
531 store fp128 %conv, fp128* %a, align 16
535 ; Function Attrs: norecurse nounwind
536 define void @uhwVecConv2qp(fp128* nocapture %a, <8 x i16> %b) {
537 ; CHECK-LABEL: uhwVecConv2qp:
538 ; CHECK: # %bb.0: # %entry
539 ; CHECK-NEXT: vextractuh v2, v2, 14
540 ; CHECK-NEXT: xscvudqp v2, v2
541 ; CHECK-NEXT: stxv v2, 0(r3)
544 ; CHECK-BE-LABEL: uhwVecConv2qp:
545 ; CHECK-BE: # %bb.0: # %entry
546 ; CHECK-BE-NEXT: vextractuh v2, v2, 0
547 ; CHECK-BE-NEXT: xscvudqp v2, v2
548 ; CHECK-BE-NEXT: stxv v2, 0(r3)
551 %vecext = extractelement <8 x i16> %b, i32 0
552 %conv = uitofp i16 %vecext to fp128
553 store fp128 %conv, fp128* %a, align 16
557 ; Function Attrs: norecurse nounwind
558 define void @uhwVecConv2qp1(fp128* nocapture %a, <8 x i16> %b) {
559 ; CHECK-LABEL: uhwVecConv2qp1:
560 ; CHECK: # %bb.0: # %entry
561 ; CHECK-NEXT: vextractuh v2, v2, 12
562 ; CHECK-NEXT: xscvudqp v2, v2
563 ; CHECK-NEXT: stxv v2, 0(r3)
566 ; CHECK-BE-LABEL: uhwVecConv2qp1:
567 ; CHECK-BE: # %bb.0: # %entry
568 ; CHECK-BE-NEXT: vextractuh v2, v2, 2
569 ; CHECK-BE-NEXT: xscvudqp v2, v2
570 ; CHECK-BE-NEXT: stxv v2, 0(r3)
573 %vecext = extractelement <8 x i16> %b, i32 1
574 %conv = uitofp i16 %vecext to fp128
575 store fp128 %conv, fp128* %a, align 16
579 ; Function Attrs: norecurse nounwind
580 define void @uhwVecConv2qp2(fp128* nocapture %a, <8 x i16> %b) {
581 ; CHECK-LABEL: uhwVecConv2qp2:
582 ; CHECK: # %bb.0: # %entry
583 ; CHECK-NEXT: vextractuh v2, v2, 10
584 ; CHECK-NEXT: xscvudqp v2, v2
585 ; CHECK-NEXT: stxv v2, 0(r3)
588 ; CHECK-BE-LABEL: uhwVecConv2qp2:
589 ; CHECK-BE: # %bb.0: # %entry
590 ; CHECK-BE-NEXT: vextractuh v2, v2, 4
591 ; CHECK-BE-NEXT: xscvudqp v2, v2
592 ; CHECK-BE-NEXT: stxv v2, 0(r3)
595 %vecext = extractelement <8 x i16> %b, i32 2
596 %conv = uitofp i16 %vecext to fp128
597 store fp128 %conv, fp128* %a, align 16
601 ; Function Attrs: norecurse nounwind
602 define void @uhwVecConv2qp3(fp128* nocapture %a, <8 x i16> %b) {
603 ; CHECK-LABEL: uhwVecConv2qp3:
604 ; CHECK: # %bb.0: # %entry
605 ; CHECK-NEXT: vextractuh v2, v2, 8
606 ; CHECK-NEXT: xscvudqp v2, v2
607 ; CHECK-NEXT: stxv v2, 0(r3)
610 ; CHECK-BE-LABEL: uhwVecConv2qp3:
611 ; CHECK-BE: # %bb.0: # %entry
612 ; CHECK-BE-NEXT: vextractuh v2, v2, 6
613 ; CHECK-BE-NEXT: xscvudqp v2, v2
614 ; CHECK-BE-NEXT: stxv v2, 0(r3)
617 %vecext = extractelement <8 x i16> %b, i32 3
618 %conv = uitofp i16 %vecext to fp128
619 store fp128 %conv, fp128* %a, align 16
623 ; Function Attrs: norecurse nounwind
624 define void @uhwVecConv2qp4(fp128* nocapture %a, <8 x i16> %b) {
625 ; CHECK-LABEL: uhwVecConv2qp4:
626 ; CHECK: # %bb.0: # %entry
627 ; CHECK-NEXT: vextractuh v2, v2, 6
628 ; CHECK-NEXT: xscvudqp v2, v2
629 ; CHECK-NEXT: stxv v2, 0(r3)
632 ; CHECK-BE-LABEL: uhwVecConv2qp4:
633 ; CHECK-BE: # %bb.0: # %entry
634 ; CHECK-BE-NEXT: vextractuh v2, v2, 8
635 ; CHECK-BE-NEXT: xscvudqp v2, v2
636 ; CHECK-BE-NEXT: stxv v2, 0(r3)
639 %vecext = extractelement <8 x i16> %b, i32 4
640 %conv = uitofp i16 %vecext to fp128
641 store fp128 %conv, fp128* %a, align 16
645 ; Function Attrs: norecurse nounwind
646 define void @uhwVecConv2qp5(fp128* nocapture %a, <8 x i16> %b) {
647 ; CHECK-LABEL: uhwVecConv2qp5:
648 ; CHECK: # %bb.0: # %entry
649 ; CHECK-NEXT: vextractuh v2, v2, 4
650 ; CHECK-NEXT: xscvudqp v2, v2
651 ; CHECK-NEXT: stxv v2, 0(r3)
654 ; CHECK-BE-LABEL: uhwVecConv2qp5:
655 ; CHECK-BE: # %bb.0: # %entry
656 ; CHECK-BE-NEXT: vextractuh v2, v2, 10
657 ; CHECK-BE-NEXT: xscvudqp v2, v2
658 ; CHECK-BE-NEXT: stxv v2, 0(r3)
661 %vecext = extractelement <8 x i16> %b, i32 5
662 %conv = uitofp i16 %vecext to fp128
663 store fp128 %conv, fp128* %a, align 16
667 ; Function Attrs: norecurse nounwind
668 define void @uhwVecConv2qp6(fp128* nocapture %a, <8 x i16> %b) {
669 ; CHECK-LABEL: uhwVecConv2qp6:
670 ; CHECK: # %bb.0: # %entry
671 ; CHECK-NEXT: vextractuh v2, v2, 2
672 ; CHECK-NEXT: xscvudqp v2, v2
673 ; CHECK-NEXT: stxv v2, 0(r3)
676 ; CHECK-BE-LABEL: uhwVecConv2qp6:
677 ; CHECK-BE: # %bb.0: # %entry
678 ; CHECK-BE-NEXT: vextractuh v2, v2, 12
679 ; CHECK-BE-NEXT: xscvudqp v2, v2
680 ; CHECK-BE-NEXT: stxv v2, 0(r3)
683 %vecext = extractelement <8 x i16> %b, i32 6
684 %conv = uitofp i16 %vecext to fp128
685 store fp128 %conv, fp128* %a, align 16
689 ; Function Attrs: norecurse nounwind
690 define void @uhwVecConv2qp7(fp128* nocapture %a, <8 x i16> %b) {
691 ; CHECK-LABEL: uhwVecConv2qp7:
692 ; CHECK: # %bb.0: # %entry
693 ; CHECK-NEXT: vextractuh v2, v2, 0
694 ; CHECK-NEXT: xscvudqp v2, v2
695 ; CHECK-NEXT: stxv v2, 0(r3)
698 ; CHECK-BE-LABEL: uhwVecConv2qp7:
699 ; CHECK-BE: # %bb.0: # %entry
700 ; CHECK-BE-NEXT: vextractuh v2, v2, 14
701 ; CHECK-BE-NEXT: xscvudqp v2, v2
702 ; CHECK-BE-NEXT: stxv v2, 0(r3)
705 %vecext = extractelement <8 x i16> %b, i32 7
706 %conv = uitofp i16 %vecext to fp128
707 store fp128 %conv, fp128* %a, align 16
711 ; Vector extract Byte and convert to quad precision.
713 ; Function Attrs: norecurse nounwind
714 define void @sbVecConv2qp(fp128* nocapture %a, <16 x i8> %b) {
715 ; CHECK-LABEL: sbVecConv2qp:
716 ; CHECK: # %bb.0: # %entry
717 ; CHECK-NEXT: vextractub v2, v2, 15
718 ; CHECK-NEXT: vextsb2d v2, v2
719 ; CHECK-NEXT: xscvsdqp v2, v2
720 ; CHECK-NEXT: stxv v2, 0(r3)
723 ; CHECK-BE-LABEL: sbVecConv2qp:
724 ; CHECK-BE: # %bb.0: # %entry
725 ; CHECK-BE-NEXT: vextractub v2, v2, 0
726 ; CHECK-BE-NEXT: vextsb2d v2, v2
727 ; CHECK-BE-NEXT: xscvsdqp v2, v2
728 ; CHECK-BE-NEXT: stxv v2, 0(r3)
731 %vecext = extractelement <16 x i8> %b, i32 0
732 %conv = sitofp i8 %vecext to fp128
733 store fp128 %conv, fp128* %a, align 16
737 ; Function Attrs: norecurse nounwind
738 define void @sbVecConv2qp1(fp128* nocapture %a, <16 x i8> %b) {
739 ; CHECK-LABEL: sbVecConv2qp1:
740 ; CHECK: # %bb.0: # %entry
741 ; CHECK-NEXT: vextractub v2, v2, 14
742 ; CHECK-NEXT: vextsb2d v2, v2
743 ; CHECK-NEXT: xscvsdqp v2, v2
744 ; CHECK-NEXT: stxv v2, 0(r3)
747 ; CHECK-BE-LABEL: sbVecConv2qp1:
748 ; CHECK-BE: # %bb.0: # %entry
749 ; CHECK-BE-NEXT: vextractub v2, v2, 1
750 ; CHECK-BE-NEXT: vextsb2d v2, v2
751 ; CHECK-BE-NEXT: xscvsdqp v2, v2
752 ; CHECK-BE-NEXT: stxv v2, 0(r3)
755 %vecext = extractelement <16 x i8> %b, i32 1
756 %conv = sitofp i8 %vecext to fp128
757 store fp128 %conv, fp128* %a, align 16
761 ; Function Attrs: norecurse nounwind
762 define void @sbVecConv2qp2(fp128* nocapture %a, <16 x i8> %b) {
763 ; CHECK-LABEL: sbVecConv2qp2:
764 ; CHECK: # %bb.0: # %entry
765 ; CHECK-NEXT: vextractub v2, v2, 13
766 ; CHECK-NEXT: vextsb2d v2, v2
767 ; CHECK-NEXT: xscvsdqp v2, v2
768 ; CHECK-NEXT: stxv v2, 0(r3)
771 ; CHECK-BE-LABEL: sbVecConv2qp2:
772 ; CHECK-BE: # %bb.0: # %entry
773 ; CHECK-BE-NEXT: vextractub v2, v2, 2
774 ; CHECK-BE-NEXT: vextsb2d v2, v2
775 ; CHECK-BE-NEXT: xscvsdqp v2, v2
776 ; CHECK-BE-NEXT: stxv v2, 0(r3)
779 %vecext = extractelement <16 x i8> %b, i32 2
780 %conv = sitofp i8 %vecext to fp128
781 store fp128 %conv, fp128* %a, align 16
785 ; Function Attrs: norecurse nounwind
786 define void @sbVecConv2qp3(fp128* nocapture %a, <16 x i8> %b) {
787 ; CHECK-LABEL: sbVecConv2qp3:
788 ; CHECK: # %bb.0: # %entry
789 ; CHECK-NEXT: vextractub v2, v2, 12
790 ; CHECK-NEXT: vextsb2d v2, v2
791 ; CHECK-NEXT: xscvsdqp v2, v2
792 ; CHECK-NEXT: stxv v2, 0(r3)
795 ; CHECK-BE-LABEL: sbVecConv2qp3:
796 ; CHECK-BE: # %bb.0: # %entry
797 ; CHECK-BE-NEXT: vextractub v2, v2, 3
798 ; CHECK-BE-NEXT: vextsb2d v2, v2
799 ; CHECK-BE-NEXT: xscvsdqp v2, v2
800 ; CHECK-BE-NEXT: stxv v2, 0(r3)
803 %vecext = extractelement <16 x i8> %b, i32 3
804 %conv = sitofp i8 %vecext to fp128
805 store fp128 %conv, fp128* %a, align 16
809 ; Function Attrs: norecurse nounwind
810 define void @sbVecConv2qp4(fp128* nocapture %a, <16 x i8> %b) {
811 ; CHECK-LABEL: sbVecConv2qp4:
812 ; CHECK: # %bb.0: # %entry
813 ; CHECK-NEXT: vextractub v2, v2, 11
814 ; CHECK-NEXT: vextsb2d v2, v2
815 ; CHECK-NEXT: xscvsdqp v2, v2
816 ; CHECK-NEXT: stxv v2, 0(r3)
819 ; CHECK-BE-LABEL: sbVecConv2qp4:
820 ; CHECK-BE: # %bb.0: # %entry
821 ; CHECK-BE-NEXT: vextractub v2, v2, 4
822 ; CHECK-BE-NEXT: vextsb2d v2, v2
823 ; CHECK-BE-NEXT: xscvsdqp v2, v2
824 ; CHECK-BE-NEXT: stxv v2, 0(r3)
827 %vecext = extractelement <16 x i8> %b, i32 4
828 %conv = sitofp i8 %vecext to fp128
829 store fp128 %conv, fp128* %a, align 16
833 ; Function Attrs: norecurse nounwind
834 define void @sbVecConv2qp5(fp128* nocapture %a, <16 x i8> %b) {
835 ; CHECK-LABEL: sbVecConv2qp5:
836 ; CHECK: # %bb.0: # %entry
837 ; CHECK-NEXT: vextractub v2, v2, 10
838 ; CHECK-NEXT: vextsb2d v2, v2
839 ; CHECK-NEXT: xscvsdqp v2, v2
840 ; CHECK-NEXT: stxv v2, 0(r3)
843 ; CHECK-BE-LABEL: sbVecConv2qp5:
844 ; CHECK-BE: # %bb.0: # %entry
845 ; CHECK-BE-NEXT: vextractub v2, v2, 5
846 ; CHECK-BE-NEXT: vextsb2d v2, v2
847 ; CHECK-BE-NEXT: xscvsdqp v2, v2
848 ; CHECK-BE-NEXT: stxv v2, 0(r3)
851 %vecext = extractelement <16 x i8> %b, i32 5
852 %conv = sitofp i8 %vecext to fp128
853 store fp128 %conv, fp128* %a, align 16
857 ; Function Attrs: norecurse nounwind
858 define void @sbVecConv2qp6(fp128* nocapture %a, <16 x i8> %b) {
859 ; CHECK-LABEL: sbVecConv2qp6:
860 ; CHECK: # %bb.0: # %entry
861 ; CHECK-NEXT: vextractub v2, v2, 9
862 ; CHECK-NEXT: vextsb2d v2, v2
863 ; CHECK-NEXT: xscvsdqp v2, v2
864 ; CHECK-NEXT: stxv v2, 0(r3)
867 ; CHECK-BE-LABEL: sbVecConv2qp6:
868 ; CHECK-BE: # %bb.0: # %entry
869 ; CHECK-BE-NEXT: vextractub v2, v2, 6
870 ; CHECK-BE-NEXT: vextsb2d v2, v2
871 ; CHECK-BE-NEXT: xscvsdqp v2, v2
872 ; CHECK-BE-NEXT: stxv v2, 0(r3)
875 %vecext = extractelement <16 x i8> %b, i32 6
876 %conv = sitofp i8 %vecext to fp128
877 store fp128 %conv, fp128* %a, align 16
881 ; Function Attrs: norecurse nounwind
882 define void @sbVecConv2qp7(fp128* nocapture %a, <16 x i8> %b) {
883 ; CHECK-LABEL: sbVecConv2qp7:
884 ; CHECK: # %bb.0: # %entry
885 ; CHECK-NEXT: vextractub v2, v2, 8
886 ; CHECK-NEXT: vextsb2d v2, v2
887 ; CHECK-NEXT: xscvsdqp v2, v2
888 ; CHECK-NEXT: stxv v2, 0(r3)
891 ; CHECK-BE-LABEL: sbVecConv2qp7:
892 ; CHECK-BE: # %bb.0: # %entry
893 ; CHECK-BE-NEXT: vextractub v2, v2, 7
894 ; CHECK-BE-NEXT: vextsb2d v2, v2
895 ; CHECK-BE-NEXT: xscvsdqp v2, v2
896 ; CHECK-BE-NEXT: stxv v2, 0(r3)
899 %vecext = extractelement <16 x i8> %b, i32 7
900 %conv = sitofp i8 %vecext to fp128
901 store fp128 %conv, fp128* %a, align 16
905 ; Function Attrs: norecurse nounwind
906 define void @sbVecConv2qp8(fp128* nocapture %a, <16 x i8> %b) {
907 ; CHECK-LABEL: sbVecConv2qp8:
908 ; CHECK: # %bb.0: # %entry
909 ; CHECK-NEXT: vextractub v2, v2, 7
910 ; CHECK-NEXT: vextsb2d v2, v2
911 ; CHECK-NEXT: xscvsdqp v2, v2
912 ; CHECK-NEXT: stxv v2, 0(r3)
915 ; CHECK-BE-LABEL: sbVecConv2qp8:
916 ; CHECK-BE: # %bb.0: # %entry
917 ; CHECK-BE-NEXT: vextractub v2, v2, 8
918 ; CHECK-BE-NEXT: vextsb2d v2, v2
919 ; CHECK-BE-NEXT: xscvsdqp v2, v2
920 ; CHECK-BE-NEXT: stxv v2, 0(r3)
923 %vecext = extractelement <16 x i8> %b, i32 8
924 %conv = sitofp i8 %vecext to fp128
925 store fp128 %conv, fp128* %a, align 16
929 ; Function Attrs: norecurse nounwind
930 define void @sbVecConv2qp9(fp128* nocapture %a, <16 x i8> %b) {
931 ; CHECK-LABEL: sbVecConv2qp9:
932 ; CHECK: # %bb.0: # %entry
933 ; CHECK-NEXT: vextractub v2, v2, 6
934 ; CHECK-NEXT: vextsb2d v2, v2
935 ; CHECK-NEXT: xscvsdqp v2, v2
936 ; CHECK-NEXT: stxv v2, 0(r3)
939 ; CHECK-BE-LABEL: sbVecConv2qp9:
940 ; CHECK-BE: # %bb.0: # %entry
941 ; CHECK-BE-NEXT: vextractub v2, v2, 9
942 ; CHECK-BE-NEXT: vextsb2d v2, v2
943 ; CHECK-BE-NEXT: xscvsdqp v2, v2
944 ; CHECK-BE-NEXT: stxv v2, 0(r3)
947 %vecext = extractelement <16 x i8> %b, i32 9
948 %conv = sitofp i8 %vecext to fp128
949 store fp128 %conv, fp128* %a, align 16
953 ; Function Attrs: norecurse nounwind
954 define void @sbVecConv2qp10(fp128* nocapture %a, <16 x i8> %b) {
955 ; CHECK-LABEL: sbVecConv2qp10:
956 ; CHECK: # %bb.0: # %entry
957 ; CHECK-NEXT: vextractub v2, v2, 5
958 ; CHECK-NEXT: vextsb2d v2, v2
959 ; CHECK-NEXT: xscvsdqp v2, v2
960 ; CHECK-NEXT: stxv v2, 0(r3)
963 ; CHECK-BE-LABEL: sbVecConv2qp10:
964 ; CHECK-BE: # %bb.0: # %entry
965 ; CHECK-BE-NEXT: vextractub v2, v2, 10
966 ; CHECK-BE-NEXT: vextsb2d v2, v2
967 ; CHECK-BE-NEXT: xscvsdqp v2, v2
968 ; CHECK-BE-NEXT: stxv v2, 0(r3)
971 %vecext = extractelement <16 x i8> %b, i32 10
972 %conv = sitofp i8 %vecext to fp128
973 store fp128 %conv, fp128* %a, align 16
977 ; Function Attrs: norecurse nounwind
978 define void @sbVecConv2qp11(fp128* nocapture %a, <16 x i8> %b) {
979 ; CHECK-LABEL: sbVecConv2qp11:
980 ; CHECK: # %bb.0: # %entry
981 ; CHECK-NEXT: vextractub v2, v2, 4
982 ; CHECK-NEXT: vextsb2d v2, v2
983 ; CHECK-NEXT: xscvsdqp v2, v2
984 ; CHECK-NEXT: stxv v2, 0(r3)
987 ; CHECK-BE-LABEL: sbVecConv2qp11:
988 ; CHECK-BE: # %bb.0: # %entry
989 ; CHECK-BE-NEXT: vextractub v2, v2, 11
990 ; CHECK-BE-NEXT: vextsb2d v2, v2
991 ; CHECK-BE-NEXT: xscvsdqp v2, v2
992 ; CHECK-BE-NEXT: stxv v2, 0(r3)
995 %vecext = extractelement <16 x i8> %b, i32 11
996 %conv = sitofp i8 %vecext to fp128
997 store fp128 %conv, fp128* %a, align 16
1001 ; Function Attrs: norecurse nounwind
1002 define void @sbVecConv2qp12(fp128* nocapture %a, <16 x i8> %b) {
1003 ; CHECK-LABEL: sbVecConv2qp12:
1004 ; CHECK: # %bb.0: # %entry
1005 ; CHECK-NEXT: vextractub v2, v2, 3
1006 ; CHECK-NEXT: vextsb2d v2, v2
1007 ; CHECK-NEXT: xscvsdqp v2, v2
1008 ; CHECK-NEXT: stxv v2, 0(r3)
1011 ; CHECK-BE-LABEL: sbVecConv2qp12:
1012 ; CHECK-BE: # %bb.0: # %entry
1013 ; CHECK-BE-NEXT: vextractub v2, v2, 12
1014 ; CHECK-BE-NEXT: vextsb2d v2, v2
1015 ; CHECK-BE-NEXT: xscvsdqp v2, v2
1016 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1017 ; CHECK-BE-NEXT: blr
1019 %vecext = extractelement <16 x i8> %b, i32 12
1020 %conv = sitofp i8 %vecext to fp128
1021 store fp128 %conv, fp128* %a, align 16
1025 ; Function Attrs: norecurse nounwind
1026 define void @sbVecConv2qp13(fp128* nocapture %a, <16 x i8> %b) {
1027 ; CHECK-LABEL: sbVecConv2qp13:
1028 ; CHECK: # %bb.0: # %entry
1029 ; CHECK-NEXT: vextractub v2, v2, 2
1030 ; CHECK-NEXT: vextsb2d v2, v2
1031 ; CHECK-NEXT: xscvsdqp v2, v2
1032 ; CHECK-NEXT: stxv v2, 0(r3)
1035 ; CHECK-BE-LABEL: sbVecConv2qp13:
1036 ; CHECK-BE: # %bb.0: # %entry
1037 ; CHECK-BE-NEXT: vextractub v2, v2, 13
1038 ; CHECK-BE-NEXT: vextsb2d v2, v2
1039 ; CHECK-BE-NEXT: xscvsdqp v2, v2
1040 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1041 ; CHECK-BE-NEXT: blr
1043 %vecext = extractelement <16 x i8> %b, i32 13
1044 %conv = sitofp i8 %vecext to fp128
1045 store fp128 %conv, fp128* %a, align 16
1049 ; Function Attrs: norecurse nounwind
1050 define void @sbVecConv2qp14(fp128* nocapture %a, <16 x i8> %b) {
1051 ; CHECK-LABEL: sbVecConv2qp14:
1052 ; CHECK: # %bb.0: # %entry
1053 ; CHECK-NEXT: vextractub v2, v2, 1
1054 ; CHECK-NEXT: vextsb2d v2, v2
1055 ; CHECK-NEXT: xscvsdqp v2, v2
1056 ; CHECK-NEXT: stxv v2, 0(r3)
1059 ; CHECK-BE-LABEL: sbVecConv2qp14:
1060 ; CHECK-BE: # %bb.0: # %entry
1061 ; CHECK-BE-NEXT: vextractub v2, v2, 14
1062 ; CHECK-BE-NEXT: vextsb2d v2, v2
1063 ; CHECK-BE-NEXT: xscvsdqp v2, v2
1064 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1065 ; CHECK-BE-NEXT: blr
1067 %vecext = extractelement <16 x i8> %b, i32 14
1068 %conv = sitofp i8 %vecext to fp128
1069 store fp128 %conv, fp128* %a, align 16
1073 ; Function Attrs: norecurse nounwind
1074 define void @sbVecConv2qp15(fp128* nocapture %a, <16 x i8> %b) {
1075 ; CHECK-LABEL: sbVecConv2qp15:
1076 ; CHECK: # %bb.0: # %entry
1077 ; CHECK-NEXT: vextractub v2, v2, 0
1078 ; CHECK-NEXT: vextsb2d v2, v2
1079 ; CHECK-NEXT: xscvsdqp v2, v2
1080 ; CHECK-NEXT: stxv v2, 0(r3)
1083 ; CHECK-BE-LABEL: sbVecConv2qp15:
1084 ; CHECK-BE: # %bb.0: # %entry
1085 ; CHECK-BE-NEXT: vextractub v2, v2, 15
1086 ; CHECK-BE-NEXT: vextsb2d v2, v2
1087 ; CHECK-BE-NEXT: xscvsdqp v2, v2
1088 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1089 ; CHECK-BE-NEXT: blr
1091 %vecext = extractelement <16 x i8> %b, i32 15
1092 %conv = sitofp i8 %vecext to fp128
1093 store fp128 %conv, fp128* %a, align 16
1097 ; Function Attrs: norecurse nounwind
1098 define void @ubVecConv2qp(fp128* nocapture %a, <16 x i8> %b) {
1099 ; CHECK-LABEL: ubVecConv2qp:
1100 ; CHECK: # %bb.0: # %entry
1101 ; CHECK-NEXT: vextractub v2, v2, 15
1102 ; CHECK-NEXT: xscvudqp v2, v2
1103 ; CHECK-NEXT: stxv v2, 0(r3)
1106 ; CHECK-BE-LABEL: ubVecConv2qp:
1107 ; CHECK-BE: # %bb.0: # %entry
1108 ; CHECK-BE-NEXT: vextractub v2, v2, 0
1109 ; CHECK-BE-NEXT: xscvudqp v2, v2
1110 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1111 ; CHECK-BE-NEXT: blr
1113 %vecext = extractelement <16 x i8> %b, i32 0
1114 %conv = uitofp i8 %vecext to fp128
1115 store fp128 %conv, fp128* %a, align 16
1119 ; Function Attrs: norecurse nounwind
1120 define void @ubVecConv2qp1(fp128* nocapture %a, <16 x i8> %b) {
1121 ; CHECK-LABEL: ubVecConv2qp1:
1122 ; CHECK: # %bb.0: # %entry
1123 ; CHECK-NEXT: vextractub v2, v2, 14
1124 ; CHECK-NEXT: xscvudqp v2, v2
1125 ; CHECK-NEXT: stxv v2, 0(r3)
1128 ; CHECK-BE-LABEL: ubVecConv2qp1:
1129 ; CHECK-BE: # %bb.0: # %entry
1130 ; CHECK-BE-NEXT: vextractub v2, v2, 1
1131 ; CHECK-BE-NEXT: xscvudqp v2, v2
1132 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1133 ; CHECK-BE-NEXT: blr
1135 %vecext = extractelement <16 x i8> %b, i32 1
1136 %conv = uitofp i8 %vecext to fp128
1137 store fp128 %conv, fp128* %a, align 16
1141 ; Function Attrs: norecurse nounwind
1142 define void @ubVecConv2qp2(fp128* nocapture %a, <16 x i8> %b) {
1143 ; CHECK-LABEL: ubVecConv2qp2:
1144 ; CHECK: # %bb.0: # %entry
1145 ; CHECK-NEXT: vextractub v2, v2, 13
1146 ; CHECK-NEXT: xscvudqp v2, v2
1147 ; CHECK-NEXT: stxv v2, 0(r3)
1150 ; CHECK-BE-LABEL: ubVecConv2qp2:
1151 ; CHECK-BE: # %bb.0: # %entry
1152 ; CHECK-BE-NEXT: vextractub v2, v2, 2
1153 ; CHECK-BE-NEXT: xscvudqp v2, v2
1154 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1155 ; CHECK-BE-NEXT: blr
1157 %vecext = extractelement <16 x i8> %b, i32 2
1158 %conv = uitofp i8 %vecext to fp128
1159 store fp128 %conv, fp128* %a, align 16
1163 ; Function Attrs: norecurse nounwind
1164 define void @ubVecConv2qp3(fp128* nocapture %a, <16 x i8> %b) {
1165 ; CHECK-LABEL: ubVecConv2qp3:
1166 ; CHECK: # %bb.0: # %entry
1167 ; CHECK-NEXT: vextractub v2, v2, 12
1168 ; CHECK-NEXT: xscvudqp v2, v2
1169 ; CHECK-NEXT: stxv v2, 0(r3)
1172 ; CHECK-BE-LABEL: ubVecConv2qp3:
1173 ; CHECK-BE: # %bb.0: # %entry
1174 ; CHECK-BE-NEXT: vextractub v2, v2, 3
1175 ; CHECK-BE-NEXT: xscvudqp v2, v2
1176 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1177 ; CHECK-BE-NEXT: blr
1179 %vecext = extractelement <16 x i8> %b, i32 3
1180 %conv = uitofp i8 %vecext to fp128
1181 store fp128 %conv, fp128* %a, align 16
1185 ; Function Attrs: norecurse nounwind
1186 define void @ubVecConv2qp4(fp128* nocapture %a, <16 x i8> %b) {
1187 ; CHECK-LABEL: ubVecConv2qp4:
1188 ; CHECK: # %bb.0: # %entry
1189 ; CHECK-NEXT: vextractub v2, v2, 11
1190 ; CHECK-NEXT: xscvudqp v2, v2
1191 ; CHECK-NEXT: stxv v2, 0(r3)
1194 ; CHECK-BE-LABEL: ubVecConv2qp4:
1195 ; CHECK-BE: # %bb.0: # %entry
1196 ; CHECK-BE-NEXT: vextractub v2, v2, 4
1197 ; CHECK-BE-NEXT: xscvudqp v2, v2
1198 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1199 ; CHECK-BE-NEXT: blr
1201 %vecext = extractelement <16 x i8> %b, i32 4
1202 %conv = uitofp i8 %vecext to fp128
1203 store fp128 %conv, fp128* %a, align 16
1207 ; Function Attrs: norecurse nounwind
1208 define void @ubVecConv2qp5(fp128* nocapture %a, <16 x i8> %b) {
1209 ; CHECK-LABEL: ubVecConv2qp5:
1210 ; CHECK: # %bb.0: # %entry
1211 ; CHECK-NEXT: vextractub v2, v2, 10
1212 ; CHECK-NEXT: xscvudqp v2, v2
1213 ; CHECK-NEXT: stxv v2, 0(r3)
1216 ; CHECK-BE-LABEL: ubVecConv2qp5:
1217 ; CHECK-BE: # %bb.0: # %entry
1218 ; CHECK-BE-NEXT: vextractub v2, v2, 5
1219 ; CHECK-BE-NEXT: xscvudqp v2, v2
1220 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1221 ; CHECK-BE-NEXT: blr
1223 %vecext = extractelement <16 x i8> %b, i32 5
1224 %conv = uitofp i8 %vecext to fp128
1225 store fp128 %conv, fp128* %a, align 16
1229 ; Function Attrs: norecurse nounwind
1230 define void @ubVecConv2qp6(fp128* nocapture %a, <16 x i8> %b) {
1231 ; CHECK-LABEL: ubVecConv2qp6:
1232 ; CHECK: # %bb.0: # %entry
1233 ; CHECK-NEXT: vextractub v2, v2, 9
1234 ; CHECK-NEXT: xscvudqp v2, v2
1235 ; CHECK-NEXT: stxv v2, 0(r3)
1238 ; CHECK-BE-LABEL: ubVecConv2qp6:
1239 ; CHECK-BE: # %bb.0: # %entry
1240 ; CHECK-BE-NEXT: vextractub v2, v2, 6
1241 ; CHECK-BE-NEXT: xscvudqp v2, v2
1242 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1243 ; CHECK-BE-NEXT: blr
1245 %vecext = extractelement <16 x i8> %b, i32 6
1246 %conv = uitofp i8 %vecext to fp128
1247 store fp128 %conv, fp128* %a, align 16
1251 ; Function Attrs: norecurse nounwind
1252 define void @ubVecConv2qp7(fp128* nocapture %a, <16 x i8> %b) {
1253 ; CHECK-LABEL: ubVecConv2qp7:
1254 ; CHECK: # %bb.0: # %entry
1255 ; CHECK-NEXT: vextractub v2, v2, 8
1256 ; CHECK-NEXT: xscvudqp v2, v2
1257 ; CHECK-NEXT: stxv v2, 0(r3)
1260 ; CHECK-BE-LABEL: ubVecConv2qp7:
1261 ; CHECK-BE: # %bb.0: # %entry
1262 ; CHECK-BE-NEXT: vextractub v2, v2, 7
1263 ; CHECK-BE-NEXT: xscvudqp v2, v2
1264 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1265 ; CHECK-BE-NEXT: blr
1267 %vecext = extractelement <16 x i8> %b, i32 7
1268 %conv = uitofp i8 %vecext to fp128
1269 store fp128 %conv, fp128* %a, align 16
1273 ; Function Attrs: norecurse nounwind
1274 define void @ubVecConv2qp8(fp128* nocapture %a, <16 x i8> %b) {
1275 ; CHECK-LABEL: ubVecConv2qp8:
1276 ; CHECK: # %bb.0: # %entry
1277 ; CHECK-NEXT: vextractub v2, v2, 7
1278 ; CHECK-NEXT: xscvudqp v2, v2
1279 ; CHECK-NEXT: stxv v2, 0(r3)
1282 ; CHECK-BE-LABEL: ubVecConv2qp8:
1283 ; CHECK-BE: # %bb.0: # %entry
1284 ; CHECK-BE-NEXT: vextractub v2, v2, 8
1285 ; CHECK-BE-NEXT: xscvudqp v2, v2
1286 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1287 ; CHECK-BE-NEXT: blr
1289 %vecext = extractelement <16 x i8> %b, i32 8
1290 %conv = uitofp i8 %vecext to fp128
1291 store fp128 %conv, fp128* %a, align 16
1295 ; Function Attrs: norecurse nounwind
1296 define void @ubVecConv2qp9(fp128* nocapture %a, <16 x i8> %b) {
1297 ; CHECK-LABEL: ubVecConv2qp9:
1298 ; CHECK: # %bb.0: # %entry
1299 ; CHECK-NEXT: vextractub v2, v2, 6
1300 ; CHECK-NEXT: xscvudqp v2, v2
1301 ; CHECK-NEXT: stxv v2, 0(r3)
1304 ; CHECK-BE-LABEL: ubVecConv2qp9:
1305 ; CHECK-BE: # %bb.0: # %entry
1306 ; CHECK-BE-NEXT: vextractub v2, v2, 9
1307 ; CHECK-BE-NEXT: xscvudqp v2, v2
1308 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1309 ; CHECK-BE-NEXT: blr
1311 %vecext = extractelement <16 x i8> %b, i32 9
1312 %conv = uitofp i8 %vecext to fp128
1313 store fp128 %conv, fp128* %a, align 16
1317 ; Function Attrs: norecurse nounwind
1318 define void @ubVecConv2qp10(fp128* nocapture %a, <16 x i8> %b) {
1319 ; CHECK-LABEL: ubVecConv2qp10:
1320 ; CHECK: # %bb.0: # %entry
1321 ; CHECK-NEXT: vextractub v2, v2, 5
1322 ; CHECK-NEXT: xscvudqp v2, v2
1323 ; CHECK-NEXT: stxv v2, 0(r3)
1326 ; CHECK-BE-LABEL: ubVecConv2qp10:
1327 ; CHECK-BE: # %bb.0: # %entry
1328 ; CHECK-BE-NEXT: vextractub v2, v2, 10
1329 ; CHECK-BE-NEXT: xscvudqp v2, v2
1330 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1331 ; CHECK-BE-NEXT: blr
1333 %vecext = extractelement <16 x i8> %b, i32 10
1334 %conv = uitofp i8 %vecext to fp128
1335 store fp128 %conv, fp128* %a, align 16
1339 ; Function Attrs: norecurse nounwind
1340 define void @ubVecConv2qp11(fp128* nocapture %a, <16 x i8> %b) {
1341 ; CHECK-LABEL: ubVecConv2qp11:
1342 ; CHECK: # %bb.0: # %entry
1343 ; CHECK-NEXT: vextractub v2, v2, 4
1344 ; CHECK-NEXT: xscvudqp v2, v2
1345 ; CHECK-NEXT: stxv v2, 0(r3)
1348 ; CHECK-BE-LABEL: ubVecConv2qp11:
1349 ; CHECK-BE: # %bb.0: # %entry
1350 ; CHECK-BE-NEXT: vextractub v2, v2, 11
1351 ; CHECK-BE-NEXT: xscvudqp v2, v2
1352 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1353 ; CHECK-BE-NEXT: blr
1355 %vecext = extractelement <16 x i8> %b, i32 11
1356 %conv = uitofp i8 %vecext to fp128
1357 store fp128 %conv, fp128* %a, align 16
1361 ; Function Attrs: norecurse nounwind
1362 define void @ubVecConv2qp12(fp128* nocapture %a, <16 x i8> %b) {
1363 ; CHECK-LABEL: ubVecConv2qp12:
1364 ; CHECK: # %bb.0: # %entry
1365 ; CHECK-NEXT: vextractub v2, v2, 3
1366 ; CHECK-NEXT: xscvudqp v2, v2
1367 ; CHECK-NEXT: stxv v2, 0(r3)
1370 ; CHECK-BE-LABEL: ubVecConv2qp12:
1371 ; CHECK-BE: # %bb.0: # %entry
1372 ; CHECK-BE-NEXT: vextractub v2, v2, 12
1373 ; CHECK-BE-NEXT: xscvudqp v2, v2
1374 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1375 ; CHECK-BE-NEXT: blr
1377 %vecext = extractelement <16 x i8> %b, i32 12
1378 %conv = uitofp i8 %vecext to fp128
1379 store fp128 %conv, fp128* %a, align 16
1383 ; Function Attrs: norecurse nounwind
1384 define void @ubVecConv2qp13(fp128* nocapture %a, <16 x i8> %b) {
1385 ; CHECK-LABEL: ubVecConv2qp13:
1386 ; CHECK: # %bb.0: # %entry
1387 ; CHECK-NEXT: vextractub v2, v2, 2
1388 ; CHECK-NEXT: xscvudqp v2, v2
1389 ; CHECK-NEXT: stxv v2, 0(r3)
1392 ; CHECK-BE-LABEL: ubVecConv2qp13:
1393 ; CHECK-BE: # %bb.0: # %entry
1394 ; CHECK-BE-NEXT: vextractub v2, v2, 13
1395 ; CHECK-BE-NEXT: xscvudqp v2, v2
1396 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1397 ; CHECK-BE-NEXT: blr
1399 %vecext = extractelement <16 x i8> %b, i32 13
1400 %conv = uitofp i8 %vecext to fp128
1401 store fp128 %conv, fp128* %a, align 16
1405 ; Function Attrs: norecurse nounwind
1406 define void @ubVecConv2qp14(fp128* nocapture %a, <16 x i8> %b) {
1407 ; CHECK-LABEL: ubVecConv2qp14:
1408 ; CHECK: # %bb.0: # %entry
1409 ; CHECK-NEXT: vextractub v2, v2, 1
1410 ; CHECK-NEXT: xscvudqp v2, v2
1411 ; CHECK-NEXT: stxv v2, 0(r3)
1414 ; CHECK-BE-LABEL: ubVecConv2qp14:
1415 ; CHECK-BE: # %bb.0: # %entry
1416 ; CHECK-BE-NEXT: vextractub v2, v2, 14
1417 ; CHECK-BE-NEXT: xscvudqp v2, v2
1418 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1419 ; CHECK-BE-NEXT: blr
1421 %vecext = extractelement <16 x i8> %b, i32 14
1422 %conv = uitofp i8 %vecext to fp128
1423 store fp128 %conv, fp128* %a, align 16
1427 ; Function Attrs: norecurse nounwind
1428 define void @ubVecConv2qp15(fp128* nocapture %a, <16 x i8> %b) {
1429 ; CHECK-LABEL: ubVecConv2qp15:
1430 ; CHECK: # %bb.0: # %entry
1431 ; CHECK-NEXT: vextractub v2, v2, 0
1432 ; CHECK-NEXT: xscvudqp v2, v2
1433 ; CHECK-NEXT: stxv v2, 0(r3)
1436 ; CHECK-BE-LABEL: ubVecConv2qp15:
1437 ; CHECK-BE: # %bb.0: # %entry
1438 ; CHECK-BE-NEXT: vextractub v2, v2, 15
1439 ; CHECK-BE-NEXT: xscvudqp v2, v2
1440 ; CHECK-BE-NEXT: stxv v2, 0(r3)
1441 ; CHECK-BE-NEXT: blr
1443 %vecext = extractelement <16 x i8> %b, i32 15
1444 %conv = uitofp i8 %vecext to fp128
1445 store fp128 %conv, fp128* %a, align 16