llvm-project/llvm/test/CodeGen/PowerPC/f128-vecExtractNconv.ll
Kai Nacke 427fb35192 [PPC] Opaque pointer migration, part 1.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.

Reviewed By: nemanja, amyk, nikic, PowerPC

Differential Revision: https://reviews.llvm.org/D135470
2022-10-11 17:24:06 +00:00

1448 lines
41 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \
; RUN: -relocation-model=pic -ppc-asm-full-reg-names -verify-machineinstrs \
; RUN: < %s | FileCheck %s
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-unknown -ppc-vsr-nums-as-vr \
; RUN: -ppc-asm-full-reg-names -verify-machineinstrs \
; RUN: < %s | FileCheck %s -check-prefix=CHECK-BE
; Vector extract DWord and convert to quad precision.
@sdwVecMem = global <2 x i64> <i64 88, i64 99>, align 16
@udwVecMem = global <2 x i64> <i64 88, i64 99>, align 16
; Function Attrs: norecurse nounwind
define void @sdwVecConv2qp(ptr nocapture %a, <2 x i64> %b) {
; CHECK-LABEL: sdwVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltd v2, v2, 1
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: sdwVecConv2qp:
; CHECK-BE: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <2 x i64> %b, i32 0
%conv = sitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sdwVecConv2qp1(ptr nocapture %a, <2 x i64> %b) {
; CHECK-LABEL: sdwVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: sdwVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltd v2, v2, 1
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <2 x i64> %b, i32 1
%conv = sitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sdwVecConv2qp_02(ptr nocapture %a) {
; CHECK-LABEL: sdwVecConv2qp_02:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
; CHECK-NEXT: lxsd v2, 0(r4)
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
entry:
%0 = load <2 x i64>, ptr @sdwVecMem, align 16
%vecext = extractelement <2 x i64> %0, i32 0
%conv = sitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sdwVecConv2qp1_03(ptr nocapture %a, ptr nocapture readonly %b) {
; CHECK-LABEL: sdwVecConv2qp1_03:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: lxsd v2, 8(r4)
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
entry:
%0 = load <2 x i64>, ptr %b, align 16
%vecext = extractelement <2 x i64> %0, i32 1
%conv = sitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @udwVecConv2qp(ptr nocapture %a, <2 x i64> %b) {
; CHECK-LABEL: udwVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxspltd v2, v2, 1
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: udwVecConv2qp:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <2 x i64> %b, i32 0
%conv = uitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @udwVecConv2qp1(ptr nocapture %a, <2 x i64> %b) {
; CHECK-LABEL: udwVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: udwVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xxspltd v2, v2, 1
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <2 x i64> %b, i32 1
%conv = uitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @udwVecConv2qp1_02(ptr nocapture %a) {
; CHECK-LABEL: udwVecConv2qp1_02:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, .LC1@toc@ha
; CHECK-NEXT: ld r4, .LC1@toc@l(r4)
; CHECK-NEXT: lxsd v2, 8(r4)
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
entry:
%0 = load <2 x i64>, ptr @udwVecMem, align 16
%vecext = extractelement <2 x i64> %0, i32 1
%conv = uitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @udwVecConv2qp_03(ptr nocapture %a, ptr nocapture readonly %b) {
; CHECK-LABEL: udwVecConv2qp_03:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: lxsd v2, 0(r4)
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
entry:
%0 = load <2 x i64>, ptr %b, align 16
%vecext = extractelement <2 x i64> %0, i32 0
%conv = uitofp i64 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Vector extract Word and convert to quad precision.
; Function Attrs: norecurse nounwind
define void @swVecConv2qp(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: swVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vspltw v2, v2, 3
; CHECK-NEXT: vextsw2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: swVecConv2qp:
; CHECK-BE: vspltw v2, v2, 0
; CHECK-BE-NEXT: vextsw2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 0
%conv = sitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @swVecConv2qp1(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: swVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vspltw v2, v2, 2
; CHECK-NEXT: vextsw2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: swVecConv2qp1:
; CHECK-BE: vextsw2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 1
%conv = sitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @swVecConv2qp2(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: swVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextsw2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: swVecConv2qp2:
; CHECK-BE: vspltw v2, v2, 2
; CHECK-BE-NEXT: vextsw2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 2
%conv = sitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @swVecConv2qp3(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: swVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vspltw v2, v2, 0
; CHECK-NEXT: vextsw2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: swVecConv2qp3:
; CHECK-BE: vspltw v2, v2, 3
; CHECK-BE-NEXT: vextsw2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 3
%conv = sitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uwVecConv2qp(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: uwVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxextractuw v2, v2, 12
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: uwVecConv2qp:
; CHECK-BE: xxextractuw v2, v2, 0
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 0
%conv = uitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uwVecConv2qp1(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: uwVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxextractuw v2, v2, 8
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: uwVecConv2qp1:
; CHECK-BE: xxextractuw v2, v2, 4
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 1
%conv = uitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uwVecConv2qp2(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: uwVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxextractuw v2, v2, 4
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: uwVecConv2qp2:
; CHECK-BE: xxextractuw v2, v2, 8
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 2
%conv = uitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uwVecConv2qp3(ptr nocapture %a, <4 x i32> %b) {
; CHECK-LABEL: uwVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xxextractuw v2, v2, 0
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
; CHECK-BE-LABEL: uwVecConv2qp3:
; CHECK-BE: xxextractuw v2, v2, 12
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <4 x i32> %b, i32 3
%conv = uitofp i32 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Vector extract HWord and convert to quad precision.
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 14
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 0
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 0
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp1(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 12
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 2
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 1
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp2(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 10
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp2:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 4
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 2
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp3(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 8
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp3:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 6
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 3
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp4(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 6
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp4:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 8
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 4
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp5(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp5:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 4
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp5:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 10
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 5
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp6(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp6:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 2
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp6:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 12
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 6
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @shwVecConv2qp7(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: shwVecConv2qp7:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 0
; CHECK-NEXT: vextsh2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: shwVecConv2qp7:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 14
; CHECK-BE-NEXT: vextsh2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 7
%conv = sitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 14
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 0
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 0
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp1(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 12
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 2
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 1
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp2(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 10
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp2:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 4
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 2
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp3(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 8
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp3:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 6
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 3
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp4(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 6
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp4:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 8
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 4
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp5(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp5:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 4
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp5:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 10
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 5
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp6(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp6:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 2
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp6:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 12
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 6
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @uhwVecConv2qp7(ptr nocapture %a, <8 x i16> %b) {
; CHECK-LABEL: uhwVecConv2qp7:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractuh v2, v2, 0
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: uhwVecConv2qp7:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractuh v2, v2, 14
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <8 x i16> %b, i32 7
%conv = uitofp i16 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Vector extract Byte and convert to quad precision.
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 15
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 0
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 0
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp1(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 14
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 1
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 1
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp2(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 13
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp2:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 2
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 2
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp3(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 12
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp3:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 3
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 3
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp4(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 11
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp4:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 4
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 4
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp5(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp5:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 10
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp5:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 5
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 5
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp6(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp6:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 9
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp6:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 6
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 6
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp7(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp7:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 8
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp7:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 7
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 7
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp8(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 7
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp8:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 8
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 8
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp9(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp9:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 6
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp9:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 9
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 9
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp10(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp10:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 5
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp10:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 10
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 10
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp11(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp11:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 4
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp11:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 11
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 11
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp12(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp12:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 3
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp12:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 12
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 12
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp13(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp13:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 2
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp13:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 13
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 13
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp14(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp14:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 1
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp14:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 14
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 14
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @sbVecConv2qp15(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: sbVecConv2qp15:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 0
; CHECK-NEXT: vextsb2d v2, v2
; CHECK-NEXT: xscvsdqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: sbVecConv2qp15:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 15
; CHECK-BE-NEXT: vextsb2d v2, v2
; CHECK-BE-NEXT: xscvsdqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 15
%conv = sitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 15
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 0
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 0
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp1(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp1:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 14
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp1:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 1
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 1
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp2(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp2:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 13
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp2:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 2
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 2
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp3(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 12
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp3:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 3
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 3
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp4(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 11
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp4:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 4
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 4
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp5(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp5:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 10
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp5:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 5
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 5
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp6(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp6:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 9
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp6:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 6
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 6
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp7(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp7:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 8
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp7:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 7
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 7
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp8(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 7
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp8:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 8
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 8
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp9(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp9:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 6
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp9:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 9
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 9
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp10(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp10:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 5
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp10:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 10
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 10
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp11(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp11:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 4
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp11:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 11
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 11
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp12(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp12:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 3
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp12:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 12
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 12
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp13(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp13:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 2
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp13:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 13
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 13
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp14(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp14:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 1
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp14:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 14
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 14
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}
; Function Attrs: norecurse nounwind
define void @ubVecConv2qp15(ptr nocapture %a, <16 x i8> %b) {
; CHECK-LABEL: ubVecConv2qp15:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: vextractub v2, v2, 0
; CHECK-NEXT: xscvudqp v2, v2
; CHECK-NEXT: stxv v2, 0(r3)
; CHECK-NEXT: blr
;
; CHECK-BE-LABEL: ubVecConv2qp15:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: vextractub v2, v2, 15
; CHECK-BE-NEXT: xscvudqp v2, v2
; CHECK-BE-NEXT: stxv v2, 0(r3)
; CHECK-BE-NEXT: blr
entry:
%vecext = extractelement <16 x i8> %b, i32 15
%conv = uitofp i8 %vecext to fp128
store fp128 %conv, ptr %a, align 16
ret void
}