From 2442068c12177df84c361ad809658dcab9a3237a Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Tue, 5 Jul 2016 22:41:04 +0000 Subject: [PATCH] [X86][AVX2] Simplified BROADCAST combining to avoid repeated matching attempts git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274583 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 4dad0c18cd7..90cbc479cc4 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -24781,18 +24781,15 @@ static bool matchUnaryVectorShuffle(MVT SrcVT, ArrayRef 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 BroadcastMask(NumElts, 0); - if (isTargetShuffleEquivalent(Mask, BroadcastMask)) { - Shuffle = X86ISD::VBROADCAST; - ShuffleVT = MVT::getVectorVT(SVT, NumElts); - return true; - } + unsigned NumElts = Mask.size(); + SmallVector 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; } } -- 2.49.0