[llvm] r293500 - [X86][SSE] Add support for combining PINSRW+ASSERTZEXT+PEXTRW patterns with target shuffles
Michael Kuperstein via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 30 11:22:36 PST 2017
Hi Simon,
I'm getting a "comparison of unsigned expression >= 0 is always true"
warning for the "0 <= ExIdx" check in the assert - which makes sense, since
ExIdx is a uint_64t. Perhaps just remove that part of the assert?
Thanks,
Michael
On Mon, Jan 30, 2017 at 8:58 AM, Simon Pilgrim via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: rksimon
> Date: Mon Jan 30 10:58:34 2017
> New Revision: 293500
>
> URL: http://llvm.org/viewvc/llvm-project?rev=293500&view=rev
> Log:
> [X86][SSE] Add support for combining PINSRW+ASSERTZEXT+PEXTRW patterns
> with target shuffles
>
> Modified:
> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
> X86/X86ISelLowering.cpp?rev=293500&r1=293499&r2=293500&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Jan 30 10:58:34 2017
> @@ -5769,6 +5769,26 @@ static bool getFauxShuffleMask(SDValue N
> Ops.push_back(IsAndN ? N1 : N0);
> return true;
> }
> + case X86ISD::PINSRW: {
> + // Attempt to recognise a PINSRW(ASSERTZEXT(PEXTRW)) shuffle pattern.
> + // TODO: Expand this to support PINSRB/INSERT_VECTOR_ELT/etc.
> + SDValue InVec = N.getOperand(0);
> + SDValue InScl = N.getOperand(1);
> + uint64_t InIdx = N.getConstantOperandVal(2);
> + assert(0 <= InIdx && InIdx < NumElts && "Illegal insertion index");
> + if (InScl.getOpcode() != ISD::AssertZext ||
> + InScl.getOperand(0).getOpcode() != X86ISD::PEXTRW)
> + return false;
> +
> + SDValue ExVec = InScl.getOperand(0).getOperand(0);
> + uint64_t ExIdx = InScl.getOperand(0).getConstantOperandVal(1);
> + assert(0 <= ExIdx && ExIdx < NumElts && "Illegal extraction index");
> + Ops.push_back(InVec);
> + Ops.push_back(ExVec);
> + for (unsigned i = 0; i != NumElts; ++i)
> + Mask.push_back(i == InIdx ? NumElts + ExIdx : i);
> + return true;
> + }
> case X86ISD::VSHLI:
> case X86ISD::VSRLI: {
> uint64_t ShiftVal = N.getConstantOperandVal(1);
>
> Modified: llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/X86/clear_upper_vector_element_bits.ll?rev=
> 293500&r1=293499&r2=293500&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll
> (original)
> +++ llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll Mon
> Jan 30 10:58:34 2017
> @@ -94,21 +94,7 @@ define <8 x i16> @_clearupper8xi16a(<8 x
> ;
> ; AVX-LABEL: _clearupper8xi16a:
> ; AVX: # BB#0:
> -; AVX-NEXT: vpextrw $1, %xmm0, %eax
> -; AVX-NEXT: vpextrw $2, %xmm0, %ecx
> -; AVX-NEXT: vpextrw $3, %xmm0, %edx
> -; AVX-NEXT: vpextrw $4, %xmm0, %esi
> -; AVX-NEXT: vpextrw $5, %xmm0, %edi
> -; AVX-NEXT: vpextrw $6, %xmm0, %r8d
> -; AVX-NEXT: vpextrw $7, %xmm0, %r9d
> -; AVX-NEXT: vpinsrw $1, %eax, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $2, %ecx, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $3, %edx, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $4, %esi, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $5, %edi, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $6, %r8d, %xmm0, %xmm0
> -; AVX-NEXT: vpinsrw $7, %r9d, %xmm0, %xmm0
> -; AVX-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
> +; AVX-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0
> ; AVX-NEXT: retq
> %x0 = extractelement <8 x i16> %0, i32 0
> %x1 = extractelement <8 x i16> %0, i32 1
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170130/7e3ec7a0/attachment.html>
More information about the llvm-commits
mailing list