diff options
| author | Craig Topper <craig.topper@gmail.com> | 2016-06-11 03:27:42 +0000 | 
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2016-06-11 03:27:42 +0000 | 
| commit | 40abd1cc61660a292d05a59828d7c0e52a2575dc (patch) | |
| tree | a1bada4cf0c2db7c0ec8aec4eb6eac4ad1a952b4 /llvm/lib | |
| parent | b9b86fcfff63bac596714ed7979599714c436cf5 (diff) | |
| download | bcm5719-llvm-40abd1cc61660a292d05a59828d7c0e52a2575dc.tar.gz bcm5719-llvm-40abd1cc61660a292d05a59828d7c0e52a2575dc.zip  | |
[AVX512] Add support for lowering v32i16 shuffles with repeated lanes. This allows us to create 512-bit PSHUFLW/PSHUFHW.
llvm-svn: 272450
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 521008c50ca..b360cb8ccba 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -11827,6 +11827,17 @@ static SDValue lowerV32I16VectorShuffle(SDValue Op, SDValue V1, SDValue V2,            DL, MVT::v32i16, V1, V2, Mask, Subtarget, DAG))      return Rotate; +  if (isSingleInputShuffleMask(Mask)) { +    SmallVector<int, 8> RepeatedMask; +    if (is128BitLaneRepeatedShuffleMask(MVT::v32i16, Mask, RepeatedMask)) { +      // As this is a single-input shuffle, the repeated mask should be +      // a strictly valid v8i16 mask that we can pass through to the v8i16 +      // lowering to handle even the v32 case. +      return lowerV8I16GeneralSingleInputVectorShuffle( +          DL, MVT::v32i16, V1, RepeatedMask, Subtarget, DAG); +    } +  } +    return lowerVectorShuffleWithPERMV(DL, MVT::v32i16, Mask, V1, V2, DAG);  }  | 

