[llvm-commits] [llvm] r136454 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/avx-vpermil.ll

Bruno Cardoso Lopes bruno.cardoso at gmail.com
Thu Jul 28 19:15:48 PDT 2011


I accidentally commited the changes that I had locally to make MOVHLPS
mask checks more strict. Since they are small, correct and easy to
understand, will not revert since I was about to commit it anyway.

On Thu, Jul 28, 2011 at 7:05 PM, Bruno Cardoso Lopes
<bruno.cardoso at gmail.com> wrote:
> Author: bruno
> Date: Thu Jul 28 21:05:28 2011
> New Revision: 136454
>
> URL: http://llvm.org/viewvc/llvm-project?rev=136454&view=rev
> Log:
> Fix two tests that I crashed in the previous commits. The mask elts
> on the second half must be reindexed.
>
> Modified:
>    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>    llvm/trunk/test/CodeGen/X86/avx-vpermil.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=136454&r1=136453&r2=136454&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Jul 28 21:05:28 2011
> @@ -3159,7 +3159,13 @@
>  /// isMOVHLPSMask - Return true if the specified VECTOR_SHUFFLE operand
>  /// specifies a shuffle of elements that is suitable for input to MOVHLPS.
>  bool X86::isMOVHLPSMask(ShuffleVectorSDNode *N) {
> -  if (N->getValueType(0).getVectorNumElements() != 4)
> +  EVT VT = N->getValueType(0);
> +  unsigned NumElems = VT.getVectorNumElements();
> +
> +  if (VT.getSizeInBits() != 128)
> +    return false;
> +
> +  if (NumElems != 4)
>     return false;
>
>   // Expect bit0 == 6, bit1 == 7, bit2 == 2, bit3 == 3
> @@ -3173,15 +3179,19 @@
>  /// of vector_shuffle v, v, <2, 3, 2, 3>, i.e. vector_shuffle v, undef,
>  /// <2, 3, 2, 3>
>  bool X86::isMOVHLPS_v_undef_Mask(ShuffleVectorSDNode *N) {
> -  unsigned NumElems = N->getValueType(0).getVectorNumElements();
> +  EVT VT = N->getValueType(0);
> +  unsigned NumElems = VT.getVectorNumElements();
> +
> +  if (VT.getSizeInBits() != 128)
> +    return false;
>
>   if (NumElems != 4)
>     return false;
>
>   return isUndefOrEqual(N->getMaskElt(0), 2) &&
> -  isUndefOrEqual(N->getMaskElt(1), 3) &&
> -  isUndefOrEqual(N->getMaskElt(2), 2) &&
> -  isUndefOrEqual(N->getMaskElt(3), 3);
> +         isUndefOrEqual(N->getMaskElt(1), 3) &&
> +         isUndefOrEqual(N->getMaskElt(2), 2) &&
> +         isUndefOrEqual(N->getMaskElt(3), 3);
>  }
>
>  /// isMOVLPMask - Return true if the specified VECTOR_SHUFFLE operand
> @@ -3501,6 +3511,8 @@
>       int MaskElt = SVOp->getMaskElt(i+(l*LaneSize));
>       if (MaskElt < 0)
>         continue;
> +      if (MaskElt >= LaneSize)
> +        MaskElt -= LaneSize;
>       Mask |= MaskElt << (i*2);
>     }
>   }
>
> Modified: llvm/trunk/test/CodeGen/X86/avx-vpermil.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-vpermil.ll?rev=136454&r1=136453&r2=136454&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/avx-vpermil.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/avx-vpermil.ll Thu Jul 28 21:05:28 2011
> @@ -31,7 +31,7 @@
>  ; vpermil should match masks like this: <u,3,1,2,4,u,5,6>. Check that the
>  ; target specific mask was correctly generated.
>  ; CHECK: vpermilps $-100
> -define <8 x float> @funcA(<8 x float> %a) nounwind uwtable readnone ssp {
> +define <8 x float> @funcE(<8 x float> %a) nounwind uwtable readnone ssp {
>  entry:
>   %shuffle = shufflevector <8 x float> %a, <8 x float> undef, <8 x i32> <i32 8, i32 3, i32 1, i32 2, i32 4, i32 8, i32 5, i32 6>
>   ret <8 x float> %shuffle
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc




More information about the llvm-commits mailing list