summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-07-05 22:41:04 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-07-05 22:41:04 +0000
commit7643b337a276e0fe3b6388885e14e87efa6ba48b (patch)
tree685d5ebf9ffc133090201002846ead948d2f71f6 /llvm/lib
parent39b37c0f9d3dc4a4f0ae1a2821fbe0304f02354b (diff)
downloadbcm5719-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.cpp21
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;
}
}
OpenPOWER on IntegriCloud