diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-10-21 17:07:50 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-10-21 17:07:50 +0000 |
commit | eb806d5f30fd4b2011e80b02a2049f37764a7236 (patch) | |
tree | 728b1825307ee76fee8e37bab05fe395e51c1340 /llvm/lib | |
parent | abc24fdb943f5b188c4b362551167d5cbe5de527 (diff) | |
download | bcm5719-llvm-eb806d5f30fd4b2011e80b02a2049f37764a7236.tar.gz bcm5719-llvm-eb806d5f30fd4b2011e80b02a2049f37764a7236.zip |
[X86][AVX] Enable lowerVectorShuffleAsLanePermuteAndPermute v16i16/v32i8 unary shuffle lowering
llvm-svn: 344868
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 8dc9f624554..9e431162083 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -14647,9 +14647,14 @@ static SDValue lowerV16I16VectorShuffle(const SDLoc &DL, ArrayRef<int> Mask, if (V2.isUndef()) { // There are no generalized cross-lane shuffle operations available on i16 // element types. - if (is128BitLaneCrossingShuffleMask(MVT::v16i16, Mask)) + if (is128BitLaneCrossingShuffleMask(MVT::v16i16, Mask)) { + if (SDValue V = lowerVectorShuffleAsLanePermuteAndPermute( + DL, MVT::v16i16, V1, V2, Mask, DAG, Subtarget)) + return V; + return lowerVectorShuffleAsLanePermuteAndBlend(DL, MVT::v16i16, V1, V2, Mask, DAG, Subtarget); + } SmallVector<int, 8> RepeatedMask; if (is128BitLaneRepeatedShuffleMask(MVT::v16i16, Mask, RepeatedMask)) { @@ -14742,9 +14747,14 @@ static SDValue lowerV32I8VectorShuffle(const SDLoc &DL, ArrayRef<int> Mask, // There are no generalized cross-lane shuffle operations available on i8 // element types. - if (V2.isUndef() && is128BitLaneCrossingShuffleMask(MVT::v32i8, Mask)) + if (V2.isUndef() && is128BitLaneCrossingShuffleMask(MVT::v32i8, Mask)) { + if (SDValue V = lowerVectorShuffleAsLanePermuteAndPermute( + DL, MVT::v32i8, V1, V2, Mask, DAG, Subtarget)) + return V; + return lowerVectorShuffleAsLanePermuteAndBlend(DL, MVT::v32i8, V1, V2, Mask, DAG, Subtarget); + } if (SDValue PSHUFB = lowerVectorShuffleWithPSHUFB( DL, MVT::v32i8, Mask, V1, V2, Zeroable, Subtarget, DAG)) |