| ; 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: -ppc-asm-full-reg-names -verify-machineinstrs \ |
| ; RUN: -enable-ppc-quad-precision < %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: -enable-ppc-quad-precision < %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(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sdwVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sdwVecConv2qp_02(fp128* 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>, <2 x i64>* @sdwVecMem, align 16 |
| %vecext = extractelement <2 x i64> %0, i32 0 |
| %conv = sitofp i64 %vecext to fp128 |
| store fp128 %conv, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sdwVecConv2qp1_03(fp128* nocapture %a, <2 x i64>* 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>, <2 x i64>* %b, align 16 |
| %vecext = extractelement <2 x i64> %0, i32 1 |
| %conv = sitofp i64 %vecext to fp128 |
| store fp128 %conv, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @udwVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @udwVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @udwVecConv2qp1_02(fp128* 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>, <2 x i64>* @udwVecMem, align 16 |
| %vecext = extractelement <2 x i64> %0, i32 1 |
| %conv = uitofp i64 %vecext to fp128 |
| store fp128 %conv, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @udwVecConv2qp_03(fp128* nocapture %a, <2 x i64>* 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>, <2 x i64>* %b, align 16 |
| %vecext = extractelement <2 x i64> %0, i32 0 |
| %conv = uitofp i64 %vecext to fp128 |
| store fp128 %conv, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Vector extract Word and convert to quad precision. |
| |
| ; Function Attrs: norecurse nounwind |
| define void @swVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @swVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @swVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @swVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uwVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uwVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uwVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uwVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Vector extract HWord and convert to quad precision. |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp4(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp5(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp6(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @shwVecConv2qp7(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp4(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp5(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp6(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @uhwVecConv2qp7(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Vector extract Byte and convert to quad precision. |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp4(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp5(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp6(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp7(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp8(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp9(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp10(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp11(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp12(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp13(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp14(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @sbVecConv2qp15(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp1(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp2(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp3(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp4(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp5(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp6(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp7(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp8(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp9(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp10(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp11(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp12(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp13(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp14(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |
| |
| ; Function Attrs: norecurse nounwind |
| define void @ubVecConv2qp15(fp128* 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, fp128* %a, align 16 |
| ret void |
| } |