diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-07-05 22:41:04 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-07-05 22:41:04 +0000 |
| commit | 7643b337a276e0fe3b6388885e14e87efa6ba48b (patch) | |
| tree | 685d5ebf9ffc133090201002846ead948d2f71f6 /llvm/lib | |
| parent | 39b37c0f9d3dc4a4f0ae1a2821fbe0304f02354b (diff) | |
| download | bcm5719-llvm-7643b337a276e0fe3b6388885e14e87efa6ba48b.tar.gz bcm5719-llvm-7643b337a276e0fe3b6388885e14e87efa6ba48b.zip | |
[X86][AVX2] Simplified BROADCAST combining to avoid repeated matching attempts
llvm-svn: 274583
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 4dad0c18cd7..90cbc479cc4 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -24781,18 +24781,15 @@ static bool matchUnaryVectorShuffle(MVT SrcVT, ArrayRef<int> Mask, // Attempt to match against broadcast-from-vector. if (Subtarget.hasAVX2()) { - for (MVT SVT : - {MVT::i8, MVT::i16, MVT::i32, MVT::i64, MVT::f32, MVT::f64}) { - if (FloatDomain != SVT.isFloatingPoint()) - continue; - - unsigned NumElts = SrcVT.getSizeInBits() / SVT.getSizeInBits(); - SmallVector<int, 64> BroadcastMask(NumElts, 0); - if (isTargetShuffleEquivalent(Mask, BroadcastMask)) { - Shuffle = X86ISD::VBROADCAST; - ShuffleVT = MVT::getVectorVT(SVT, NumElts); - return true; - } + unsigned NumElts = Mask.size(); + SmallVector<int, 64> BroadcastMask(NumElts, 0); + if (isTargetShuffleEquivalent(Mask, BroadcastMask)) { + unsigned EltSize = SrcVT.getSizeInBits() / NumElts; + ShuffleVT = FloatDomain ? MVT::getFloatingPointVT(EltSize) + : MVT::getIntegerVT(EltSize); + ShuffleVT = MVT::getVectorVT(ShuffleVT, NumElts); + Shuffle = X86ISD::VBROADCAST; + return true; } } |

