<div dir="ltr"><div>There have been quite a lot of follow on patches to this. A lot of them would need be reverted to get back to the old state. I can start trying to put that together.</div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 19, 2019 at 9:55 PM Eric Christopher via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">HI Craig,<br>
<br>
We're seeing a rather lot of performance regressions with this enabled<br>
by default. Is it possible to get it turned on under a command flag<br>
for the near term while we work on getting you a pile of testcases<br>
(some of it is Eigen and those will at least be easier as you have<br>
access to that source :)<br>
<br>
Thoughts?<br>
<br>
Thanks!<br>
<br>
-eric<br>
<br>
On Wed, Aug 7, 2019 at 9:23 AM Craig Topper via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Author: ctopper<br>
> Date: Wed Aug  7 09:24:26 2019<br>
> New Revision: 368183<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=368183&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=368183&view=rev</a><br>
> Log:<br>
> Recommit r367901 "[X86] Enable -x86-experimental-vector-widening-legalization by default."<br>
><br>
> The assert that caused this to be reverted should be fixed now.<br>
><br>
> Original commit message:<br>
><br>
> This patch changes our defualt legalization behavior for 16, 32, and<br>
> 64 bit vectors with i8/i16/i32/i64 scalar types from promotion to<br>
> widening. For example, v8i8 will now be widened to v16i8 instead of<br>
> promoted to v8i16. This keeps the elements widths the same and pads<br>
> with undef elements. We believe this is a better legalization strategy.<br>
> But it carries some issues due to the fragmented vector ISA. For<br>
> example, i8 shifts and multiplies get widened and then later have<br>
> to be promoted/split into vXi16 vectors.<br>
><br>
> This has the potential to cause regressions so we wanted to get<br>
> it in early in the 10.0 cycle so we have plenty of time to<br>
> address them.<br>
><br>
> Next steps will be to merge tests that explicitly test the command<br>
> line option. And then we can remove the option and its associated<br>
> code.<br>
><br>
> Removed:<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll<br>
> Modified:<br>
>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
>     llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp<br>
>     llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/arith.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/cast.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll<br>
>     llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll<br>
>     llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll<br>
>     llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll<br>
>     llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll<br>
>     llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll<br>
>     llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll<br>
>     llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll<br>
>     llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll<br>
>     llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll<br>
>     llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll<br>
>     llvm/trunk/test/CodeGen/X86/4char-promote.ll<br>
>     llvm/trunk/test/CodeGen/X86/and-load-fold.ll<br>
>     llvm/trunk/test/CodeGen/X86/atomic-unordered.ll<br>
>     llvm/trunk/test/CodeGen/X86/avg.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx-fp2int.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx2-conversions.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-cvt.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-ext.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-trunc.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll<br>
>     llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll<br>
>     llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll<br>
>     llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll<br>
>     llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll<br>
>     llvm/trunk/test/CodeGen/X86/bitreverse.ll<br>
>     llvm/trunk/test/CodeGen/X86/bswap-vector.ll<br>
>     llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll<br>
>     llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll<br>
>     llvm/trunk/test/CodeGen/X86/combine-or.ll<br>
>     llvm/trunk/test/CodeGen/X86/complex-fastmath.ll<br>
>     llvm/trunk/test/CodeGen/X86/cvtv2f32.ll<br>
>     llvm/trunk/test/CodeGen/X86/extract-concat.ll<br>
>     llvm/trunk/test/CodeGen/X86/extract-insert.ll<br>
>     llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll<br>
>     llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll<br>
>     llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll<br>
>     llvm/trunk/test/CodeGen/X86/known-bits.ll<br>
>     llvm/trunk/test/CodeGen/X86/load-partial.ll<br>
>     llvm/trunk/test/CodeGen/X86/lower-bitcast.ll<br>
>     llvm/trunk/test/CodeGen/X86/madd.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_compressstore.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_expandload.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_load.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_store.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll<br>
>     llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll<br>
>     llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll<br>
>     llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll<br>
>     llvm/trunk/test/CodeGen/X86/mmx-arith.ll<br>
>     llvm/trunk/test/CodeGen/X86/mmx-cvt.ll<br>
>     llvm/trunk/test/CodeGen/X86/mulvi32.ll<br>
>     llvm/trunk/test/CodeGen/X86/oddshuffles.ll<br>
>     llvm/trunk/test/CodeGen/X86/oddsubvector.ll<br>
>     llvm/trunk/test/CodeGen/X86/pmaddubsw.ll<br>
>     llvm/trunk/test/CodeGen/X86/pmulh.ll<br>
>     llvm/trunk/test/CodeGen/X86/pointer-vector.ll<br>
>     llvm/trunk/test/CodeGen/X86/pr14161.ll<br>
>     llvm/trunk/test/CodeGen/X86/pr35918.ll<br>
>     llvm/trunk/test/CodeGen/X86/pr40994.ll<br>
>     llvm/trunk/test/CodeGen/X86/promote-vec3.ll<br>
>     llvm/trunk/test/CodeGen/X86/promote.ll<br>
>     llvm/trunk/test/CodeGen/X86/psubus.ll<br>
>     llvm/trunk/test/CodeGen/X86/ret-mmx.ll<br>
>     llvm/trunk/test/CodeGen/X86/sad.ll<br>
>     llvm/trunk/test/CodeGen/X86/sadd_sat_vec.ll<br>
>     llvm/trunk/test/CodeGen/X86/scalar_widen_div.ll<br>
>     llvm/trunk/test/CodeGen/X86/select.ll<br>
>     llvm/trunk/test/CodeGen/X86/shift-combine.ll<br>
>     llvm/trunk/test/CodeGen/X86/shrink_vmul.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-strided-with-offset-128.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-strided-with-offset-256.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-strided-with-offset-512.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-128.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-256.ll<br>
>     llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll<br>
>     llvm/trunk/test/CodeGen/X86/slow-pmulld.ll<br>
>     llvm/trunk/test/CodeGen/X86/sse2-intrinsics-canonical.ll<br>
>     llvm/trunk/test/CodeGen/X86/sse2-vector-shifts.ll<br>
>     llvm/trunk/test/CodeGen/X86/ssub_sat_vec.ll<br>
>     llvm/trunk/test/CodeGen/X86/test-shrink-bug.ll<br>
>     llvm/trunk/test/CodeGen/X86/trunc-ext-ld-st.ll<br>
>     llvm/trunk/test/CodeGen/X86/trunc-subvector.ll<br>
>     llvm/trunk/test/CodeGen/X86/uadd_sat_vec.ll<br>
>     llvm/trunk/test/CodeGen/X86/unfold-masked-merge-vector-variablemask.ll<br>
>     llvm/trunk/test/CodeGen/X86/usub_sat_vec.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_cast2.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_cast3.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_ctbits.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_extract-mmx.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_fp_to_int.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_insert-5.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_insert-7.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_insert-mmx.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_int_to_fp.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_saddo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_smulo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_ssubo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_uaddo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_umulo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vec_usubo.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-blend.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-ext-logic.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-gep.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-half-conversions.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-idiv-v2i32.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-narrow-binop.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-add.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-and-bool.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-and.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-mul.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-or-bool.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-or.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-smax.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-smin.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-umax.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-umin.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-xor-bool.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-reduce-xor.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-sext.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shift-ashr-sub128.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shift-by-select-loop.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shift-lshr-sub128.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shift-shl-sub128.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v16.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-shuffle-combining.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-trunc-packus.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-trunc-ssat.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-trunc-usat.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-trunc.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-truncate-combine.ll<br>
>     llvm/trunk/test/CodeGen/X86/vector-zext.ll<br>
>     llvm/trunk/test/CodeGen/X86/vsel-cmp-load.ll<br>
>     llvm/trunk/test/CodeGen/X86/vselect-avx.ll<br>
>     llvm/trunk/test/CodeGen/X86/vselect.ll<br>
>     llvm/trunk/test/CodeGen/X86/vshift-4.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_arith-1.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_arith-2.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_arith-3.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_bitops-0.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-1.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-2.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-3.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-4.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-5.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_cast-6.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_compare-1.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_conv-1.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_conv-2.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_conv-3.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_conv-4.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_load-2.ll<br>
>     llvm/trunk/test/CodeGen/X86/widen_shuffle-1.ll<br>
>     llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll<br>
>     llvm/trunk/test/CodeGen/X86/x86-shifts.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/blending-shuffle.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/fptosi.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/fptoui.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/sitofp.ll<br>
>     llvm/trunk/test/Transforms/SLPVectorizer/X86/uitofp.ll<br>
><br>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)<br>
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Aug  7 09:24:26 2019<br>
> @@ -66,7 +66,7 @@ using namespace llvm;<br>
>  STATISTIC(NumTailCalls, "Number of tail calls");<br>
><br>
>  static cl::opt<bool> ExperimentalVectorWideningLegalization(<br>
> -    "x86-experimental-vector-widening-legalization", cl::init(false),<br>
> +    "x86-experimental-vector-widening-legalization", cl::init(true),<br>
>      cl::desc("Enable an experimental vector type legalization through widening "<br>
>               "rather than promotion."),<br>
>      cl::Hidden);<br>
> @@ -40453,8 +40453,7 @@ static SDValue combineStore(SDNode *N, S<br>
>    bool NoImplicitFloatOps = F.hasFnAttribute(Attribute::NoImplicitFloat);<br>
>    bool F64IsLegal =<br>
>        !Subtarget.useSoftFloat() && !NoImplicitFloatOps && Subtarget.hasSSE2();<br>
> -  if (((VT.isVector() && !VT.isFloatingPoint()) ||<br>
> -       (VT == MVT::i64 && F64IsLegal && !Subtarget.is64Bit())) &&<br>
> +  if ((VT == MVT::i64 && F64IsLegal && !Subtarget.is64Bit()) &&<br>
>        isa<LoadSDNode>(St->getValue()) &&<br>
>        !cast<LoadSDNode>(St->getValue())->isVolatile() &&<br>
>        St->getChain().hasOneUse() && !St->isVolatile()) {<br>
><br>
> Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp (original)<br>
> +++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp Wed Aug  7 09:24:26 2019<br>
> @@ -887,7 +887,7 @@ int X86TTIImpl::getArithmeticInstrCost(<br>
>  int X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index,<br>
>                                 Type *SubTp) {<br>
>    // 64-bit packed float vectors (v2f32) are widened to type v4f32.<br>
> -  // 64-bit packed integer vectors (v2i32) are promoted to type v2i64.<br>
> +  // 64-bit packed integer vectors (v2i32) are widened to type v4i32.<br>
>    std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, Tp);<br>
><br>
>    // Treat Transpose as 2-op shuffles - there's no difference in lowering.<br>
> @@ -2425,14 +2425,6 @@ int X86TTIImpl::getAddressComputationCos<br>
><br>
>  int X86TTIImpl::getArithmeticReductionCost(unsigned Opcode, Type *ValTy,<br>
>                                             bool IsPairwise) {<br>
> -<br>
> -  std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, ValTy);<br>
> -<br>
> -  MVT MTy = LT.second;<br>
> -<br>
> -  int ISD = TLI->InstructionOpcodeToISD(Opcode);<br>
> -  assert(ISD && "Invalid opcode");<br>
> -<br>
>    // We use the Intel Architecture Code Analyzer(IACA) to measure the throughput<br>
>    // and make it as the cost.<br>
><br>
> @@ -2440,7 +2432,10 @@ int X86TTIImpl::getArithmeticReductionCo<br>
>      { ISD::FADD,  MVT::v2f64,   2 },<br>
>      { ISD::FADD,  MVT::v4f32,   4 },<br>
>      { ISD::ADD,   MVT::v2i64,   2 },      // The data reported by the IACA tool is "1.6".<br>
> +    { ISD::ADD,   MVT::v2i32,   2 }, // FIXME: chosen to be less than v4i32.<br>
>      { ISD::ADD,   MVT::v4i32,   3 },      // The data reported by the IACA tool is "3.5".<br>
> +    { ISD::ADD,   MVT::v2i16,   3 }, // FIXME: chosen to be less than v4i16<br>
> +    { ISD::ADD,   MVT::v4i16,   4 }, // FIXME: chosen to be less than v8i16<br>
>      { ISD::ADD,   MVT::v8i16,   5 },<br>
>    };<br>
><br>
> @@ -2449,8 +2444,11 @@ int X86TTIImpl::getArithmeticReductionCo<br>
>      { ISD::FADD,  MVT::v4f64,   5 },<br>
>      { ISD::FADD,  MVT::v8f32,   7 },<br>
>      { ISD::ADD,   MVT::v2i64,   1 },      // The data reported by the IACA tool is "1.5".<br>
> +    { ISD::ADD,   MVT::v2i32,   2 }, // FIXME: chosen to be less than v4i32<br>
>      { ISD::ADD,   MVT::v4i32,   3 },      // The data reported by the IACA tool is "3.5".<br>
>      { ISD::ADD,   MVT::v4i64,   5 },      // The data reported by the IACA tool is "4.8".<br>
> +    { ISD::ADD,   MVT::v2i16,   3 }, // FIXME: chosen to be less than v4i16<br>
> +    { ISD::ADD,   MVT::v4i16,   4 }, // FIXME: chosen to be less than v8i16<br>
>      { ISD::ADD,   MVT::v8i16,   5 },<br>
>      { ISD::ADD,   MVT::v8i32,   5 },<br>
>    };<br>
> @@ -2459,7 +2457,10 @@ int X86TTIImpl::getArithmeticReductionCo<br>
>      { ISD::FADD,  MVT::v2f64,   2 },<br>
>      { ISD::FADD,  MVT::v4f32,   4 },<br>
>      { ISD::ADD,   MVT::v2i64,   2 },      // The data reported by the IACA tool is "1.6".<br>
> +    { ISD::ADD,   MVT::v2i32,   2 }, // FIXME: chosen to be less than v4i32<br>
>      { ISD::ADD,   MVT::v4i32,   3 },      // The data reported by the IACA tool is "3.3".<br>
> +    { ISD::ADD,   MVT::v2i16,   2 },      // The data reported by the IACA tool is "4.3".<br>
> +    { ISD::ADD,   MVT::v4i16,   3 },      // The data reported by the IACA tool is "4.3".<br>
>      { ISD::ADD,   MVT::v8i16,   4 },      // The data reported by the IACA tool is "4.3".<br>
>    };<br>
><br>
> @@ -2468,12 +2469,47 @@ int X86TTIImpl::getArithmeticReductionCo<br>
>      { ISD::FADD,  MVT::v4f64,   3 },<br>
>      { ISD::FADD,  MVT::v8f32,   4 },<br>
>      { ISD::ADD,   MVT::v2i64,   1 },      // The data reported by the IACA tool is "1.5".<br>
> +    { ISD::ADD,   MVT::v2i32,   2 }, // FIXME: chosen to be less than v4i32<br>
>      { ISD::ADD,   MVT::v4i32,   3 },      // The data reported by the IACA tool is "2.8".<br>
>      { ISD::ADD,   MVT::v4i64,   3 },<br>
> +    { ISD::ADD,   MVT::v2i16,   2 },      // The data reported by the IACA tool is "4.3".<br>
> +    { ISD::ADD,   MVT::v4i16,   3 },      // The data reported by the IACA tool is "4.3".<br>
>      { ISD::ADD,   MVT::v8i16,   4 },<br>
>      { ISD::ADD,   MVT::v8i32,   5 },<br>
>    };<br>
><br>
> +  int ISD = TLI->InstructionOpcodeToISD(Opcode);<br>
> +  assert(ISD && "Invalid opcode");<br>
> +<br>
> +  // Before legalizing the type, give a chance to look up illegal narrow types<br>
> +  // in the table.<br>
> +  // FIXME: Is there a better way to do this?<br>
> +  EVT VT = TLI->getValueType(DL, ValTy);<br>
> +  if (VT.isSimple()) {<br>
> +    MVT MTy = VT.getSimpleVT();<br>
> +    if (IsPairwise) {<br>
> +      if (ST->hasAVX())<br>
> +        if (const auto *Entry = CostTableLookup(AVX1CostTblPairWise, ISD, MTy))<br>
> +          return Entry->Cost;<br>
> +<br>
> +      if (ST->hasSSE42())<br>
> +        if (const auto *Entry = CostTableLookup(SSE42CostTblPairWise, ISD, MTy))<br>
> +          return Entry->Cost;<br>
> +    } else {<br>
> +      if (ST->hasAVX())<br>
> +        if (const auto *Entry = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy))<br>
> +          return Entry->Cost;<br>
> +<br>
> +      if (ST->hasSSE42())<br>
> +        if (const auto *Entry = CostTableLookup(SSE42CostTblNoPairWise, ISD, MTy))<br>
> +          return Entry->Cost;<br>
> +    }<br>
> +  }<br>
> +<br>
> +  std::pair<int, MVT> LT = TLI->getTypeLegalizationCost(DL, ValTy);<br>
> +<br>
> +  MVT MTy = LT.second;<br>
> +<br>
>    if (IsPairwise) {<br>
>      if (ST->hasAVX())<br>
>        if (const auto *Entry = CostTableLookup(AVX1CostTblPairWise, ISD, MTy))<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/alternate-shuffle-cost.ll Wed Aug  7 09:24:26 2019<br>
> @@ -18,9 +18,21 @@<br>
>  ; 64-bit packed float vectors (v2f32) are widened to type v4f32.<br>
><br>
>  define <2 x i32> @test_v2i32(<2 x i32> %a, <2 x i32> %b) {<br>
> -; CHECK-LABEL: 'test_v2i32'<br>
> -; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> -; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +; SSE2-LABEL: 'test_v2i32'<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; SSSE3-LABEL: 'test_v2i32'<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; SSE42-LABEL: 'test_v2i32'<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; AVX-LABEL: 'test_v2i32'<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
>  ;<br>
>  ; BTVER2-LABEL: 'test_v2i32'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3><br>
> @@ -56,9 +68,21 @@ define <2 x float> @test_v2f32(<2 x floa<br>
>  }<br>
><br>
>  define <2 x i32> @test_v2i32_2(<2 x i32> %a, <2 x i32> %b) {<br>
> -; CHECK-LABEL: 'test_v2i32_2'<br>
> -; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
> -; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +; SSE2-LABEL: 'test_v2i32_2'<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; SSSE3-LABEL: 'test_v2i32_2'<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; SSE42-LABEL: 'test_v2i32_2'<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
> +;<br>
> +; AVX-LABEL: 'test_v2i32_2'<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %1<br>
>  ;<br>
>  ; BTVER2-LABEL: 'test_v2i32_2'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1><br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/arith.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/arith.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/arith.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/arith.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/arith.ll Wed Aug  7 09:24:26 2019<br>
> @@ -1342,36 +1342,32 @@ define i32 @mul(i32 %arg) {<br>
>  ; A <2 x i64> vector multiply is implemented using<br>
>  ; 3 PMULUDQ and 2 PADDS and 4 shifts.<br>
>  define void @mul_2i32() {<br>
> -; SSE-LABEL: 'mul_2i32'<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> +; SSSE3-LABEL: 'mul_2i32'<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> +;<br>
> +; SSE42-LABEL: 'mul_2i32'<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX-LABEL: 'mul_2i32'<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %A0 = mul <2 x i32> undef, undef<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
> -; AVX512F-LABEL: 'mul_2i32'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> -;<br>
> -; AVX512BW-LABEL: 'mul_2i32'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> -;<br>
> -; AVX512DQ-LABEL: 'mul_2i32'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> +; AVX512-LABEL: 'mul_2i32'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; SLM-LABEL: 'mul_2i32'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %A0 = mul <2 x i32> undef, undef<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; GLM-LABEL: 'mul_2i32'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %A0 = mul <2 x i32> undef, undef<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; BTVER2-LABEL: 'mul_2i32'<br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A0 = mul <2 x i32> undef, undef<br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %A0 = mul <2 x i32> undef, undef<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>    %A0 = mul <2 x i32> undef, undef<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/cast.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/cast.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/cast.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/cast.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/cast.ll Wed Aug  7 09:24:26 2019<br>
> @@ -315,10 +315,10 @@ define void @sitofp4(<4 x i1> %a, <4 x i<br>
>  ; SSE-LABEL: 'sitofp4'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %A1 = sitofp <4 x i1> %a to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %A2 = sitofp <4 x i1> %a to <4 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %B1 = sitofp <4 x i8> %b to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %B2 = sitofp <4 x i8> %b to <4 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %C1 = sitofp <4 x i16> %c to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %C2 = sitofp <4 x i16> %c to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %B1 = sitofp <4 x i8> %b to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %B2 = sitofp <4 x i8> %b to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %C1 = sitofp <4 x i16> %c to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %C2 = sitofp <4 x i16> %c to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %D1 = sitofp <4 x i32> %d to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %D2 = sitofp <4 x i32> %d to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> @@ -359,7 +359,7 @@ define void @sitofp4(<4 x i1> %a, <4 x i<br>
>  define void @sitofp8(<8 x i1> %a, <8 x i8> %b, <8 x i16> %c, <8 x i32> %d) {<br>
>  ; SSE-LABEL: 'sitofp8'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %A1 = sitofp <8 x i1> %a to <8 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %B1 = sitofp <8 x i8> %b to <8 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %B1 = sitofp <8 x i8> %b to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %C1 = sitofp <8 x i16> %c to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %D1 = sitofp <8 x i32> %d to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> @@ -390,9 +390,9 @@ define void @uitofp4(<4 x i1> %a, <4 x i<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %A1 = uitofp <4 x i1> %a to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %A2 = uitofp <4 x i1> %a to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %B1 = uitofp <4 x i8> %b to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %B2 = uitofp <4 x i8> %b to <4 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %C1 = uitofp <4 x i16> %c to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %C2 = uitofp <4 x i16> %c to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %B2 = uitofp <4 x i8> %b to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %C1 = uitofp <4 x i16> %c to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %C2 = uitofp <4 x i16> %c to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %D1 = uitofp <4 x i32> %d to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %D2 = uitofp <4 x i32> %d to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> @@ -433,7 +433,7 @@ define void @uitofp4(<4 x i1> %a, <4 x i<br>
>  define void @uitofp8(<8 x i1> %a, <8 x i8> %b, <8 x i16> %c, <8 x i32> %d) {<br>
>  ; SSE-LABEL: 'uitofp8'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %A1 = uitofp <8 x i1> %a to <8 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %B1 = uitofp <8 x i8> %b to <8 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %B1 = uitofp <8 x i8> %b to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %C1 = uitofp <8 x i16> %c to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %D1 = uitofp <8 x i32> %d to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/fptosi.ll Wed Aug  7 09:24:26 2019<br>
> @@ -92,35 +92,28 @@ define i32 @fptosi_double_i32(i32 %arg)<br>
>  define i32 @fptosi_double_i16(i32 %arg) {<br>
>  ; SSE-LABEL: 'fptosi_double_i16'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX-LABEL: 'fptosi_double_i16'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'fptosi_double_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'fptosi_double_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'fptosi_double_i16'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptosi_double_i16'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptosi double undef to i16<br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptosi <2 x double> undef to <2 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptosi <4 x double> undef to <4 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I16 = fptosi <8 x double> undef to <8 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> @@ -143,29 +136,22 @@ define i32 @fptosi_double_i8(i32 %arg) {<br>
>  ; AVX-LABEL: 'fptosi_double_i8'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi double undef to i8<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I8 = fptosi <2 x double> undef to <2 x i8><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'fptosi_double_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi double undef to i8<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I8 = fptosi <2 x double> undef to <2 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'fptosi_double_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi double undef to i8<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I8 = fptosi <2 x double> undef to <2 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'fptosi_double_i8'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi double undef to i8<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I8 = fptosi <2 x double> undef to <2 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptosi_double_i8'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi double undef to i8<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I8 = fptosi <2 x double> undef to <2 x i8><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I8 = fptosi <4 x double> undef to <4 x i8><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I8 = fptosi <8 x double> undef to <8 x i8><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>    %I8 = fptosi double undef to i8<br>
> @@ -285,9 +271,9 @@ define i32 @fptosi_float_i16(i32 %arg) {<br>
>  define i32 @fptosi_float_i8(i32 %arg) {<br>
>  ; SSE-LABEL: 'fptosi_float_i8'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptosi float undef to i8<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptosi <4 x float> undef to <4 x i8><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I8 = fptosi <8 x float> undef to <8 x i8><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V16I8 = fptosi <16 x float> undef to <16 x i8><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I8 = fptosi <4 x float> undef to <4 x i8><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I8 = fptosi <8 x float> undef to <8 x i8><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 51 for instruction: %V16I8 = fptosi <16 x float> undef to <16 x i8><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX-LABEL: 'fptosi_float_i8'<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/fptoui.ll Wed Aug  7 09:24:26 2019<br>
> @@ -68,19 +68,12 @@ define i32 @fptoui_double_i32(i32 %arg)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %V8I32 = fptoui <8 x double> undef to <8 x i32><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'fptoui_double_i32'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I32 = fptoui double undef to i32<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I32 = fptoui <2 x double> undef to <2 x i32><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = fptoui <4 x double> undef to <4 x i32><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = fptoui <8 x double> undef to <8 x i32><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'fptoui_double_i32'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I32 = fptoui double undef to i32<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I32 = fptoui <2 x double> undef to <2 x i32><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = fptoui <4 x double> undef to <4 x i32><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = fptoui <8 x double> undef to <8 x i32><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'fptoui_double_i32'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I32 = fptoui double undef to i32<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I32 = fptoui <2 x double> undef to <2 x i32><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = fptoui <4 x double> undef to <4 x i32><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = fptoui <8 x double> undef to <8 x i32><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptoui_double_i32'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I32 = fptoui double undef to i32<br>
> @@ -106,30 +99,23 @@ define i32 @fptoui_double_i16(i32 %arg)<br>
>  ;<br>
>  ; AVX-LABEL: 'fptoui_double_i16'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui double undef to i16<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'fptoui_double_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui double undef to i16<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'fptoui_double_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui double undef to i16<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'fptoui_double_i16'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui double undef to i16<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptoui_double_i16'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui double undef to i16<br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I16 = fptoui <2 x double> undef to <2 x i16><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x double> undef to <4 x i16><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I16 = fptoui <8 x double> undef to <8 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>    %I16 = fptoui double undef to i16<br>
> @@ -154,19 +140,12 @@ define i32 @fptoui_double_i8(i32 %arg) {<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8I8 = fptoui <8 x double> undef to <8 x i8><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'fptoui_double_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui double undef to i8<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I8 = fptoui <2 x double> undef to <2 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptoui <4 x double> undef to <4 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I8 = fptoui <8 x double> undef to <8 x i8><br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'fptoui_double_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui double undef to i8<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I8 = fptoui <2 x double> undef to <2 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptoui <4 x double> undef to <4 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I8 = fptoui <8 x double> undef to <8 x i8><br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'fptoui_double_i8'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui double undef to i8<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2I8 = fptoui <2 x double> undef to <2 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = fptoui <4 x double> undef to <4 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I8 = fptoui <8 x double> undef to <8 x i8><br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptoui_double_i8'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui double undef to i8<br>
> @@ -277,7 +256,7 @@ define i32 @fptoui_float_i16(i32 %arg) {<br>
>  ;<br>
>  ; AVX-LABEL: 'fptoui_float_i16'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui float undef to i16<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I16 = fptoui <4 x float> undef to <4 x i16><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x float> undef to <4 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = fptoui <8 x float> undef to <8 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16I16 = fptoui <16 x float> undef to <16 x i16><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> @@ -291,7 +270,7 @@ define i32 @fptoui_float_i16(i32 %arg) {<br>
>  ;<br>
>  ; BTVER2-LABEL: 'fptoui_float_i16'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I16 = fptoui float undef to i16<br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I16 = fptoui <4 x float> undef to <4 x i16><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = fptoui <4 x float> undef to <4 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = fptoui <8 x float> undef to <8 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16I16 = fptoui <16 x float> undef to <16 x i16><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> @@ -314,8 +293,8 @@ define i32 @fptoui_float_i8(i32 %arg) {<br>
>  ; AVX-LABEL: 'fptoui_float_i8'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui float undef to i8<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I8 = fptoui <4 x float> undef to <4 x i8><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = fptoui <8 x float> undef to <8 x i8><br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16I8 = fptoui <16 x float> undef to <16 x i8><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V8I8 = fptoui <8 x float> undef to <8 x i8><br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 49 for instruction: %V16I8 = fptoui <16 x float> undef to <16 x i8><br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'fptoui_float_i8'<br>
> @@ -328,8 +307,8 @@ define i32 @fptoui_float_i8(i32 %arg) {<br>
>  ; BTVER2-LABEL: 'fptoui_float_i8'<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %I8 = fptoui float undef to i8<br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V4I8 = fptoui <4 x float> undef to <4 x i8><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = fptoui <8 x float> undef to <8 x i8><br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16I8 = fptoui <16 x float> undef to <16 x i8><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V8I8 = fptoui <8 x float> undef to <8 x i8><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 49 for instruction: %V16I8 = fptoui <16 x float> undef to <16 x i8><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>    %I8 = fptoui float undef to i8<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/masked-intrinsic-cost.ll Wed Aug  7 09:24:26 2019<br>
> @@ -52,7 +52,7 @@ define i32 @masked_load() {<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16I32 = call <16 x i32> @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* undef, i32 1, <16 x i1> undef, <16 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8I32 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* undef, i32 1, <8 x i1> undef, <8 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4I32 = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* undef, i32 1, <4 x i1> undef, <4 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %V32I16 = call <32 x i16> @llvm.masked.load.v32i16.p0v32i16(<32 x i16>* undef, i32 1, <32 x i1> undef, <32 x i16> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %V16I16 = call <16 x i16> @llvm.masked.load.v16i16.p0v16i16(<16 x i16>* undef, i32 1, <16 x i1> undef, <16 x i16> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V8I16 = call <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>* undef, i32 1, <8 x i1> undef, <8 x i16> undef)<br>
> @@ -79,7 +79,7 @@ define i32 @masked_load() {<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = call <16 x i32> @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* undef, i32 1, <16 x i1> undef, <16 x i32> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* undef, i32 1, <8 x i1> undef, <8 x i32> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* undef, i32 1, <4 x i1> undef, <4 x i32> undef)<br>
> -; KNL-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
> +; KNL-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %V32I16 = call <32 x i16> @llvm.masked.load.v32i16.p0v32i16(<32 x i16>* undef, i32 1, <32 x i1> undef, <32 x i16> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %V16I16 = call <16 x i16> @llvm.masked.load.v16i16.p0v16i16(<16 x i16>* undef, i32 1, <16 x i1> undef, <16 x i16> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V8I16 = call <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>* undef, i32 1, <8 x i1> undef, <8 x i16> undef)<br>
> @@ -106,15 +106,15 @@ define i32 @masked_load() {<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = call <16 x i32> @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* undef, i32 1, <16 x i1> undef, <16 x i32> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* undef, i32 1, <8 x i1> undef, <8 x i32> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* undef, i32 1, <4 x i1> undef, <4 x i32> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V2I32 = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* undef, i32 1, <2 x i1> undef, <2 x i32> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = call <32 x i16> @llvm.masked.load.v32i16.p0v32i16(<32 x i16>* undef, i32 1, <32 x i1> undef, <32 x i16> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = call <16 x i16> @llvm.masked.load.v16i16.p0v16i16(<16 x i16>* undef, i32 1, <16 x i1> undef, <16 x i16> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = call <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>* undef, i32 1, <8 x i1> undef, <8 x i16> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4I16 = call <4 x i16> @llvm.masked.load.v4i16.p0v4i16(<4 x i16>* undef, i32 1, <4 x i1> undef, <4 x i16> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V4I16 = call <4 x i16> @llvm.masked.load.v4i16.p0v4i16(<4 x i16>* undef, i32 1, <4 x i1> undef, <4 x i16> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = call <64 x i8> @llvm.masked.load.v64i8.p0v64i8(<64 x i8>* undef, i32 1, <64 x i1> undef, <64 x i8> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = call <32 x i8> @llvm.masked.load.v32i8.p0v32i8(<32 x i8>* undef, i32 1, <32 x i1> undef, <32 x i8> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = call <16 x i8> @llvm.masked.load.v16i8.p0v16i8(<16 x i8>* undef, i32 1, <16 x i1> undef, <16 x i8> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8I8 = call <8 x i8> @llvm.masked.load.v8i8.p0v8i8(<8 x i8>* undef, i32 1, <8 x i1> undef, <8 x i8> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V8I8 = call <8 x i8> @llvm.masked.load.v8i8.p0v8i8(<8 x i8>* undef, i32 1, <8 x i1> undef, <8 x i8> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 0<br>
>  ;<br>
>    %V8F64 = call <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>* undef, i32 1, <8 x i1> undef, <8 x double> undef)<br>
> @@ -194,7 +194,7 @@ define i32 @masked_store() {<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: call void @llvm.masked.store.v16i32.p0v16i32(<16 x i32> undef, <16 x i32>* undef, i32 1, <16 x i1> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> undef, <8 x i32>* undef, i32 1, <8 x i1> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> undef, <4 x i32>* undef, i32 1, <4 x i1> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: call void @llvm.masked.store.v32i16.p0v32i16(<32 x i16> undef, <32 x i16>* undef, i32 1, <32 x i1> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> undef, <16 x i16>* undef, i32 1, <16 x i1> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> undef, <8 x i16>* undef, i32 1, <8 x i1> undef)<br>
> @@ -221,7 +221,7 @@ define i32 @masked_store() {<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v16i32.p0v16i32(<16 x i32> undef, <16 x i32>* undef, i32 1, <16 x i1> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> undef, <8 x i32>* undef, i32 1, <8 x i1> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> undef, <4 x i32>* undef, i32 1, <4 x i1> undef)<br>
> -; KNL-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
> +; KNL-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: call void @llvm.masked.store.v32i16.p0v32i16(<32 x i16> undef, <32 x i16>* undef, i32 1, <32 x i1> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> undef, <16 x i16>* undef, i32 1, <16 x i1> undef)<br>
>  ; KNL-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> undef, <8 x i16>* undef, i32 1, <8 x i1> undef)<br>
> @@ -248,15 +248,15 @@ define i32 @masked_store() {<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v16i32.p0v16i32(<16 x i32> undef, <16 x i32>* undef, i32 1, <16 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> undef, <8 x i32>* undef, i32 1, <8 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> undef, <4 x i32>* undef, i32 1, <4 x i1> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> undef, <2 x i32>* undef, i32 1, <2 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v32i16.p0v32i16(<32 x i16> undef, <32 x i16>* undef, i32 1, <32 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> undef, <16 x i16>* undef, i32 1, <16 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> undef, <8 x i16>* undef, i32 1, <8 x i1> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> undef, <4 x i16>* undef, i32 1, <4 x i1> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> undef, <4 x i16>* undef, i32 1, <4 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v64i8.p0v64i8(<64 x i8> undef, <64 x i8>* undef, i32 1, <64 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v32i8.p0v32i8(<32 x i8> undef, <32 x i8>* undef, i32 1, <32 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> undef, <16 x i8>* undef, i32 1, <16 x i1> undef)<br>
> -; SKX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> undef, <8 x i8>* undef, i32 1, <8 x i1> undef)<br>
> +; SKX-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> undef, <8 x i8>* undef, i32 1, <8 x i1> undef)<br>
>  ; SKX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 0<br>
>  ;<br>
>    call void @llvm.masked.store.v8f64.p0v8f64(<8 x double> undef, <8 x double>* undef, i32 1, <8 x i1> undef)<br>
> @@ -960,15 +960,10 @@ define <8 x float> @test4(<8 x i32> %tri<br>
>  }<br>
><br>
>  define void @test5(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %val) {<br>
> -; SSE2-LABEL: 'test5'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: call void @llvm.masked.store.v2f32.p0v2f32(<2 x float> %val, <2 x float>* %addr, i32 4, <2 x i1> %mask)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> -;<br>
> -; SSE42-LABEL: 'test5'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: call void @llvm.masked.store.v2f32.p0v2f32(<2 x float> %val, <2 x float>* %addr, i32 4, <2 x i1> %mask)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> +; SSE-LABEL: 'test5'<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: call void @llvm.masked.store.v2f32.p0v2f32(<2 x float> %val, <2 x float>* %addr, i32 4, <2 x i1> %mask)<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX-LABEL: 'test5'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> @@ -986,24 +981,19 @@ define void @test5(<2 x i32> %trigger, <<br>
>  }<br>
><br>
>  define void @test6(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %val) {<br>
> -; SSE2-LABEL: 'test6'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> -;<br>
> -; SSE42-LABEL: 'test6'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
> +; SSE-LABEL: 'test6'<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX-LABEL: 'test6'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX512-LABEL: 'test6'<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> @@ -1012,15 +1002,10 @@ define void @test6(<2 x i32> %trigger, <<br>
>  }<br>
><br>
>  define <2 x float> @test7(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %dst) {<br>
> -; SSE2-LABEL: 'test7'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x float> %res<br>
> -;<br>
> -; SSE42-LABEL: 'test7'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x float> %res<br>
> +; SSE-LABEL: 'test7'<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x float> %res<br>
>  ;<br>
>  ; AVX-LABEL: 'test7'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> @@ -1038,24 +1023,19 @@ define <2 x float> @test7(<2 x i32> %tri<br>
>  }<br>
><br>
>  define <2 x i32> @test8(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %dst) {<br>
> -; SSE2-LABEL: 'test8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
> -;<br>
> -; SSE42-LABEL: 'test8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
> +; SSE-LABEL: 'test8'<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
>  ;<br>
>  ; AVX-LABEL: 'test8'<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
>  ;<br>
>  ; AVX512-LABEL: 'test8'<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
>  ;<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
><br>
> Removed: llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll?rev=368182&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll?rev=368182&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-add-widen.ll (removed)<br>
> @@ -1,307 +0,0 @@<br>
> -; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,SSE,SSE2<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+ssse3 | FileCheck %s --check-prefixes=CHECK,SSE,SSSE3<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+sse4.2 | FileCheck %s --check-prefixes=CHECK,SSE,SSE42<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+avx | FileCheck %s --check-prefixes=CHECK,AVX,AVX1<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+avx2 | FileCheck %s --check-prefixes=CHECK,AVX,AVX2<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,AVX512,AVX512F<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=CHECK,AVX512,AVX512BW<br>
> -; RUN: opt < %s -x86-experimental-vector-widening-legalization -cost-model -mtriple=x86_64-apple-darwin -analyze -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,AVX512,AVX512DQ<br>
> -<br>
> -define i32 @reduce_i64(i32 %arg) {<br>
> -; SSE2-LABEL: 'reduce_i64'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %V1 = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSSE3-LABEL: 'reduce_i64'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %V1 = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSE42-LABEL: 'reduce_i64'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %V1 = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX-LABEL: 'reduce_i64'<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %V1 = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512-LABEL: 'reduce_i64'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %V1 = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -  %V1  = call i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64> undef)<br>
> -  %V2  = call i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64> undef)<br>
> -  %V4  = call i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64> undef)<br>
> -  %V8  = call i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64> undef)<br>
> -  %V16 = call i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64> undef)<br>
> -  ret i32 undef<br>
> -}<br>
> -<br>
> -define i32 @reduce_i32(i32 %arg) {<br>
> -; SSE2-LABEL: 'reduce_i32'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSSE3-LABEL: 'reduce_i32'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX-LABEL: 'reduce_i32'<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -  %V2  = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> -  %V4  = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
> -  %V8  = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
> -  %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> -  %V32 = call i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32> undef)<br>
> -  ret i32 undef<br>
> -}<br>
> -<br>
> -define i32 @reduce_i16(i32 %arg) {<br>
> -; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 49 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 53 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -  %V2  = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -  %V4  = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> -  %V8  = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
> -  %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> -  %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> -  %V64 = call i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16> undef)<br>
> -  ret i32 undef<br>
> -}<br>
> -<br>
> -define i32 @reduce_i8(i32 %arg) {<br>
> -; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 65 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 73 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 55 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -  %V2   = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -  %V4   = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -  %V8   = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> -  %V16  = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
> -  %V32  = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
> -  %V64  = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> -  %V128 = call i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8> undef)<br>
> -  ret i32 undef<br>
> -}<br>
> -<br>
> -declare i64 @llvm.experimental.vector.reduce.add.v1i64(<1 x i64>)<br>
> -declare i64 @llvm.experimental.vector.reduce.add.v2i64(<2 x i64>)<br>
> -declare i64 @llvm.experimental.vector.reduce.add.v4i64(<4 x i64>)<br>
> -declare i64 @llvm.experimental.vector.reduce.add.v8i64(<8 x i64>)<br>
> -declare i64 @llvm.experimental.vector.reduce.add.v16i64(<16 x i64>)<br>
> -<br>
> -declare i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32>)<br>
> -declare i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32>)<br>
> -declare i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32>)<br>
> -declare i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32>)<br>
> -declare i32 @llvm.experimental.vector.reduce.add.v32i32(<32 x i32>)<br>
> -<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16>)<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16>)<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16>)<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16>)<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16>)<br>
> -declare i16 @llvm.experimental.vector.reduce.add.v64i16(<64 x i16>)<br>
> -<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8>)<br>
> -declare i8 @llvm.experimental.vector.reduce.add.v128i8(<128 x i8>)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-add.ll Wed Aug  7 09:24:26 2019<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX-LABEL: 'reduce_i32'<br>
> -; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> +; AVX-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.add.v2i32(<2 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.add.v8i32(<8 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.add.v16i32(<16 x i32> undef)<br>
> @@ -108,8 +108,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.add.v32i16(<32 x i16> undef)<br>
> @@ -135,7 +135,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 49 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> @@ -144,7 +144,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> @@ -153,7 +153,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> @@ -162,7 +162,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> @@ -171,7 +171,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.add.v2i16(<2 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.add.v4i16(<4 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.add.v8i16(<8 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.add.v16i16(<16 x i16> undef)<br>
> @@ -190,9 +190,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -210,9 +210,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -220,9 +220,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 65 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -230,9 +230,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -240,9 +240,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -250,9 +250,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 55 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
> @@ -260,9 +260,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.add.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.add.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.add.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.add.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.add.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.add.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-and.ll Wed Aug  7 09:24:26 2019<br>
> @@ -92,8 +92,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.and.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.and.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.and.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.and.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.and.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.and.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.and.v32i16(<32 x i16> undef)<br>
> @@ -174,9 +174,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.and.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.and.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.and.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.and.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.and.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.and.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.and.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.and.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.and.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-mul.ll Wed Aug  7 09:24:26 2019<br>
> @@ -67,7 +67,7 @@ define i32 @reduce_i64(i32 %arg) {<br>
><br>
>  define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i32'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> @@ -75,7 +75,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i32'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> @@ -99,36 +99,20 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.mul.v32i32(<32 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> -; AVX512F-LABEL: 'reduce_i32'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.mul.v32i32(<32 x i32> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512BW-LABEL: 'reduce_i32'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.mul.v32i32(<32 x i32> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> -;<br>
> -; AVX512DQ-LABEL: 'reduce_i32'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.mul.v32i32(<32 x i32> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> +; AVX512-LABEL: 'reduce_i32'<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.mul.v8i32(<8 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.mul.v16i32(<16 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i32 @llvm.experimental.vector.reduce.mul.v32i32(<32 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>    %V2  = call i32 @llvm.experimental.vector.reduce.mul.v2i32(<2 x i32> undef)<br>
>    %V4  = call i32 @llvm.experimental.vector.reduce.mul.v4i32(<4 x i32> undef)<br>
> @@ -140,8 +124,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.mul.v32i16(<32 x i16> undef)<br>
> @@ -149,8 +133,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.mul.v32i16(<32 x i16> undef)<br>
> @@ -158,8 +142,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.mul.v32i16(<32 x i16> undef)<br>
> @@ -167,8 +151,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 49 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 53 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.mul.v32i16(<32 x i16> undef)<br>
> @@ -176,8 +160,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.mul.v32i16(<32 x i16> undef)<br>
> @@ -185,7 +169,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
> @@ -194,7 +178,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.mul.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.mul.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.mul.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.mul.v16i16(<16 x i16> undef)<br>
> @@ -222,9 +206,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 67 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 89 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 101 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 125 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -232,9 +216,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 53 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 65 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 89 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -242,9 +226,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 53 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 65 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 89 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -252,9 +236,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 53 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 171 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 197 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -262,9 +246,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 106 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 123 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -272,9 +256,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 86 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 99 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -282,9 +266,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 115 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
> @@ -292,9 +276,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.mul.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.mul.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.mul.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.mul.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 86 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.mul.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 99 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.mul.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-or.ll Wed Aug  7 09:24:26 2019<br>
> @@ -92,8 +92,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.or.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.or.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.or.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.or.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.or.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.or.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.or.v32i16(<32 x i16> undef)<br>
> @@ -174,9 +174,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.or.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.or.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.or.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.or.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.or.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.or.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.or.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.or.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.or.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-smax.ll Wed Aug  7 09:24:26 2019<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smax.v8i32(<8 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smax.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smax.v8i32(<8 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smax.v16i32(<16 x i32> undef)<br>
> @@ -99,7 +99,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smax.v8i32(<8 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smax.v16i32(<16 x i32> undef)<br>
> @@ -107,7 +107,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smax.v2i32(<2 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smax.v8i32(<8 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smax.v16i32(<16 x i32> undef)<br>
> @@ -124,8 +124,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.smax.v32i16(<32 x i16> undef)<br>
> @@ -133,8 +133,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.smax.v32i16(<32 x i16> undef)<br>
> @@ -142,7 +142,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -151,7 +151,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -160,7 +160,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -169,7 +169,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -178,7 +178,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -187,7 +187,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smax.v2i16(<2 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smax.v4i16(<4 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smax.v8i16(<8 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smax.v16i16(<16 x i16> undef)<br>
> @@ -206,8 +206,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
> @@ -216,8 +216,8 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
> @@ -226,9 +226,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
> @@ -236,9 +236,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
> @@ -246,9 +246,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
> @@ -256,9 +256,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
> @@ -266,9 +266,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
> @@ -276,9 +276,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smax.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smax.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smax.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smax.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smax.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-smin.ll Wed Aug  7 09:24:26 2019<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smin.v8i32(<8 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smin.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smin.v8i32(<8 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smin.v16i32(<16 x i32> undef)<br>
> @@ -99,7 +99,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smin.v8i32(<8 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smin.v16i32(<16 x i32> undef)<br>
> @@ -107,7 +107,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.smin.v2i32(<2 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.smin.v8i32(<8 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.smin.v16i32(<16 x i32> undef)<br>
> @@ -124,8 +124,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.smin.v32i16(<32 x i16> undef)<br>
> @@ -133,8 +133,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.smin.v32i16(<32 x i16> undef)<br>
> @@ -142,7 +142,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -151,7 +151,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -160,7 +160,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -169,7 +169,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -178,7 +178,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -187,7 +187,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.smin.v2i16(<2 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.smin.v4i16(<4 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.smin.v8i16(<8 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.smin.v16i16(<16 x i16> undef)<br>
> @@ -206,8 +206,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
> @@ -216,8 +216,8 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
> @@ -226,9 +226,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
> @@ -236,9 +236,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
> @@ -246,9 +246,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
> @@ -256,9 +256,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
> @@ -266,9 +266,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
> @@ -276,9 +276,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.smin.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.smin.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.smin.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.smin.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.smin.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.smin.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-umax.ll Wed Aug  7 09:24:26 2019<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umax.v4i32(<4 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umax.v8i32(<8 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umax.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umax.v4i32(<4 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umax.v8i32(<8 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umax.v16i32(<16 x i32> undef)<br>
> @@ -99,7 +99,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umax.v4i32(<4 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umax.v8i32(<8 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umax.v16i32(<16 x i32> undef)<br>
> @@ -107,7 +107,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umax.v2i32(<2 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umax.v4i32(<4 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umax.v8i32(<8 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umax.v16i32(<16 x i32> undef)<br>
> @@ -124,8 +124,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.umax.v32i16(<32 x i16> undef)<br>
> @@ -133,8 +133,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.umax.v32i16(<32 x i16> undef)<br>
> @@ -142,7 +142,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -151,7 +151,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -160,7 +160,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -169,7 +169,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -178,7 +178,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -187,7 +187,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umax.v2i16(<2 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umax.v4i16(<4 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umax.v8i16(<8 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umax.v16i16(<16 x i16> undef)<br>
> @@ -206,9 +206,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -216,9 +216,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -226,9 +226,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -236,9 +236,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -246,9 +246,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -256,9 +256,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -266,9 +266,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
> @@ -276,9 +276,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umax.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umax.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umax.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umax.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umax.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umax.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-umin.ll Wed Aug  7 09:24:26 2019<br>
> @@ -83,7 +83,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i32'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umin.v4i32(<4 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umin.v8i32(<8 x i32> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umin.v16i32(<16 x i32> undef)<br>
> @@ -91,7 +91,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umin.v4i32(<4 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umin.v8i32(<8 x i32> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umin.v16i32(<16 x i32> undef)<br>
> @@ -99,7 +99,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umin.v4i32(<4 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umin.v8i32(<8 x i32> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umin.v16i32(<16 x i32> undef)<br>
> @@ -107,7 +107,7 @@ define i32 @reduce_i32(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512-LABEL: 'reduce_i32'<br>
> -; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
> +; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i32 @llvm.experimental.vector.reduce.umin.v2i32(<2 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i32 @llvm.experimental.vector.reduce.umin.v4i32(<4 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i32 @llvm.experimental.vector.reduce.umin.v8i32(<8 x i32> undef)<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i32 @llvm.experimental.vector.reduce.umin.v16i32(<16 x i32> undef)<br>
> @@ -124,8 +124,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.umin.v32i16(<32 x i16> undef)<br>
> @@ -133,8 +133,8 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i16'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.umin.v32i16(<32 x i16> undef)<br>
> @@ -142,7 +142,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i16'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -151,7 +151,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i16'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -160,7 +160,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i16'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -169,7 +169,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i16'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -178,7 +178,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i16'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -187,7 +187,7 @@ define i32 @reduce_i16(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i16'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.umin.v2i16(<2 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.umin.v4i16(<4 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.umin.v8i16(<8 x i16> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.umin.v16i16(<16 x i16> undef)<br>
> @@ -206,9 +206,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -216,9 +216,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSSE3-LABEL: 'reduce_i8'<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; SSSE3-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -226,9 +226,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; SSE42-LABEL: 'reduce_i8'<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -236,9 +236,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX1-LABEL: 'reduce_i8'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -246,9 +246,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX2-LABEL: 'reduce_i8'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -256,9 +256,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512F-LABEL: 'reduce_i8'<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -266,9 +266,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512BW-LABEL: 'reduce_i8'<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
> @@ -276,9 +276,9 @@ define i32 @reduce_i8(i32 %arg) {<br>
>  ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX512DQ-LABEL: 'reduce_i8'<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> -; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.umin.v2i8(<2 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.umin.v4i8(<4 x i8> undef)<br>
> +; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.umin.v8i8(<8 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.umin.v16i8(<16 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.umin.v32i8(<32 x i8> undef)<br>
>  ; AVX512DQ-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.umin.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/reduce-xor.ll Wed Aug  7 09:24:26 2019<br>
> @@ -92,8 +92,8 @@ define i32 @reduce_i32(i32 %arg) {<br>
><br>
>  define i32 @reduce_i16(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i16'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.xor.v2i16(<2 x i16> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.xor.v4i16(<4 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.experimental.vector.reduce.xor.v2i16(<2 x i16> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V4 = call i16 @llvm.experimental.vector.reduce.xor.v4i16(<4 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i16 @llvm.experimental.vector.reduce.xor.v8i16(<8 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %V16 = call i16 @llvm.experimental.vector.reduce.xor.v16i16(<16 x i16> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V32 = call i16 @llvm.experimental.vector.reduce.xor.v32i16(<32 x i16> undef)<br>
> @@ -174,9 +174,9 @@ define i32 @reduce_i16(i32 %arg) {<br>
><br>
>  define i32 @reduce_i8(i32 %arg) {<br>
>  ; SSE2-LABEL: 'reduce_i8'<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.xor.v2i8(<2 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.xor.v4i8(<4 x i8> undef)<br>
> -; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.xor.v8i8(<8 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V2 = call i8 @llvm.experimental.vector.reduce.xor.v2i8(<2 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %V4 = call i8 @llvm.experimental.vector.reduce.xor.v4i8(<4 x i8> undef)<br>
> +; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %V8 = call i8 @llvm.experimental.vector.reduce.xor.v8i8(<8 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 45 for instruction: %V16 = call i8 @llvm.experimental.vector.reduce.xor.v16i8(<16 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %V32 = call i8 @llvm.experimental.vector.reduce.xor.v32i8(<32 x i8> undef)<br>
>  ; SSE2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i8 @llvm.experimental.vector.reduce.xor.v64i8(<64 x i8> undef)<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/shuffle-transpose.ll Wed Aug  7 09:24:26 2019<br>
> @@ -123,21 +123,21 @@ define void @test_vXf32(<2 x float> %a64<br>
><br>
>  define void @test_vXi32(<2 x i32> %a64, <2 x i32> %b64, <4 x i32> %a128, <4 x i32> %b128, <8 x i32> %a256, <8 x i32> %b256, <16 x i32> %a512, <16 x i32> %b512) {<br>
>  ; SSE-LABEL: 'test_vXi32'<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = shufflevector <4 x i32> %a128, <4 x i32> %b128, <4 x i32> <i32 0, i32 4, i32 2, i32 6><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V256 = shufflevector <8 x i32> %a256, <8 x i32> %b256, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %V512 = shufflevector <16 x i32> %a512, <16 x i32> %b512, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX1-LABEL: 'test_vXi32'<br>
> -; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
> +; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = shufflevector <4 x i32> %a128, <4 x i32> %b128, <4 x i32> <i32 0, i32 4, i32 2, i32 6><br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V256 = shufflevector <8 x i32> %a256, <8 x i32> %b256, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14><br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V512 = shufflevector <16 x i32> %a512, <16 x i32> %b512, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30><br>
>  ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; AVX2-LABEL: 'test_vXi32'<br>
> -; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
> +; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = shufflevector <4 x i32> %a128, <4 x i32> %b128, <4 x i32> <i32 0, i32 4, i32 2, i32 6><br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V256 = shufflevector <8 x i32> %a256, <8 x i32> %b256, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14><br>
>  ; AVX2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %V512 = shufflevector <16 x i32> %a512, <16 x i32> %b512, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30><br>
> @@ -151,7 +151,7 @@ define void @test_vXi32(<2 x i32> %a64,<br>
>  ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void<br>
>  ;<br>
>  ; BTVER2-LABEL: 'test_vXi32'<br>
> -; BTVER2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
> +; BTVER2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = shufflevector <2 x i32> %a64, <2 x i32> %b64, <2 x i32> <i32 0, i32 2><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = shufflevector <4 x i32> %a128, <4 x i32> %b128, <4 x i32> <i32 0, i32 4, i32 2, i32 6><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V256 = shufflevector <8 x i32> %a256, <8 x i32> %b256, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14><br>
>  ; BTVER2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V512 = shufflevector <16 x i32> %a512, <16 x i32> %b512, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30><br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll Wed Aug  7 09:24:26 2019<br>
> @@ -13,9 +13,9 @@<br>
>  define i32 @sitofp_i8_double() {<br>
>  ; SSE-LABEL: 'sitofp_i8_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i8_f64 = sitofp i8 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cvt_v2i8_v2f64 = sitofp <2 x i8> undef to <2 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i8_v4f64 = sitofp <4 x i8> undef to <4 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i8_v8f64 = sitofp <8 x i8> undef to <8 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v2i8_v2f64 = sitofp <2 x i8> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v4i8_v4f64 = sitofp <4 x i8> undef to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v8i8_v8f64 = sitofp <8 x i8> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX-LABEL: 'sitofp_i8_double'<br>
> @@ -49,8 +49,8 @@ define i32 @sitofp_i8_double() {<br>
>  define i32 @sitofp_i16_double() {<br>
>  ; SSE-LABEL: 'sitofp_i16_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i16_f64 = sitofp i16 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cvt_v2i16_v2f64 = sitofp <2 x i16> undef to <2 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i16_v4f64 = sitofp <4 x i16> undef to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v2i16_v2f64 = sitofp <2 x i16> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v4i16_v4f64 = sitofp <4 x i16> undef to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i16_v8f64 = sitofp <8 x i16> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> @@ -85,7 +85,7 @@ define i32 @sitofp_i16_double() {<br>
>  define i32 @sitofp_i32_double() {<br>
>  ; SSE-LABEL: 'sitofp_i32_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i32_f64 = sitofp i32 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cvt_v2i32_v2f64 = sitofp <2 x i32> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v2i32_v2f64 = sitofp <2 x i32> undef to <2 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i32_v4f64 = sitofp <4 x i32> undef to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i32_v8f64 = sitofp <8 x i32> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> @@ -164,8 +164,8 @@ define i32 @sitofp_i64_double() {<br>
>  define i32 @sitofp_i8_float() {<br>
>  ; SSE-LABEL: 'sitofp_i8_float'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i8_f32 = sitofp i8 undef to float<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %cvt_v4i8_v4f32 = sitofp <4 x i8> undef to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v8i8_v8f32 = sitofp <8 x i8> undef to <8 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v4i8_v4f32 = sitofp <4 x i8> undef to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v8i8_v8f32 = sitofp <8 x i8> undef to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v16i8_v16f32 = sitofp <16 x i8> undef to <16 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> @@ -200,7 +200,7 @@ define i32 @sitofp_i8_float() {<br>
>  define i32 @sitofp_i16_float() {<br>
>  ; SSE-LABEL: 'sitofp_i16_float'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i16_f32 = sitofp i16 undef to float<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %cvt_v4i16_v4f32 = sitofp <4 x i16> undef to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v4i16_v4f32 = sitofp <4 x i16> undef to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v8i16_v8f32 = sitofp <8 x i16> undef to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cvt_v16i16_v16f32 = sitofp <16 x i16> undef to <16 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/slm-arith-costs.ll Wed Aug  7 09:24:26 2019<br>
> @@ -47,11 +47,11 @@ entry:<br>
><br>
>  define <2 x i8> @slm-costs_8_v2_mul(<2 x i8> %a, <2 x i8> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_8_v2_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i8> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %res = mul nsw <2 x i8> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i8> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_8_v2_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i8> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %res = mul nsw <2 x i8> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i8> %res<br>
>  ;<br>
>  entry:<br>
> @@ -61,11 +61,11 @@ entry:<br>
><br>
>  define <4 x i8> @slm-costs_8_v4_mul(<4 x i8> %a, <4 x i8> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_8_v4_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %res = mul nsw <4 x i8> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %res = mul nsw <4 x i8> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i8> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_8_v4_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i8> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %res = mul nsw <4 x i8> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i8> %res<br>
>  ;<br>
>  entry:<br>
> @@ -177,11 +177,11 @@ entry:<br>
><br>
>  define <8 x i8> @slm-costs_8_v8_mul(<8 x i8> %a, <8 x i8> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_8_v8_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <8 x i8> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %res = mul nsw <8 x i8> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_8_v8_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw <8 x i8> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %res = mul nsw <8 x i8> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %res<br>
>  ;<br>
>  entry:<br>
> @@ -216,11 +216,11 @@ entry:<br>
><br>
>  define <2 x i16> @slm-costs_16_v2_mul(<2 x i16> %a, <2 x i16> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_16_v2_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i16> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <2 x i16> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i16> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_16_v2_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i16> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw <2 x i16> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i16> %res<br>
>  ;<br>
>  entry:<br>
> @@ -230,11 +230,11 @@ entry:<br>
><br>
>  define <4 x i16> @slm-costs_16_v4_mul(<4 x i16> %a, <4 x i16> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_16_v4_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %res = mul nsw <4 x i16> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i16> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_16_v4_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <4 x i16> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %res = mul nsw <4 x i16> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %res<br>
>  ;<br>
>  entry:<br>
> @@ -385,11 +385,11 @@ entry:<br>
><br>
>  define <2 x i32> @slm-costs_32_v2_mul(<2 x i32> %a, <2 x i32> %b)  {<br>
>  ; SLM-LABEL: 'slm-costs_32_v2_mul'<br>
> -; SLM-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %res = mul nsw <2 x i32> %a, %b<br>
> +; SLM-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %res = mul nsw <2 x i32> %a, %b<br>
>  ; SLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
>  ;<br>
>  ; GLM-LABEL: 'slm-costs_32_v2_mul'<br>
> -; GLM-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %res = mul nsw <2 x i32> %a, %b<br>
> +; GLM-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %res = mul nsw <2 x i32> %a, %b<br>
>  ; GLM-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %res<br>
>  ;<br>
>  entry:<br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/testshiftashr.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5,9 +5,9 @@<br>
>  define %shifttype @shift2i16(%shifttype %a, %shifttype %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i16<br>
> -  ; SSE2: cost of 12 {{.*}} ashr<br>
> +  ; SSE2: cost of 32 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psraw<br>
><br>
>    %0 = ashr %shifttype %a , %b<br>
>    ret %shifttype %0<br>
> @@ -17,9 +17,9 @@ entry:<br>
>  define %shifttype4i16 @shift4i16(%shifttype4i16 %a, %shifttype4i16 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i16<br>
> -  ; SSE2: cost of 16 {{.*}} ashr<br>
> +  ; SSE2: cost of 32 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16<br>
> -  ; SSE2-CODEGEN: psrad<br>
> +  ; SSE2-CODEGEN: psraw<br>
><br>
>    %0 = ashr %shifttype4i16 %a , %b<br>
>    ret %shifttype4i16 %0<br>
> @@ -65,9 +65,9 @@ entry:<br>
>  define %shifttype2i32 @shift2i32(%shifttype2i32 %a, %shifttype2i32 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i32<br>
> -  ; SSE2: cost of 12 {{.*}} ashr<br>
> +  ; SSE2: cost of 16 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psrad<br>
><br>
>    %0 = ashr %shifttype2i32 %a , %b<br>
>    ret %shifttype2i32 %0<br>
> @@ -185,9 +185,9 @@ entry:<br>
>  define %shifttype2i8 @shift2i8(%shifttype2i8 %a, %shifttype2i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i8<br>
> -  ; SSE2: cost of 12 {{.*}} ashr<br>
> +  ; SSE2: cost of 54 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psrlw<br>
><br>
>    %0 = ashr %shifttype2i8 %a , %b<br>
>    ret %shifttype2i8 %0<br>
> @@ -197,9 +197,9 @@ entry:<br>
>  define %shifttype4i8 @shift4i8(%shifttype4i8 %a, %shifttype4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8<br>
> -  ; SSE2: cost of 16 {{.*}} ashr<br>
> +  ; SSE2: cost of 54 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8<br>
> -  ; SSE2-CODEGEN: psrad<br>
> +  ; SSE2-CODEGEN: psraw<br>
><br>
>    %0 = ashr %shifttype4i8 %a , %b<br>
>    ret %shifttype4i8 %0<br>
> @@ -209,7 +209,7 @@ entry:<br>
>  define %shifttype8i8 @shift8i8(%shifttype8i8 %a, %shifttype8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8<br>
> -  ; SSE2: cost of 32 {{.*}} ashr<br>
> +  ; SSE2: cost of 54 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8<br>
>    ; SSE2-CODEGEN: psraw<br>
><br>
> @@ -247,9 +247,9 @@ entry:<br>
>  define %shifttypec @shift2i16const(%shifttypec %a, %shifttypec %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i16const<br>
> -  ; SSE2: cost of 4 {{.*}} ashr<br>
> +  ; SSE2: cost of 1 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16const<br>
> -  ; SSE2-CODEGEN: psrad $3<br>
> +  ; SSE2-CODEGEN: psraw $3<br>
><br>
>    %0 = ashr %shifttypec %a , <i16 3, i16 3><br>
>    ret %shifttypec %0<br>
> @@ -261,7 +261,7 @@ entry:<br>
>    ; SSE2-LABEL: shift4i16const<br>
>    ; SSE2: cost of 1 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16const<br>
> -  ; SSE2-CODEGEN: psrad $19<br>
> +  ; SSE2-CODEGEN: psraw $3<br>
><br>
>    %0 = ashr %shifttypec4i16 %a , <i16 3, i16 3, i16 3, i16 3><br>
>    ret %shifttypec4i16 %0<br>
> @@ -320,7 +320,7 @@ entry:<br>
>  define %shifttypec2i32 @shift2i32c(%shifttypec2i32 %a, %shifttypec2i32 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i32c<br>
> -  ; SSE2: cost of 4 {{.*}} ashr<br>
> +  ; SSE2: cost of 1 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32c<br>
>    ; SSE2-CODEGEN: psrad $3<br>
><br>
> @@ -464,7 +464,7 @@ entry:<br>
>    ; SSE2-LABEL: shift2i8c<br>
>    ; SSE2: cost of 4 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8c<br>
> -  ; SSE2-CODEGEN: psrad $3<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = ashr %shifttypec2i8 %a , <i8 3, i8 3><br>
>    ret %shifttypec2i8 %0<br>
> @@ -474,9 +474,9 @@ entry:<br>
>  define %shifttypec4i8 @shift4i8c(%shifttypec4i8 %a, %shifttypec4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8c<br>
> -  ; SSE2: cost of 1 {{.*}} ashr<br>
> +  ; SSE2: cost of 4 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8c<br>
> -  ; SSE2-CODEGEN: psrad $27<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = ashr %shifttypec4i8 %a , <i8 3, i8 3, i8 3, i8 3><br>
>    ret %shifttypec4i8 %0<br>
> @@ -486,9 +486,9 @@ entry:<br>
>  define %shifttypec8i8 @shift8i8c(%shifttypec8i8 %a, %shifttypec8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8c<br>
> -  ; SSE2: cost of 1 {{.*}} ashr<br>
> +  ; SSE2: cost of 4 {{.*}} ashr<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8c<br>
> -  ; SSE2-CODEGEN: psraw $11<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = ashr %shifttypec8i8 %a , <i8 3, i8 3, i8 3, i8 3,<br>
>                                   i8 3, i8 3, i8 3, i8 3><br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/testshiftlshr.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5,9 +5,9 @@<br>
>  define %shifttype @shift2i16(%shifttype %a, %shifttype %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i16<br>
> -  ; SSE2: cost of 4 {{.*}} lshr<br>
> +  ; SSE2: cost of 32 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psrlw<br>
><br>
>    %0 = lshr %shifttype %a , %b<br>
>    ret %shifttype %0<br>
> @@ -17,9 +17,9 @@ entry:<br>
>  define %shifttype4i16 @shift4i16(%shifttype4i16 %a, %shifttype4i16 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i16<br>
> -  ; SSE2: cost of 16 {{.*}} lshr<br>
> +  ; SSE2: cost of 32 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16<br>
> -  ; SSE2-CODEGEN: psrld<br>
> +  ; SSE2-CODEGEN: psrlw<br>
><br>
>    %0 = lshr %shifttype4i16 %a , %b<br>
>    ret %shifttype4i16 %0<br>
> @@ -65,9 +65,9 @@ entry:<br>
>  define %shifttype2i32 @shift2i32(%shifttype2i32 %a, %shifttype2i32 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i32<br>
> -  ; SSE2: cost of 4 {{.*}} lshr<br>
> +  ; SSE2: cost of 16 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psrld<br>
><br>
>    %0 = lshr %shifttype2i32 %a , %b<br>
>    ret %shifttype2i32 %0<br>
> @@ -185,9 +185,9 @@ entry:<br>
>  define %shifttype2i8 @shift2i8(%shifttype2i8 %a, %shifttype2i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i8<br>
> -  ; SSE2: cost of 4 {{.*}} lshr<br>
> +  ; SSE2: cost of 26 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8<br>
> -  ; SSE2-CODEGEN: psrlq<br>
> +  ; SSE2-CODEGEN: psrlw<br>
><br>
>    %0 = lshr %shifttype2i8 %a , %b<br>
>    ret %shifttype2i8 %0<br>
> @@ -197,9 +197,9 @@ entry:<br>
>  define %shifttype4i8 @shift4i8(%shifttype4i8 %a, %shifttype4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8<br>
> -  ; SSE2: cost of 16 {{.*}} lshr<br>
> +  ; SSE2: cost of 26 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8<br>
> -  ; SSE2-CODEGEN: psrld<br>
> +  ; SSE2-CODEGEN: psrlw<br>
><br>
>    %0 = lshr %shifttype4i8 %a , %b<br>
>    ret %shifttype4i8 %0<br>
> @@ -209,7 +209,7 @@ entry:<br>
>  define %shifttype8i8 @shift8i8(%shifttype8i8 %a, %shifttype8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8<br>
> -  ; SSE2: cost of 32 {{.*}} lshr<br>
> +  ; SSE2: cost of 26 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8<br>
>    ; SSE2-CODEGEN: psrlw<br>
><br>
> @@ -249,7 +249,7 @@ entry:<br>
>    ; SSE2-LABEL: shift2i16const<br>
>    ; SSE2: cost of 1 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16const<br>
> -  ; SSE2-CODEGEN: psrlq $3<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = lshr %shifttypec %a , <i16 3, i16 3><br>
>    ret %shifttypec %0<br>
> @@ -261,7 +261,7 @@ entry:<br>
>    ; SSE2-LABEL: shift4i16const<br>
>    ; SSE2: cost of 1 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16const<br>
> -  ; SSE2-CODEGEN: psrld $3<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = lshr %shifttypec4i16 %a , <i16 3, i16 3, i16 3, i16 3><br>
>    ret %shifttypec4i16 %0<br>
> @@ -322,7 +322,7 @@ entry:<br>
>    ; SSE2-LABEL: shift2i32c<br>
>    ; SSE2: cost of 1 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32c<br>
> -  ; SSE2-CODEGEN: psrlq $3<br>
> +  ; SSE2-CODEGEN: psrld $3<br>
><br>
>    %0 = lshr %shifttypec2i32 %a , <i32 3, i32 3><br>
>    ret %shifttypec2i32 %0<br>
> @@ -461,9 +461,9 @@ entry:<br>
>  define %shifttypec2i8 @shift2i8c(%shifttypec2i8 %a, %shifttypec2i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i8c<br>
> -  ; SSE2: cost of 1 {{.*}} lshr<br>
> +  ; SSE2: cost of 2 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8c<br>
> -  ; SSE2-CODEGEN: psrlq $3<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = lshr %shifttypec2i8 %a , <i8 3, i8 3><br>
>    ret %shifttypec2i8 %0<br>
> @@ -473,9 +473,9 @@ entry:<br>
>  define %shifttypec4i8 @shift4i8c(%shifttypec4i8 %a, %shifttypec4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8c<br>
> -  ; SSE2: cost of 1 {{.*}} lshr<br>
> +  ; SSE2: cost of 2 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8c<br>
> -  ; SSE2-CODEGEN: psrld $3<br>
> +  ; SSE2-CODEGEN: psrlw $3<br>
><br>
>    %0 = lshr %shifttypec4i8 %a , <i8 3, i8 3, i8 3, i8 3><br>
>    ret %shifttypec4i8 %0<br>
> @@ -485,7 +485,7 @@ entry:<br>
>  define %shifttypec8i8 @shift8i8c(%shifttypec8i8 %a, %shifttypec8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8c<br>
> -  ; SSE2: cost of 1 {{.*}} lshr<br>
> +  ; SSE2: cost of 2 {{.*}} lshr<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8c<br>
>    ; SSE2-CODEGEN: psrlw $3<br>
><br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/testshiftshl.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5,9 +5,9 @@<br>
>  define %shifttype @shift2i16(%shifttype %a, %shifttype %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i16<br>
> -  ; SSE2: cost of 4 {{.*}} shl<br>
> +  ; SSE2: cost of 32 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16<br>
> -  ; SSE2-CODEGEN: psllq<br>
> +  ; SSE2-CODEGEN: pmullw<br>
><br>
>    %0 = shl %shifttype %a , %b<br>
>    ret %shifttype %0<br>
> @@ -17,9 +17,9 @@ entry:<br>
>  define %shifttype4i16 @shift4i16(%shifttype4i16 %a, %shifttype4i16 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i16<br>
> -  ; SSE2: cost of 10 {{.*}} shl<br>
> +  ; SSE2: cost of 32 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16<br>
> -  ; SSE2-CODEGEN: pmuludq<br>
> +  ; SSE2-CODEGEN: pmullw<br>
><br>
>    %0 = shl %shifttype4i16 %a , %b<br>
>    ret %shifttype4i16 %0<br>
> @@ -65,9 +65,9 @@ entry:<br>
>  define %shifttype2i32 @shift2i32(%shifttype2i32 %a, %shifttype2i32 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i32<br>
> -  ; SSE2: cost of 4 {{.*}} shl<br>
> +  ; SSE2: cost of 10 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32<br>
> -  ; SSE2-CODEGEN: psllq<br>
> +  ; SSE2-CODEGEN: pmuludq<br>
><br>
>    %0 = shl %shifttype2i32 %a , %b<br>
>    ret %shifttype2i32 %0<br>
> @@ -185,9 +185,9 @@ entry:<br>
>  define %shifttype2i8 @shift2i8(%shifttype2i8 %a, %shifttype2i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i8<br>
> -  ; SSE2: cost of 4 {{.*}} shl<br>
> +  ; SSE2: cost of 26 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8<br>
> -  ; SSE2-CODEGEN: psllq<br>
> +  ; SSE2-CODEGEN: psllw<br>
><br>
>    %0 = shl %shifttype2i8 %a , %b<br>
>    ret %shifttype2i8 %0<br>
> @@ -197,9 +197,9 @@ entry:<br>
>  define %shifttype4i8 @shift4i8(%shifttype4i8 %a, %shifttype4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8<br>
> -  ; SSE2: cost of 10 {{.*}} shl<br>
> +  ; SSE2: cost of 26 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8<br>
> -  ; SSE2-CODEGEN: pmuludq<br>
> +  ; SSE2-CODEGEN: psllw<br>
><br>
>    %0 = shl %shifttype4i8 %a , %b<br>
>    ret %shifttype4i8 %0<br>
> @@ -209,9 +209,9 @@ entry:<br>
>  define %shifttype8i8 @shift8i8(%shifttype8i8 %a, %shifttype8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8<br>
> -  ; SSE2: cost of 32 {{.*}} shl<br>
> +  ; SSE2: cost of 26 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8<br>
> -  ; SSE2-CODEGEN: pmullw<br>
> +  ; SSE2-CODEGEN: psllw<br>
><br>
>    %0 = shl %shifttype8i8 %a , %b<br>
>    ret %shifttype8i8 %0<br>
> @@ -249,7 +249,7 @@ entry:<br>
>    ; SSE2-LABEL: shift2i16const<br>
>    ; SSE2: cost of 1 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i16const<br>
> -  ; SSE2-CODEGEN: psllq $3<br>
> +  ; SSE2-CODEGEN: psllw $3<br>
><br>
>    %0 = shl %shifttypec %a , <i16 3, i16 3><br>
>    ret %shifttypec %0<br>
> @@ -261,7 +261,7 @@ entry:<br>
>    ; SSE2-LABEL: shift4i16const<br>
>    ; SSE2: cost of 1 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift4i16const<br>
> -  ; SSE2-CODEGEN: pslld $3<br>
> +  ; SSE2-CODEGEN: psllw $3<br>
><br>
>    %0 = shl %shifttypec4i16 %a , <i16 3, i16 3, i16 3, i16 3><br>
>    ret %shifttypec4i16 %0<br>
> @@ -322,7 +322,7 @@ entry:<br>
>    ; SSE2-LABEL: shift2i32c<br>
>    ; SSE2: cost of 1 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i32c<br>
> -  ; SSE2-CODEGEN: psllq $3<br>
> +  ; SSE2-CODEGEN: pslld $3<br>
><br>
>    %0 = shl %shifttypec2i32 %a , <i32 3, i32 3><br>
>    ret %shifttypec2i32 %0<br>
> @@ -461,9 +461,9 @@ entry:<br>
>  define %shifttypec2i8 @shift2i8c(%shifttypec2i8 %a, %shifttypec2i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift2i8c<br>
> -  ; SSE2: cost of 1 {{.*}} shl<br>
> +  ; SSE2: cost of 2 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift2i8c<br>
> -  ; SSE2-CODEGEN: psllq $3<br>
> +  ; SSE2-CODEGEN: psllw $3<br>
><br>
>    %0 = shl %shifttypec2i8 %a , <i8 3, i8 3><br>
>    ret %shifttypec2i8 %0<br>
> @@ -473,9 +473,9 @@ entry:<br>
>  define %shifttypec4i8 @shift4i8c(%shifttypec4i8 %a, %shifttypec4i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift4i8c<br>
> -  ; SSE2: cost of 1 {{.*}} shl<br>
> +  ; SSE2: cost of 2 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift4i8c<br>
> -  ; SSE2-CODEGEN: pslld $3<br>
> +  ; SSE2-CODEGEN: psllw $3<br>
><br>
>    %0 = shl %shifttypec4i8 %a , <i8 3, i8 3, i8 3, i8 3><br>
>    ret %shifttypec4i8 %0<br>
> @@ -485,7 +485,7 @@ entry:<br>
>  define %shifttypec8i8 @shift8i8c(%shifttypec8i8 %a, %shifttypec8i8 %b) {<br>
>  entry:<br>
>    ; SSE2-LABEL: shift8i8c<br>
> -  ; SSE2: cost of 1 {{.*}} shl<br>
> +  ; SSE2: cost of 2 {{.*}} shl<br>
>    ; SSE2-CODEGEN-LABEL: shift8i8c<br>
>    ; SSE2-CODEGEN: psllw $3<br>
><br>
><br>
> Modified: llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll (original)<br>
> +++ llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll Wed Aug  7 09:24:26 2019<br>
> @@ -13,9 +13,9 @@<br>
>  define i32 @uitofp_i8_double() {<br>
>  ; SSE-LABEL: 'uitofp_i8_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i8_f64 = uitofp i8 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %cvt_v2i8_v2f64 = uitofp <2 x i8> undef to <2 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i8_v4f64 = uitofp <4 x i8> undef to <4 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i8_v8f64 = uitofp <8 x i8> undef to <8 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v2i8_v2f64 = uitofp <2 x i8> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v4i8_v4f64 = uitofp <4 x i8> undef to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %cvt_v8i8_v8f64 = uitofp <8 x i8> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
>  ; AVX-LABEL: 'uitofp_i8_double'<br>
> @@ -49,8 +49,8 @@ define i32 @uitofp_i8_double() {<br>
>  define i32 @uitofp_i16_double() {<br>
>  ; SSE-LABEL: 'uitofp_i16_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i16_f64 = uitofp i16 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %cvt_v2i16_v2f64 = uitofp <2 x i16> undef to <2 x double><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i16_v4f64 = uitofp <4 x i16> undef to <4 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v2i16_v2f64 = uitofp <2 x i16> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v4i16_v4f64 = uitofp <4 x i16> undef to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i16_v8f64 = uitofp <8 x i16> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> @@ -85,7 +85,7 @@ define i32 @uitofp_i16_double() {<br>
>  define i32 @uitofp_i32_double() {<br>
>  ; SSE-LABEL: 'uitofp_i32_double'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i32_f64 = uitofp i32 undef to double<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %cvt_v2i32_v2f64 = uitofp <2 x i32> undef to <2 x double><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v2i32_v2f64 = uitofp <2 x i32> undef to <2 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cvt_v4i32_v4f64 = uitofp <4 x i32> undef to <4 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cvt_v8i32_v8f64 = uitofp <8 x i32> undef to <8 x double><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
> @@ -165,7 +165,7 @@ define i32 @uitofp_i8_float() {<br>
>  ; SSE-LABEL: 'uitofp_i8_float'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i8_f32 = uitofp i8 undef to float<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v4i8_v4f32 = uitofp <4 x i8> undef to <4 x float><br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v8i8_v8f32 = uitofp <8 x i8> undef to <8 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v8i8_v8f32 = uitofp <8 x i8> undef to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v16i8_v16f32 = uitofp <16 x i8> undef to <16 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
>  ;<br>
> @@ -200,7 +200,7 @@ define i32 @uitofp_i8_float() {<br>
>  define i32 @uitofp_i16_float() {<br>
>  ; SSE-LABEL: 'uitofp_i16_float'<br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cvt_i16_f32 = uitofp i16 undef to float<br>
> -; SSE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cvt_v4i16_v4f32 = uitofp <4 x i16> undef to <4 x float><br>
> +; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v4i16_v4f32 = uitofp <4 x i16> undef to <4 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cvt_v8i16_v8f32 = uitofp <8 x i16> undef to <8 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cvt_v16i16_v16f32 = uitofp <16 x i16> undef to <16 x float><br>
>  ; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2008-09-05-sinttofp-2xi32.ll Wed Aug  7 09:24:26 2019<br>
> @@ -7,7 +7,6 @@<br>
>  define <2 x double> @a(<2 x i32> %x) nounwind {<br>
>  ; CHECK-LABEL: a:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
> -; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; CHECK-NEXT:    cvtdq2pd %xmm0, %xmm0<br>
>  ; CHECK-NEXT:    retl<br>
>  entry:<br>
> @@ -19,7 +18,6 @@ define <2 x i32> @b(<2 x double> %x) nou<br>
>  ; CHECK-LABEL: b:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
>  ; CHECK-NEXT:    cvttpd2dq %xmm0, %xmm0<br>
> -; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
>  ; CHECK-NEXT:    retl<br>
>  entry:<br>
>    %y = fptosi <2 x double> %x to <2 x i32><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2009-06-05-VZextByteShort.ll Wed Aug  7 09:24:26 2019<br>
> @@ -7,6 +7,7 @@ define <4 x i16> @a(i32* %x1) nounwind {<br>
>  ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; CHECK-NEXT:    movl (%eax), %eax<br>
>  ; CHECK-NEXT:    shrl %eax<br>
> +; CHECK-NEXT:    movzwl %ax, %eax<br>
>  ; CHECK-NEXT:    movd %eax, %xmm0<br>
>  ; CHECK-NEXT:    retl<br>
><br>
> @@ -40,7 +41,7 @@ define <8 x i8> @c(i32* %x1) nounwind {<br>
>  ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; CHECK-NEXT:    movl (%eax), %eax<br>
>  ; CHECK-NEXT:    shrl %eax<br>
> -; CHECK-NEXT:    movzwl %ax, %eax<br>
> +; CHECK-NEXT:    movzbl %al, %eax<br>
>  ; CHECK-NEXT:    movd %eax, %xmm0<br>
>  ; CHECK-NEXT:    retl<br>
><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2011-10-19-LegelizeLoad.ll Wed Aug  7 09:24:26 2019<br>
> @@ -17,19 +17,23 @@ target triple = "x86_64-unknown-linux-gn<br>
>  define i32 @main() nounwind uwtable {<br>
>  ; CHECK-LABEL: main:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
> -; CHECK-NEXT:    pmovsxbq {{.*}}(%rip), %xmm0<br>
> -; CHECK-NEXT:    pmovsxbq {{.*}}(%rip), %xmm1<br>
> -; CHECK-NEXT:    pextrq $1, %xmm1, %rax<br>
> -; CHECK-NEXT:    pextrq $1, %xmm0, %rcx<br>
> -; CHECK-NEXT:    cqto<br>
> -; CHECK-NEXT:    idivq %rcx<br>
> -; CHECK-NEXT:    movq %rax, %xmm2<br>
> -; CHECK-NEXT:    movq %xmm1, %rax<br>
> -; CHECK-NEXT:    movq %xmm0, %rcx<br>
> -; CHECK-NEXT:    cqto<br>
> -; CHECK-NEXT:    idivq %rcx<br>
> -; CHECK-NEXT:    movq %rax, %xmm0<br>
> -; CHECK-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]<br>
> +; CHECK-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; CHECK-NEXT:    pextrb $1, %xmm0, %eax<br>
> +; CHECK-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> +; CHECK-NEXT:    pextrb $1, %xmm1, %ecx<br>
> +; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; CHECK-NEXT:    cbtw<br>
> +; CHECK-NEXT:    idivb %cl<br>
> +; CHECK-NEXT:    movl %eax, %ecx<br>
> +; CHECK-NEXT:    pextrb $0, %xmm0, %eax<br>
> +; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; CHECK-NEXT:    cbtw<br>
> +; CHECK-NEXT:    pextrb $0, %xmm1, %edx<br>
> +; CHECK-NEXT:    idivb %dl<br>
> +; CHECK-NEXT:    movzbl %cl, %ecx<br>
> +; CHECK-NEXT:    movzbl %al, %eax<br>
> +; CHECK-NEXT:    movd %eax, %xmm0<br>
> +; CHECK-NEXT:    pinsrb $1, %ecx, %xmm0<br>
>  ; CHECK-NEXT:    pextrw $0, %xmm0, {{.*}}(%rip)<br>
>  ; CHECK-NEXT:    xorl %eax, %eax<br>
>  ; CHECK-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2011-12-28-vselecti8.ll Wed Aug  7 09:24:26 2019<br>
> @@ -18,10 +18,11 @@ target triple = "x86_64-apple-darwin11.2<br>
>  define void @foo8(float* nocapture %RET) nounwind {<br>
>  ; CHECK-LABEL: foo8:<br>
>  ; CHECK:       ## %bb.0: ## %allocas<br>
> -; CHECK-NEXT:    movaps {{.*#+}} xmm0 = [1.0E+2,2.0E+0,1.0E+2,4.0E+0]<br>
> -; CHECK-NEXT:    movaps {{.*#+}} xmm1 = [1.0E+2,6.0E+0,1.0E+2,8.0E+0]<br>
> -; CHECK-NEXT:    movups %xmm1, 16(%rdi)<br>
> -; CHECK-NEXT:    movups %xmm0, (%rdi)<br>
> +; CHECK-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
> +; CHECK-NEXT:    cvtdq2ps %xmm0, %xmm0<br>
> +; CHECK-NEXT:    movaps {{.*#+}} xmm1 = [1.0E+2,2.0E+0,1.0E+2,4.0E+0]<br>
> +; CHECK-NEXT:    movups %xmm1, (%rdi)<br>
> +; CHECK-NEXT:    movups %xmm0, 16(%rdi)<br>
>  ; CHECK-NEXT:    retq<br>
>  allocas:<br>
>    %resultvec.i = select <8 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <8 x i8> <i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, <8 x i8> <i8 100, i8 100, i8 100, i8 100, i8 100, i8 100, i8 100, i8 100><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2011-12-8-bitcastintprom.ll Wed Aug  7 09:24:26 2019<br>
> @@ -6,16 +6,12 @@<br>
>  define void @prom_bug(<4 x i8> %t, i16* %p) {<br>
>  ; SSE2-LABEL: prom_bug:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> -; SSE2-NEXT:    pextrw $0, %xmm0, %eax<br>
> +; SSE2-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, (%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE41-LABEL: prom_bug:<br>
>  ; SSE41:       ## %bb.0:<br>
> -; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE41-NEXT:    pextrw $0, %xmm0, (%rdi)<br>
>  ; SSE41-NEXT:    retq<br>
>    %r = bitcast <4 x i8> %t to <2 x i16><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll Wed Aug  7 09:24:26 2019<br>
> @@ -4,9 +4,8 @@<br>
>  define <2 x i32> @vcast(<2 x float> %a, <2 x float> %b) {<br>
>  ; CHECK-LABEL: vcast:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero<br>
> -; CHECK-NEXT:    pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero<br>
> -; CHECK-NEXT:    psubq %xmm1, %xmm0<br>
> +; CHECK-NEXT:    movdqa (%rcx), %xmm0<br>
> +; CHECK-NEXT:    psubd (%rdx), %xmm0<br>
>  ; CHECK-NEXT:    retq<br>
>    %af = bitcast <2 x float> %a to <2 x i32><br>
>    %bf = bitcast <2 x float> %b to <2 x i32><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2012-03-15-build_vector_wl.ll Wed Aug  7 09:24:26 2019<br>
> @@ -4,7 +4,6 @@<br>
>  define <4 x i8> @build_vector_again(<16 x i8> %in) nounwind readnone {<br>
>  ; CHECK-LABEL: build_vector_again:<br>
>  ; CHECK:       ## %bb.0: ## %entry<br>
> -; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
>  ; CHECK-NEXT:    retq<br>
>  entry:<br>
>    %out = shufflevector <16 x i8> %in, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/2012-07-10-extload64.ll Wed Aug  7 09:24:26 2019<br>
> @@ -33,7 +33,7 @@ define <2 x i32> @load_64(<2 x i32>* %pt<br>
>  ; CHECK-LABEL: load_64:<br>
>  ; CHECK:       # %bb.0: # %BB<br>
>  ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; CHECK-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero<br>
> +; CHECK-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
>  ; CHECK-NEXT:    retl<br>
>  BB:<br>
>    %t = load <2 x i32>, <2 x i32>* %ptr<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/3dnow-intrinsics.ll Wed Aug  7 09:24:26 2019<br>
> @@ -14,8 +14,7 @@ define <8 x i8> @test_pavgusb(x86_mmx %a<br>
>  ; X64:       # %bb.0: # %entry<br>
>  ; X64-NEXT:    pavgusb %mm1, %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast x86_mmx %a.coerce to <8 x i8><br>
> @@ -52,8 +51,7 @@ define <2 x i32> @test_pf2id(<2 x float><br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm0<br>
>  ; X64-NEXT:    pf2id %mm0, %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x float> %a to x86_mmx<br>
> @@ -169,8 +167,7 @@ define <2 x i32> @test_pfcmpeq(<2 x floa<br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm1<br>
>  ; X64-NEXT:    pfcmpeq %mm0, %mm1<br>
>  ; X64-NEXT:    movq %mm1, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x float> %a to x86_mmx<br>
> @@ -209,8 +206,7 @@ define <2 x i32> @test_pfcmpge(<2 x floa<br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm1<br>
>  ; X64-NEXT:    pfcmpge %mm0, %mm1<br>
>  ; X64-NEXT:    movq %mm1, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x float> %a to x86_mmx<br>
> @@ -249,8 +245,7 @@ define <2 x i32> @test_pfcmpgt(<2 x floa<br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm1<br>
>  ; X64-NEXT:    pfcmpgt %mm0, %mm1<br>
>  ; X64-NEXT:    movq %mm1, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x float> %a to x86_mmx<br>
> @@ -685,8 +680,7 @@ define <4 x i16> @test_pmulhrw(x86_mmx %<br>
>  ; X64:       # %bb.0: # %entry<br>
>  ; X64-NEXT:    pmulhrw %mm1, %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast x86_mmx %a.coerce to <4 x i16><br>
> @@ -723,8 +717,7 @@ define <2 x i32> @test_pf2iw(<2 x float><br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm0<br>
>  ; X64-NEXT:    pf2iw %mm0, %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x float> %a to x86_mmx<br>
> @@ -896,12 +889,10 @@ define <2 x i32> @test_pswapdsi(<2 x i32<br>
>  ;<br>
>  ; X64-LABEL: test_pswapdsi:<br>
>  ; X64:       # %bb.0: # %entry<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; X64-NEXT:    movdq2q %xmm0, %mm0<br>
>  ; X64-NEXT:    pswapd %mm0, %mm0 # mm0 = mm0[1,0]<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> +; X64-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
>    %0 = bitcast <2 x i32> %a to x86_mmx<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/4char-promote.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/4char-promote.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/4char-promote.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/4char-promote.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/4char-promote.ll Wed Aug  7 09:24:26 2019<br>
> @@ -7,8 +7,11 @@ target triple = "x86_64-apple-darwin"<br>
>  define <4 x i8> @foo(<4 x i8> %x, <4 x i8> %y) {<br>
>  ; CHECK-LABEL: foo:<br>
>  ; CHECK:       ## %bb.0: ## %entry<br>
> -; CHECK-NEXT:    pmulld %xmm0, %xmm1<br>
> -; CHECK-NEXT:    paddd %xmm1, %xmm0<br>
> +; CHECK-NEXT:    pmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; CHECK-NEXT:    pmovzxbw {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; CHECK-NEXT:    pmullw %xmm1, %xmm2<br>
> +; CHECK-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; CHECK-NEXT:    paddb %xmm2, %xmm0<br>
>  ; CHECK-NEXT:    retq<br>
>  entry:<br>
>   %binop = mul <4 x i8> %x, %y<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/and-load-fold.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/and-load-fold.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/and-load-fold.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/and-load-fold.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/and-load-fold.ll Wed Aug  7 09:24:26 2019<br>
> @@ -6,10 +6,8 @@<br>
>  define i8 @foo(<4 x i8>* %V) {<br>
>  ; CHECK-LABEL: foo:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> -; CHECK-NEXT:    pextrw $1, %xmm0, %eax<br>
> +; CHECK-NEXT:    movb 2(%rdi), %al<br>
>  ; CHECK-NEXT:    andb $95, %al<br>
> -; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; CHECK-NEXT:    retq<br>
>    %Vp = bitcast <4 x i8>* %V to <3 x i8>*<br>
>    %V3i8 = load <3 x i8>, <3 x i8>* %Vp, align 4<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/atomic-unordered.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic-unordered.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic-unordered.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/atomic-unordered.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/atomic-unordered.ll Wed Aug  7 09:24:26 2019<br>
> @@ -460,7 +460,7 @@ define void @vec_store(i32* %p0, <2 x i3<br>
>  ; CHECK-O0-LABEL: vec_store:<br>
>  ; CHECK-O0:       # %bb.0:<br>
>  ; CHECK-O0-NEXT:    vmovd %xmm0, %eax<br>
> -; CHECK-O0-NEXT:    vpextrd $2, %xmm0, %ecx<br>
> +; CHECK-O0-NEXT:    vpextrd $1, %xmm0, %ecx<br>
>  ; CHECK-O0-NEXT:    movl %eax, (%rdi)<br>
>  ; CHECK-O0-NEXT:    movl %ecx, 4(%rdi)<br>
>  ; CHECK-O0-NEXT:    retq<br>
> @@ -468,7 +468,7 @@ define void @vec_store(i32* %p0, <2 x i3<br>
>  ; CHECK-O3-LABEL: vec_store:<br>
>  ; CHECK-O3:       # %bb.0:<br>
>  ; CHECK-O3-NEXT:    vmovd %xmm0, %eax<br>
> -; CHECK-O3-NEXT:    vpextrd $2, %xmm0, %ecx<br>
> +; CHECK-O3-NEXT:    vpextrd $1, %xmm0, %ecx<br>
>  ; CHECK-O3-NEXT:    movl %eax, (%rdi)<br>
>  ; CHECK-O3-NEXT:    movl %ecx, 4(%rdi)<br>
>  ; CHECK-O3-NEXT:    retq<br>
> @@ -485,7 +485,7 @@ define void @vec_store_unaligned(i32* %p<br>
>  ; CHECK-O0-LABEL: vec_store_unaligned:<br>
>  ; CHECK-O0:       # %bb.0:<br>
>  ; CHECK-O0-NEXT:    vmovd %xmm0, %eax<br>
> -; CHECK-O0-NEXT:    vpextrd $2, %xmm0, %ecx<br>
> +; CHECK-O0-NEXT:    vpextrd $1, %xmm0, %ecx<br>
>  ; CHECK-O0-NEXT:    movl %eax, (%rdi)<br>
>  ; CHECK-O0-NEXT:    movl %ecx, 4(%rdi)<br>
>  ; CHECK-O0-NEXT:    retq<br>
> @@ -493,7 +493,7 @@ define void @vec_store_unaligned(i32* %p<br>
>  ; CHECK-O3-LABEL: vec_store_unaligned:<br>
>  ; CHECK-O3:       # %bb.0:<br>
>  ; CHECK-O3-NEXT:    vmovd %xmm0, %eax<br>
> -; CHECK-O3-NEXT:    vpextrd $2, %xmm0, %ecx<br>
> +; CHECK-O3-NEXT:    vpextrd $1, %xmm0, %ecx<br>
>  ; CHECK-O3-NEXT:    movl %eax, (%rdi)<br>
>  ; CHECK-O3-NEXT:    movl %ecx, 4(%rdi)<br>
>  ; CHECK-O3-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avg.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avg.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avg.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avg.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avg.ll Wed Aug  7 09:24:26 2019<br>
> @@ -378,63 +378,65 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>  ; AVX2-LABEL: avg_v48i8:<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vmovdqa (%rdi), %xmm0<br>
> -; AVX2-NEXT:    vmovdqa 32(%rdi), %xmm1<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpbroadcastq 24(%rdi), %xmm3<br>
> +; AVX2-NEXT:    vmovdqa 16(%rdi), %xmm1<br>
> +; AVX2-NEXT:    vmovdqa 32(%rdi), %xmm2<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
>  ; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero,xmm3[4],zero,zero,zero,xmm3[5],zero,zero,zero,xmm3[6],zero,zero,zero,xmm3[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm5 = xmm1[2,3,0,1]<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero,xmm5[4],zero,zero,zero,xmm5[5],zero,zero,zero,xmm5[6],zero,zero,zero,xmm5[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm8 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vmovdqa (%rsi), %xmm6<br>
> -; AVX2-NEXT:    vmovdqa 32(%rsi), %xmm7<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm6[2,3,0,1]<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm1, %ymm2, %ymm1<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero,xmm6[4],zero,zero,zero,xmm6[5],zero,zero,zero,xmm6[6],zero,zero,zero,xmm6[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpbroadcastq 24(%rsi), %xmm2<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm2, %ymm3, %ymm2<br>
> -; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm3, %ymm4, %ymm3<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm7[2,3,0,1]<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]<br>
>  ; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm4, %ymm5, %ymm4<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm9 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero,xmm5[4],zero,zero,zero,xmm5[5],zero,zero,zero,xmm5[6],zero,zero,zero,xmm5[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm8 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vmovdqa (%rsi), %xmm6<br>
> +; AVX2-NEXT:    vmovdqa 16(%rsi), %xmm7<br>
> +; AVX2-NEXT:    vmovdqa 32(%rsi), %xmm2<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm5 = xmm6[2,3,0,1]<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero,xmm5[4],zero,zero,zero,xmm5[5],zero,zero,zero,xmm5[6],zero,zero,zero,xmm5[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpaddd %ymm5, %ymm3, %ymm3<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero,xmm6[4],zero,zero,zero,xmm6[5],zero,zero,zero,xmm6[6],zero,zero,zero,xmm6[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpaddd %ymm5, %ymm0, %ymm0<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm5 = xmm7[2,3,0,1]<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero,xmm5[4],zero,zero,zero,xmm5[5],zero,zero,zero,xmm5[6],zero,zero,zero,xmm5[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpaddd %ymm5, %ymm4, %ymm4<br>
>  ; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero,xmm7[4],zero,zero,zero,xmm7[5],zero,zero,zero,xmm7[6],zero,zero,zero,xmm7[7],zero,zero,zero<br>
> -; AVX2-NEXT:    vpaddd %ymm5, %ymm8, %ymm5<br>
> +; AVX2-NEXT:    vpaddd %ymm5, %ymm1, %ymm1<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero,xmm5[4],zero,zero,zero,xmm5[5],zero,zero,zero,xmm5[6],zero,zero,zero,xmm5[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpaddd %ymm5, %ymm9, %ymm5<br>
> +; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero<br>
> +; AVX2-NEXT:    vpaddd %ymm2, %ymm8, %ymm2<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6<br>
> -; AVX2-NEXT:    vpsubd %ymm6, %ymm1, %ymm1<br>
> -; AVX2-NEXT:    vpsubd %ymm6, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpsubd %ymm6, %ymm2, %ymm2<br>
>  ; AVX2-NEXT:    vpsubd %ymm6, %ymm3, %ymm3<br>
> +; AVX2-NEXT:    vpsubd %ymm6, %ymm0, %ymm0<br>
>  ; AVX2-NEXT:    vpsubd %ymm6, %ymm4, %ymm4<br>
> +; AVX2-NEXT:    vpsubd %ymm6, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vpsubd %ymm6, %ymm5, %ymm5<br>
> +; AVX2-NEXT:    vpsubd %ymm6, %ymm2, %ymm2<br>
> +; AVX2-NEXT:    vpsrld $1, %ymm2, %ymm2<br>
>  ; AVX2-NEXT:    vpsrld $1, %ymm5, %ymm5<br>
> +; AVX2-NEXT:    vpsrld $1, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vpsrld $1, %ymm4, %ymm4<br>
> -; AVX2-NEXT:    vpsrld $1, %ymm3, %ymm3<br>
> -; AVX2-NEXT:    vpsrld $1, %ymm2, %ymm2<br>
>  ; AVX2-NEXT:    vpsrld $1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpsrld $1, %ymm1, %ymm1<br>
> -; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm6 = ymm0[2,3],ymm1[2,3]<br>
> -; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> +; AVX2-NEXT:    vpsrld $1, %ymm3, %ymm3<br>
> +; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm6 = ymm0[2,3],ymm3[2,3]<br>
> +; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm0, %ymm0<br>
>  ; AVX2-NEXT:    vpackusdw %ymm6, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]<br>
> -; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm6 = ymm3[2,3],ymm2[2,3]<br>
> -; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2<br>
> -; AVX2-NEXT:    vpackusdw %ymm6, %ymm2, %ymm2<br>
> -; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm2<br>
> -; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm3<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]<br>
> +; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0<br>
> +; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm6 = ymm1[2,3],ymm4[2,3]<br>
> +; AVX2-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm1<br>
> +; AVX2-NEXT:    vpackusdw %ymm6, %ymm1, %ymm1<br>
> +; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1<br>
> +; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm4<br>
>  ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]<br>
> -; AVX2-NEXT:    vpackuswb %ymm0, %ymm3, %ymm0<br>
> -; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm2 = ymm5[2,3],ymm4[2,3]<br>
> -; AVX2-NEXT:    vinserti128 $1, %xmm4, %ymm5, %ymm3<br>
> -; AVX2-NEXT:    vpackusdw %ymm2, %ymm3, %ymm2<br>
> -; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm1<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]<br>
> +; AVX2-NEXT:    vpackuswb %ymm0, %ymm4, %ymm0<br>
> +; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm1 = ymm2[2,3],ymm5[2,3]<br>
> +; AVX2-NEXT:    vinserti128 $1, %xmm5, %ymm2, %ymm2<br>
> +; AVX2-NEXT:    vpackusdw %ymm1, %ymm2, %ymm1<br>
> +; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
>  ; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovdqu %xmm1, (%rax)<br>
> @@ -1897,118 +1899,178 @@ define void @not_avg_v16i8_wide_constant<br>
>  ; SSE2-NEXT:    pushq %r13<br>
>  ; SSE2-NEXT:    pushq %r12<br>
>  ; SSE2-NEXT:    pushq %rbx<br>
> -; SSE2-NEXT:    movaps (%rdi), %xmm0<br>
> -; SSE2-NEXT:    movaps (%rsi), %xmm1<br>
> -; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-NEXT:    movaps (%rdi), %xmm1<br>
> +; SSE2-NEXT:    movaps (%rsi), %xmm0<br>
> +; SSE2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
>  ; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r13d<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
>  ; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
>  ; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r14d<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r15d<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r13d<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r12d<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r15d<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r9d<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebp<br>
> +; SSE2-NEXT:    addq %r11, %rbp<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r14d<br>
> +; SSE2-NEXT:    addq %r10, %r14<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> +; SSE2-NEXT:    addq %r9, %rbx<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r11d<br>
> +; SSE2-NEXT:    addq %r8, %r11<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r10d<br>
> +; SSE2-NEXT:    addq %rdx, %r10<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %r8d<br>
> +; SSE2-NEXT:    addq %rcx, %r8<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edi<br>
> +; SSE2-NEXT:    addq %rax, %rdi<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
> -; SSE2-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-NEXT:    addq %rsi, %rdx<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> -; SSE2-NEXT:    leal -1(%rdx,%rsi), %edx<br>
> -; SSE2-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
> -; SSE2-NEXT:    leal -1(%rbx,%rdx), %edx<br>
> -; SSE2-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
> -; SSE2-NEXT:    leal -1(%rbp,%rdx), %edx<br>
> -; SSE2-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
> -; SSE2-NEXT:    leal -1(%rdi,%rdx), %r8d<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %edx<br>
> -; SSE2-NEXT:    leal -1(%rax,%rdx), %edi<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> -; SSE2-NEXT:    leal -1(%rcx,%rax), %edx<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> -; SSE2-NEXT:    leal -1(%r9,%rax), %ecx<br>
> +; SSE2-NEXT:    leaq -1(%r15,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> -; SSE2-NEXT:    leal -1(%r10,%rsi), %eax<br>
> +; SSE2-NEXT:    leaq -1(%r12,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
>  ; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> -; SSE2-NEXT:    leaq -1(%r11,%rsi), %rsi<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    leaq -1(%r12,%rbx), %r12<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    leaq -1(%r15,%rbx), %r15<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    leaq -1(%r14,%rbx), %r14<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> -; SSE2-NEXT:    leaq -1(%rbp,%rbx), %r11<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> -; SSE2-NEXT:    leaq -1(%rbp,%rbx), %r10<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    leaq -1(%r13,%rbx), %r9<br>
> -; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ebx<br>
> -; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Reload<br>
> -; SSE2-NEXT:    leaq -1(%r13,%rbx), %rbx<br>
> -; SSE2-NEXT:    shrl %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm8<br>
> -; SSE2-NEXT:    shrl %ecx<br>
> -; SSE2-NEXT:    movd %ecx, %xmm15<br>
> -; SSE2-NEXT:    shrl %edx<br>
> -; SSE2-NEXT:    movd %edx, %xmm9<br>
> -; SSE2-NEXT:    shrl %edi<br>
> -; SSE2-NEXT:    movd %edi, %xmm2<br>
> -; SSE2-NEXT:    shrl %r8d<br>
> -; SSE2-NEXT:    movd %r8d, %xmm10<br>
> -; SSE2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; SSE2-NEXT:    shrl %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm6<br>
> -; SSE2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; SSE2-NEXT:    shrl %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm11<br>
> -; SSE2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; SSE2-NEXT:    shrl %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm4<br>
> -; SSE2-NEXT:    shrq %rsi<br>
> -; SSE2-NEXT:    movd %esi, %xmm12<br>
> -; SSE2-NEXT:    shrq %r12<br>
> -; SSE2-NEXT:    movd %r12d, %xmm3<br>
> -; SSE2-NEXT:    shrq %r15<br>
> -; SSE2-NEXT:    movd %r15d, %xmm13<br>
> -; SSE2-NEXT:    shrq %r14<br>
> -; SSE2-NEXT:    movd %r14d, %xmm7<br>
> -; SSE2-NEXT:    shrq %r11<br>
> -; SSE2-NEXT:    movd %r11d, %xmm14<br>
> -; SSE2-NEXT:    shrq %r10<br>
> -; SSE2-NEXT:    movd %r10d, %xmm5<br>
> -; SSE2-NEXT:    shrq %r9<br>
> -; SSE2-NEXT:    movd %r9d, %xmm0<br>
> -; SSE2-NEXT:    shrq %rbx<br>
> -; SSE2-NEXT:    movd %ebx, %xmm1<br>
> +; SSE2-NEXT:    leaq -1(%r13,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    leaq -1(%rax,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    leaq -1(%rax,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    leaq -1(%rax,%rsi), %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    leaq -1(%rax,%rsi), %rsi<br>
> +; SSE2-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %esi<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    leaq -1(%rax,%rsi), %rsi<br>
> +; SSE2-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    addq $-1, %rbp<br>
> +; SSE2-NEXT:    movl $0, %r9d<br>
> +; SSE2-NEXT:    adcq $-1, %r9<br>
> +; SSE2-NEXT:    addq $-1, %r14<br>
> +; SSE2-NEXT:    movl $0, %esi<br>
> +; SSE2-NEXT:    adcq $-1, %rsi<br>
> +; SSE2-NEXT:    addq $-1, %rbx<br>
> +; SSE2-NEXT:    movl $0, %eax<br>
> +; SSE2-NEXT:    adcq $-1, %rax<br>
> +; SSE2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; SSE2-NEXT:    addq $-1, %r11<br>
> +; SSE2-NEXT:    movl $0, %r12d<br>
> +; SSE2-NEXT:    adcq $-1, %r12<br>
> +; SSE2-NEXT:    addq $-1, %r10<br>
> +; SSE2-NEXT:    movl $0, %r13d<br>
> +; SSE2-NEXT:    adcq $-1, %r13<br>
> +; SSE2-NEXT:    addq $-1, %r8<br>
> +; SSE2-NEXT:    movl $0, %r15d<br>
> +; SSE2-NEXT:    adcq $-1, %r15<br>
> +; SSE2-NEXT:    addq $-1, %rdi<br>
> +; SSE2-NEXT:    movl $0, %ecx<br>
> +; SSE2-NEXT:    adcq $-1, %rcx<br>
> +; SSE2-NEXT:    addq $-1, %rdx<br>
> +; SSE2-NEXT:    movl $0, %eax<br>
> +; SSE2-NEXT:    adcq $-1, %rax<br>
> +; SSE2-NEXT:    shldq $63, %rdx, %rax<br>
> +; SSE2-NEXT:    shldq $63, %rdi, %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %rdx<br>
> +; SSE2-NEXT:    shldq $63, %r8, %r15<br>
> +; SSE2-NEXT:    shldq $63, %r10, %r13<br>
> +; SSE2-NEXT:    shldq $63, %r11, %r12<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload<br>
> +; SSE2-NEXT:    shldq $63, %rbx, %rdi<br>
> +; SSE2-NEXT:    shldq $63, %r14, %rsi<br>
> +; SSE2-NEXT:    shldq $63, %rbp, %r9<br>
> +; SSE2-NEXT:    movq %r9, %xmm8<br>
> +; SSE2-NEXT:    movq %rsi, %xmm15<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm9<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm2<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm10<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm4<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm11<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rcx<br>
> +; SSE2-NEXT:    movq %rcx, %xmm7<br>
> +; SSE2-NEXT:    movq %rdi, %xmm12<br>
> +; SSE2-NEXT:    movq %r12, %xmm0<br>
> +; SSE2-NEXT:    movq %r13, %xmm13<br>
> +; SSE2-NEXT:    movq %r15, %xmm6<br>
> +; SSE2-NEXT:    movq %rdx, %xmm14<br>
> +; SSE2-NEXT:    movq %rax, %xmm5<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rax<br>
> +; SSE2-NEXT:    movq %rax, %xmm3<br>
> +; SSE2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; SSE2-NEXT:    shrq %rax<br>
> +; SSE2-NEXT:    movq %rax, %xmm1<br>
>  ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm8[0],xmm15[1],xmm8[1],xmm15[2],xmm8[2],xmm15[3],xmm8[3],xmm15[4],xmm8[4],xmm15[5],xmm8[5],xmm15[6],xmm8[6],xmm15[7],xmm8[7]<br>
>  ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm9[0],xmm2[1],xmm9[1],xmm2[2],xmm9[2],xmm2[3],xmm9[3],xmm2[4],xmm9[4],xmm2[5],xmm9[5],xmm2[6],xmm9[6],xmm2[7],xmm9[7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm15[0],xmm2[1],xmm15[1],xmm2[2],xmm15[2],xmm2[3],xmm15[3]<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm10[0],xmm6[1],xmm10[1],xmm6[2],xmm10[2],xmm6[3],xmm10[3],xmm6[4],xmm10[4],xmm6[5],xmm10[5],xmm6[6],xmm10[6],xmm6[7],xmm10[7]<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm11[0],xmm4[1],xmm11[1],xmm4[2],xmm11[2],xmm4[3],xmm11[3],xmm4[4],xmm11[4],xmm4[5],xmm11[5],xmm4[6],xmm11[6],xmm4[7],xmm11[7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1],xmm4[2],xmm6[2],xmm4[3],xmm6[3]<br>
> -; SSE2-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm12[0],xmm3[1],xmm12[1],xmm3[2],xmm12[2],xmm3[3],xmm12[3],xmm3[4],xmm12[4],xmm3[5],xmm12[5],xmm3[6],xmm12[6],xmm3[7],xmm12[7]<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm13[0],xmm7[1],xmm13[1],xmm7[2],xmm13[2],xmm7[3],xmm13[3],xmm7[4],xmm13[4],xmm7[5],xmm13[5],xmm7[6],xmm13[6],xmm7[7],xmm13[7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm15[0,1,2,0]<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm8<br>
> +; SSE2-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1]<br>
> +; SSE2-NEXT:    por %xmm8, %xmm2<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm10[0],xmm4[1],xmm10[1],xmm4[2],xmm10[2],xmm4[3],xmm10[3],xmm4[4],xmm10[4],xmm4[5],xmm10[5],xmm4[6],xmm10[6],xmm4[7],xmm10[7]<br>
> +; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5]<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm11[0],xmm7[1],xmm11[1],xmm7[2],xmm11[2],xmm7[3],xmm11[3],xmm7[4],xmm11[4],xmm7[5],xmm11[5],xmm7[6],xmm11[6],xmm7[7],xmm11[7]<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [65535,65535,65535,65535,65535,0,65535,65535]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,1,0,1]<br>
> +; SSE2-NEXT:    pand %xmm8, %xmm7<br>
> +; SSE2-NEXT:    pandn %xmm4, %xmm8<br>
> +; SSE2-NEXT:    por %xmm7, %xmm8<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[0,1,2,2]<br>
> +; SSE2-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm2[2],xmm4[3],xmm2[3]<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm12[0],xmm0[1],xmm12[1],xmm0[2],xmm12[2],xmm0[3],xmm12[3],xmm0[4],xmm12[4],xmm0[5],xmm12[5],xmm0[6],xmm12[6],xmm0[7],xmm12[7]<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm13[0],xmm6[1],xmm13[1],xmm6[2],xmm13[2],xmm6[3],xmm13[3],xmm6[4],xmm13[4],xmm6[5],xmm13[5],xmm6[6],xmm13[6],xmm6[7],xmm13[7]<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,0,65535,65535,65535,65535,65535,65535]<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    pslld $16, %xmm6<br>
> +; SSE2-NEXT:    pandn %xmm6, %xmm2<br>
> +; SSE2-NEXT:    por %xmm0, %xmm2<br>
>  ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm14[0],xmm5[1],xmm14[1],xmm5[2],xmm14[2],xmm5[3],xmm14[3],xmm5[4],xmm14[4],xmm5[5],xmm14[5],xmm5[6],xmm14[6],xmm5[7],xmm14[7]<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1],xmm1[2],xmm5[2],xmm1[3],xmm5[3]<br>
> -; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[1],xmm7[1]<br>
> -; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]<br>
> -; SSE2-NEXT:    movdqu %xmm4, (%rax)<br>
> +; SSE2-NEXT:    psllq $48, %xmm5<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [65535,65535,65535,0,65535,65535,65535,65535]<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pandn %xmm5, %xmm0<br>
> +; SSE2-NEXT:    por %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
> +; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]<br>
> +; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3]<br>
> +; SSE2-NEXT:    movups %xmm2, (%rax)<br>
>  ; SSE2-NEXT:    popq %rbx<br>
>  ; SSE2-NEXT:    popq %r12<br>
>  ; SSE2-NEXT:    popq %r13<br>
> @@ -2025,118 +2087,181 @@ define void @not_avg_v16i8_wide_constant<br>
>  ; AVX1-NEXT:    pushq %r13<br>
>  ; AVX1-NEXT:    pushq %r12<br>
>  ; AVX1-NEXT:    pushq %rbx<br>
> -; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> -; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm3 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> +; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
>  ; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> -; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm5 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm6 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]<br>
> -; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm7 = xmm4[2],xmm2[2],xmm4[3],xmm2[3]<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm7, %r15<br>
> -; AVX1-NEXT:    vmovq %xmm7, %r14<br>
> -; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm4 = xmm4[0],zero,xmm4[1],zero<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm4, %r11<br>
> -; AVX1-NEXT:    vmovq %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> +; AVX1-NEXT:    vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> +; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> +; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm5[2],xmm3[2],xmm5[3],xmm3[3]<br>
> +; AVX1-NEXT:    vmovq %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm5 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm5[2],xmm3[2],xmm5[3],xmm3[3]<br>
> +; AVX1-NEXT:    vmovq %xmm6, %r10<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm6, %r9<br>
> +; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm6 = xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]<br>
> +; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm7 = xmm6[0],zero,xmm6[1],zero<br>
> +; AVX1-NEXT:    vmovq %xmm7, %r8<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm7, %rdi<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm6[2],xmm3[2],xmm6[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm6, %rcx<br>
> +; AVX1-NEXT:    vmovq %xmm6, %r14<br>
> +; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm6 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm6[2],xmm3[2],xmm6[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm6, %rax<br>
> +; AVX1-NEXT:    vmovq %xmm6, %rbp<br>
> +; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm5 = xmm5[0],zero,xmm5[1],zero<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm5, %r11<br>
> +; AVX1-NEXT:    vmovq %xmm5, %r15<br>
> +; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm8 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero<br>
> +; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm4, %rbx<br>
> +; AVX1-NEXT:    vmovq %xmm4, %rdx<br>
>  ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm4 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm4[2],xmm2[2],xmm4[3],xmm2[3]<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX1-NEXT:    vmovq %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm4 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> -; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm7 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero<br>
> -; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm8 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm5[4],xmm2[4],xmm5[5],xmm2[5],xmm5[6],xmm2[6],xmm5[7],xmm2[7]<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]<br>
> -; AVX1-NEXT:    vmovd %xmm6, %ecx<br>
> -; AVX1-NEXT:    vpextrd $1, %xmm6, %edx<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm6, %r13d<br>
> -; AVX1-NEXT:    vpextrd $3, %xmm6, %r12d<br>
> -; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm3[2],xmm2[2],xmm3[3],xmm2[3]<br>
> -; AVX1-NEXT:    vmovd %xmm1, %ebx<br>
> -; AVX1-NEXT:    vpextrd $1, %xmm1, %ebp<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm1, %esi<br>
> -; AVX1-NEXT:    vpextrd $3, %xmm1, %edi<br>
> -; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero<br>
> -; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero<br>
> -; AVX1-NEXT:    vmovd %xmm7, %r8d<br>
> -; AVX1-NEXT:    leal -1(%r12,%rdi), %eax<br>
> -; AVX1-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm7, %eax<br>
> -; AVX1-NEXT:    leal -1(%r13,%rsi), %esi<br>
> -; AVX1-NEXT:    movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm4, %edi<br>
> -; AVX1-NEXT:    leal -1(%rdx,%rbp), %edx<br>
> -; AVX1-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX1-NEXT:    vpextrd $3, %xmm4, %edx<br>
> -; AVX1-NEXT:    leal -1(%rcx,%rbx), %r10d<br>
> -; AVX1-NEXT:    vpextrd $3, %xmm1, %ecx<br>
> -; AVX1-NEXT:    leal -1(%rdx,%rcx), %r9d<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm1, %ecx<br>
> -; AVX1-NEXT:    leal -1(%rdi,%rcx), %edi<br>
> -; AVX1-NEXT:    vpextrd $2, %xmm5, %ecx<br>
> -; AVX1-NEXT:    leal -1(%rax,%rcx), %eax<br>
> -; AVX1-NEXT:    vmovd %xmm5, %ecx<br>
> -; AVX1-NEXT:    leal -1(%r8,%rcx), %r8d<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm6, %rdx<br>
> -; AVX1-NEXT:    leal -1(%r15,%rdx), %r15d<br>
> -; AVX1-NEXT:    vmovq %xmm6, %rdx<br>
> -; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero<br>
> -; AVX1-NEXT:    leal -1(%r14,%rdx), %r14d<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm1, %rdx<br>
> -; AVX1-NEXT:    leal -1(%r11,%rdx), %edx<br>
> -; AVX1-NEXT:    vmovq %xmm1, %rcx<br>
> -; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]<br>
> -; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload<br>
> -; AVX1-NEXT:    leal -1(%rsi,%rcx), %ecx<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm1, %rsi<br>
> -; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> -; AVX1-NEXT:    leal -1(%rbp,%rsi), %esi<br>
> -; AVX1-NEXT:    vmovq %xmm1, %rbx<br>
> -; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> -; AVX1-NEXT:    leal -1(%rbp,%rbx), %ebx<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm8, %r11<br>
> -; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero<br>
> -; AVX1-NEXT:    vpextrq $1, %xmm0, %r12<br>
> -; AVX1-NEXT:    leal -1(%r11,%r12), %r11d<br>
> -; AVX1-NEXT:    vmovq %xmm8, %r12<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm7 = xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm7[2],xmm3[2],xmm7[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]<br>
> +; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm6 = xmm0[0],zero,xmm0[1],zero<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm0, %rsi<br>
> +; AVX1-NEXT:    addq %rcx, %rsi<br>
>  ; AVX1-NEXT:    vmovq %xmm0, %r13<br>
> -; AVX1-NEXT:    leal -1(%r12,%r13), %ebp<br>
> -; AVX1-NEXT:    shrl %ebp<br>
> -; AVX1-NEXT:    vmovd %ebp, %xmm0<br>
> -; AVX1-NEXT:    shrl %r11d<br>
> -; AVX1-NEXT:    vpinsrb $1, %r11d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %ebx<br>
> -; AVX1-NEXT:    vpinsrb $2, %ebx, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %esi<br>
> -; AVX1-NEXT:    vpinsrb $3, %esi, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %ecx<br>
> -; AVX1-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %edx<br>
> -; AVX1-NEXT:    vpinsrb $5, %edx, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %r14d<br>
> -; AVX1-NEXT:    vpinsrb $6, %r14d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %r15d<br>
> -; AVX1-NEXT:    vpinsrb $7, %r15d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %r8d<br>
> -; AVX1-NEXT:    vpinsrb $8, %r8d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %eax<br>
> -; AVX1-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %edi<br>
> -; AVX1-NEXT:    vpinsrb $10, %edi, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %r9d<br>
> -; AVX1-NEXT:    vpinsrb $11, %r9d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    shrl %r10d<br>
> -; AVX1-NEXT:    vpinsrb $12, %r10d, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX1-NEXT:    shrl %eax<br>
> -; AVX1-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX1-NEXT:    shrl %eax<br>
> -; AVX1-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX1-NEXT:    shrl %eax<br>
> -; AVX1-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    addq %r14, %r13<br>
> +; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm0, %r12<br>
> +; AVX1-NEXT:    addq %rax, %r12<br>
> +; AVX1-NEXT:    vmovq %xmm0, %r14<br>
> +; AVX1-NEXT:    addq %rbp, %r14<br>
> +; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm7[0],zero,xmm7[1],zero<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm0, %rbp<br>
> +; AVX1-NEXT:    addq %r11, %rbp<br>
> +; AVX1-NEXT:    vmovq %xmm0, %r11<br>
> +; AVX1-NEXT:    addq %r15, %r11<br>
> +; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm0, %r15<br>
> +; AVX1-NEXT:    addq %rbx, %r15<br>
> +; AVX1-NEXT:    vmovq %xmm0, %rbx<br>
> +; AVX1-NEXT:    addq %rdx, %rbx<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm6, %rax<br>
> +; AVX1-NEXT:    leaq -1(%rdi,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vmovq %xmm6, %rax<br>
> +; AVX1-NEXT:    leaq -1(%r8,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm5, %rax<br>
> +; AVX1-NEXT:    leaq -1(%r9,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vmovq %xmm5, %rax<br>
> +; AVX1-NEXT:    leaq -1(%r10,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm4, %rax<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; AVX1-NEXT:    leaq -1(%rcx,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vmovq %xmm4, %rax<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; AVX1-NEXT:    leaq -1(%rcx,%rax), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm8, %rax<br>
> +; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero<br>
> +; AVX1-NEXT:    vpextrq $1, %xmm0, %rcx<br>
> +; AVX1-NEXT:    leaq -1(%rax,%rcx), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    vmovq %xmm8, %rax<br>
> +; AVX1-NEXT:    vmovq %xmm0, %rcx<br>
> +; AVX1-NEXT:    leaq -1(%rax,%rcx), %rax<br>
> +; AVX1-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    xorl %r10d, %r10d<br>
> +; AVX1-NEXT:    addq $-1, %rsi<br>
> +; AVX1-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX1-NEXT:    movl $0, %ecx<br>
> +; AVX1-NEXT:    adcq $-1, %rcx<br>
> +; AVX1-NEXT:    addq $-1, %r13<br>
> +; AVX1-NEXT:    movl $0, %eax<br>
> +; AVX1-NEXT:    adcq $-1, %rax<br>
> +; AVX1-NEXT:    addq $-1, %r12<br>
> +; AVX1-NEXT:    movl $0, %edi<br>
> +; AVX1-NEXT:    adcq $-1, %rdi<br>
> +; AVX1-NEXT:    addq $-1, %r14<br>
> +; AVX1-NEXT:    movl $0, %esi<br>
> +; AVX1-NEXT:    adcq $-1, %rsi<br>
> +; AVX1-NEXT:    addq $-1, %rbp<br>
> +; AVX1-NEXT:    movl $0, %r9d<br>
> +; AVX1-NEXT:    adcq $-1, %r9<br>
> +; AVX1-NEXT:    addq $-1, %r11<br>
> +; AVX1-NEXT:    movl $0, %r8d<br>
> +; AVX1-NEXT:    adcq $-1, %r8<br>
> +; AVX1-NEXT:    addq $-1, %r15<br>
> +; AVX1-NEXT:    movl $0, %edx<br>
> +; AVX1-NEXT:    adcq $-1, %rdx<br>
> +; AVX1-NEXT:    addq $-1, %rbx<br>
> +; AVX1-NEXT:    adcq $-1, %r10<br>
> +; AVX1-NEXT:    shldq $63, %r11, %r8<br>
> +; AVX1-NEXT:    shldq $63, %rbp, %r9<br>
> +; AVX1-NEXT:    shldq $63, %r14, %rsi<br>
> +; AVX1-NEXT:    shldq $63, %r12, %rdi<br>
> +; AVX1-NEXT:    shldq $63, %r13, %rax<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> +; AVX1-NEXT:    shldq $63, %rbp, %rcx<br>
> +; AVX1-NEXT:    shldq $63, %rbx, %r10<br>
> +; AVX1-NEXT:    shldq $63, %r15, %rdx<br>
> +; AVX1-NEXT:    vmovq %rcx, %xmm8<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm9<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm0<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm11<br>
> +; AVX1-NEXT:    vmovq %rdi, %xmm12<br>
> +; AVX1-NEXT:    vmovq %rsi, %xmm13<br>
> +; AVX1-NEXT:    vmovq %rdx, %xmm14<br>
> +; AVX1-NEXT:    vmovq %r10, %xmm15<br>
> +; AVX1-NEXT:    vmovq %r9, %xmm10<br>
> +; AVX1-NEXT:    vmovq %r8, %xmm1<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm2<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm3<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm4<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm5<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm6<br>
> +; AVX1-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX1-NEXT:    shrq %rax<br>
> +; AVX1-NEXT:    vmovq %rax, %xmm7<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm8 = xmm9[0],xmm8[0],xmm9[1],xmm8[1],xmm9[2],xmm8[2],xmm9[3],xmm8[3],xmm9[4],xmm8[4],xmm9[5],xmm8[5],xmm9[6],xmm8[6],xmm9[7],xmm8[7]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm9 = xmm11[0],xmm0[0],xmm11[1],xmm0[1],xmm11[2],xmm0[2],xmm11[3],xmm0[3],xmm11[4],xmm0[4],xmm11[5],xmm0[5],xmm11[6],xmm0[6],xmm11[7],xmm0[7]<br>
> +; AVX1-NEXT:    vpsllq $48, %xmm8, %xmm8<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm9[0,0,1,1]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm8 = xmm0[0,1,2],xmm8[3],xmm0[4,5,6,7]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm13[0],xmm12[0],xmm13[1],xmm12[1],xmm13[2],xmm12[2],xmm13[3],xmm12[3],xmm13[4],xmm12[4],xmm13[5],xmm12[5],xmm13[6],xmm12[6],xmm13[7],xmm12[7]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm9 = xmm15[0],xmm14[0],xmm15[1],xmm14[1],xmm15[2],xmm14[2],xmm15[3],xmm14[3],xmm15[4],xmm14[4],xmm15[5],xmm14[5],xmm15[6],xmm14[6],xmm15[7],xmm14[7]<br>
> +; AVX1-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm9[0],xmm0[1],xmm9[2,3,4,5,6,7]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm8[2,3],xmm0[4,5,6,7]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0],xmm10[0],xmm1[1],xmm10[1],xmm1[2],xmm10[2],xmm1[3],xmm10[3],xmm1[4],xmm10[4],xmm1[5],xmm10[5],xmm1[6],xmm10[6],xmm1[7],xmm10[7]<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]<br>
> +; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,6],xmm2[7]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]<br>
> +; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5]<br>
> +; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm7[0],xmm6[0],xmm7[1],xmm6[1],xmm7[2],xmm6[2],xmm7[3],xmm6[3],xmm7[4],xmm6[4],xmm7[5],xmm6[5],xmm7[6],xmm6[6],xmm7[7],xmm6[7]<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[0,1,0,1]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3,4],xmm2[5],xmm3[6,7]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3,4,5],xmm1[6,7]<br>
> +; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]<br>
>  ; AVX1-NEXT:    vmovdqu %xmm0, (%rax)<br>
>  ; AVX1-NEXT:    popq %rbx<br>
>  ; AVX1-NEXT:    popq %r12<br>
> @@ -2154,123 +2279,230 @@ define void @not_avg_v16i8_wide_constant<br>
>  ; AVX2-NEXT:    pushq %r13<br>
>  ; AVX2-NEXT:    pushq %r12<br>
>  ; AVX2-NEXT:    pushq %rbx<br>
> +; AVX2-NEXT:    subq $16, %rsp<br>
>  ; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
>  ; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> -; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm10 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm4, %rbx<br>
> +; AVX2-NEXT:    vmovq %xmm4, %rbp<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %rdi<br>
> +; AVX2-NEXT:    vmovq %xmm3, %rcx<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %rdx<br>
> +; AVX2-NEXT:    vmovq %xmm3, %r9<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm2, %r13<br>
> +; AVX2-NEXT:    vmovq %xmm2, %r12<br>
>  ; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm5 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm4<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm9 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm9, %xmm7<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
>  ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm2, %r15<br>
> -; AVX2-NEXT:    vmovq %xmm2, %r14<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %r14<br>
> +; AVX2-NEXT:    vmovq %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    vmovq %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
>  ; AVX2-NEXT:    vpextrq $1, %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX2-NEXT:    vmovq %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm10, %xmm1<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm1, %r13<br>
> -; AVX2-NEXT:    vmovq %xmm1, %r11<br>
> -; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm11 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> +; AVX2-NEXT:    vmovq %xmm1, %r10<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2<br>
> +; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm4, %rax<br>
> +; AVX2-NEXT:    addq %rbx, %rax<br>
> +; AVX2-NEXT:    movq %rax, %rbx<br>
> +; AVX2-NEXT:    vmovq %xmm4, %rsi<br>
> +; AVX2-NEXT:    addq %rbp, %rsi<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %rax<br>
> +; AVX2-NEXT:    addq %rdi, %rax<br>
> +; AVX2-NEXT:    movq %rax, %rdi<br>
> +; AVX2-NEXT:    vmovq %xmm3, %r11<br>
> +; AVX2-NEXT:    addq %rcx, %r11<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %rcx<br>
> +; AVX2-NEXT:    addq %rdx, %rcx<br>
> +; AVX2-NEXT:    vmovq %xmm3, %r8<br>
> +; AVX2-NEXT:    addq %r9, %r8<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm2, %r9<br>
> +; AVX2-NEXT:    addq %r13, %r9<br>
> +; AVX2-NEXT:    vmovq %xmm2, %r15<br>
> +; AVX2-NEXT:    addq %r12, %r15<br>
>  ; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm8 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm8, %xmm1<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm6<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm0<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX2-NEXT:    vmovd %xmm9, %r12d<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm9, %r9d<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm0<br>
> -; AVX2-NEXT:    vmovd %xmm7, %ecx<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm7, %edi<br>
> -; AVX2-NEXT:    vmovd %xmm5, %ebx<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm5, %esi<br>
> -; AVX2-NEXT:    vmovd %xmm4, %edx<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm4, %ebp<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm1, %eax<br>
> -; AVX2-NEXT:    leal -1(%rbp,%rax), %eax<br>
> -; AVX2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX2-NEXT:    vmovd %xmm1, %eax<br>
> -; AVX2-NEXT:    leal -1(%rdx,%rax), %eax<br>
> -; AVX2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm8, %eax<br>
> -; AVX2-NEXT:    leal -1(%rsi,%rax), %eax<br>
> -; AVX2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX2-NEXT:    vmovd %xmm8, %eax<br>
> -; AVX2-NEXT:    leal -1(%rbx,%rax), %r10d<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm6, %eax<br>
> -; AVX2-NEXT:    leal -1(%rdi,%rax), %r8d<br>
> -; AVX2-NEXT:    vmovd %xmm6, %eax<br>
> -; AVX2-NEXT:    leal -1(%rcx,%rax), %edi<br>
> -; AVX2-NEXT:    vpextrd $2, %xmm3, %eax<br>
> -; AVX2-NEXT:    leal -1(%r9,%rax), %r9d<br>
> -; AVX2-NEXT:    vmovd %xmm3, %ecx<br>
> -; AVX2-NEXT:    leal -1(%r12,%rcx), %r12d<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm0, %rcx<br>
> -; AVX2-NEXT:    leal -1(%r15,%rcx), %r15d<br>
> -; AVX2-NEXT:    vmovq %xmm0, %rcx<br>
> -; AVX2-NEXT:    leal -1(%r14,%rcx), %r14d<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm2, %rdx<br>
> -; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> -; AVX2-NEXT:    leal -1(%rax,%rdx), %edx<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm3, %rax<br>
> +; AVX2-NEXT:    addq %r14, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    vmovq %xmm3, %rax<br>
> +; AVX2-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm2, %rax<br>
> +; AVX2-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
>  ; AVX2-NEXT:    vmovq %xmm2, %rax<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm11, %xmm0<br>
> +; AVX2-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm0, %rbp<br>
> +; AVX2-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    vmovq %xmm0, %r12<br>
> +; AVX2-NEXT:    addq %r10, %r12<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm1, %rax<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> +; AVX2-NEXT:    vpextrq $1, %xmm0, %r10<br>
> +; AVX2-NEXT:    addq %rax, %r10<br>
> +; AVX2-NEXT:    vmovq %xmm1, %rax<br>
> +; AVX2-NEXT:    vmovq %xmm0, %rdx<br>
> +; AVX2-NEXT:    addq %rax, %rdx<br>
> +; AVX2-NEXT:    addq $-1, %rbx<br>
> +; AVX2-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %rsi<br>
> +; AVX2-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, (%rsp) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %rdi<br>
> +; AVX2-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %r11<br>
> +; AVX2-NEXT:    movq %r11, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %rcx<br>
> +; AVX2-NEXT:    movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %r8<br>
> +; AVX2-NEXT:    movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    addq $-1, %r9<br>
> +; AVX2-NEXT:    movq %r9, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %eax<br>
> +; AVX2-NEXT:    adcq $-1, %rax<br>
> +; AVX2-NEXT:    movq %rax, %rsi<br>
> +; AVX2-NEXT:    addq $-1, %r15<br>
> +; AVX2-NEXT:    movq %r15, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movl $0, %r15d<br>
> +; AVX2-NEXT:    adcq $-1, %r15<br>
> +; AVX2-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    movl $0, %r13d<br>
> +; AVX2-NEXT:    adcq $-1, %r13<br>
> +; AVX2-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    movl $0, %r14d<br>
> +; AVX2-NEXT:    adcq $-1, %r14<br>
> +; AVX2-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX2-NEXT:    movl $0, %ebx<br>
> +; AVX2-NEXT:    adcq $-1, %rbx<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    addq $-1, %rax<br>
> +; AVX2-NEXT:    movl $0, %r11d<br>
> +; AVX2-NEXT:    adcq $-1, %r11<br>
> +; AVX2-NEXT:    addq $-1, %rbp<br>
> +; AVX2-NEXT:    movl $0, %r9d<br>
> +; AVX2-NEXT:    adcq $-1, %r9<br>
> +; AVX2-NEXT:    addq $-1, %r12<br>
> +; AVX2-NEXT:    movl $0, %r8d<br>
> +; AVX2-NEXT:    adcq $-1, %r8<br>
> +; AVX2-NEXT:    addq $-1, %r10<br>
> +; AVX2-NEXT:    movl $0, %edi<br>
> +; AVX2-NEXT:    adcq $-1, %rdi<br>
> +; AVX2-NEXT:    addq $-1, %rdx<br>
> +; AVX2-NEXT:    movl $0, %ecx<br>
> +; AVX2-NEXT:    adcq $-1, %rcx<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %rcx<br>
> +; AVX2-NEXT:    movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    shldq $63, %r10, %rdi<br>
> +; AVX2-NEXT:    shldq $63, %r12, %r8<br>
> +; AVX2-NEXT:    shldq $63, %rbp, %r9<br>
> +; AVX2-NEXT:    shldq $63, %rax, %r11<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %rbx<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %r14<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %r13<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %r15<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %rsi<br>
> +; AVX2-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %rsi<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %r12<br>
>  ; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> -; AVX2-NEXT:    leal -1(%rcx,%rax), %eax<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm0, %rsi<br>
> -; AVX2-NEXT:    leal -1(%r13,%rsi), %esi<br>
> -; AVX2-NEXT:    vmovq %xmm0, %rbx<br>
> -; AVX2-NEXT:    leal -1(%r11,%rbx), %ebx<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm10, %rcx<br>
> -; AVX2-NEXT:    vpextrq $1, %xmm11, %r13<br>
> -; AVX2-NEXT:    leal -1(%rcx,%r13), %ecx<br>
> -; AVX2-NEXT:    vmovq %xmm10, %r13<br>
> -; AVX2-NEXT:    vmovq %xmm11, %r11<br>
> -; AVX2-NEXT:    leaq -1(%r13,%r11), %rbp<br>
> -; AVX2-NEXT:    shrq %rbp<br>
> -; AVX2-NEXT:    vmovd %ebp, %xmm0<br>
> -; AVX2-NEXT:    shrl %ecx<br>
> -; AVX2-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %ebx<br>
> -; AVX2-NEXT:    vpinsrb $2, %ebx, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %esi<br>
> -; AVX2-NEXT:    vpinsrb $3, %esi, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %eax<br>
> -; AVX2-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %edx<br>
> -; AVX2-NEXT:    vpinsrb $5, %edx, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r14d<br>
> -; AVX2-NEXT:    vpinsrb $6, %r14d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r15d<br>
> -; AVX2-NEXT:    vpinsrb $7, %r15d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r12d<br>
> -; AVX2-NEXT:    vpinsrb $8, %r12d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r9d<br>
> -; AVX2-NEXT:    vpinsrb $9, %r9d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %edi<br>
> -; AVX2-NEXT:    vpinsrb $10, %edi, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r8d<br>
> -; AVX2-NEXT:    vpinsrb $11, %r8d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    shrl %r10d<br>
> -; AVX2-NEXT:    vpinsrb $12, %r10d, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX2-NEXT:    shrl %eax<br>
> -; AVX2-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX2-NEXT:    shrl %eax<br>
> -; AVX2-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX2-NEXT:    shrl %eax<br>
> -; AVX2-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %rcx<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rax, %r10<br>
> +; AVX2-NEXT:    movq (%rsp), %rax # 8-byte Reload<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %rax<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX2-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload<br>
> +; AVX2-NEXT:    shldq $63, %rdx, %rbp<br>
> +; AVX2-NEXT:    vmovq %rbp, %xmm8<br>
> +; AVX2-NEXT:    vmovq %rax, %xmm9<br>
> +; AVX2-NEXT:    vmovq %r10, %xmm0<br>
> +; AVX2-NEXT:    vmovq %rcx, %xmm1<br>
> +; AVX2-NEXT:    vmovq %r12, %xmm12<br>
> +; AVX2-NEXT:    vmovq %rsi, %xmm13<br>
> +; AVX2-NEXT:    vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    # xmm14 = mem[0],zero<br>
> +; AVX2-NEXT:    vmovq %r15, %xmm15<br>
> +; AVX2-NEXT:    vmovq %r13, %xmm10<br>
> +; AVX2-NEXT:    vmovq %r14, %xmm11<br>
> +; AVX2-NEXT:    vmovq %rbx, %xmm2<br>
> +; AVX2-NEXT:    vmovq %r11, %xmm3<br>
> +; AVX2-NEXT:    vmovq %r9, %xmm4<br>
> +; AVX2-NEXT:    vmovq %r8, %xmm5<br>
> +; AVX2-NEXT:    vmovq %rdi, %xmm6<br>
> +; AVX2-NEXT:    vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 8-byte Folded Reload<br>
> +; AVX2-NEXT:    # xmm7 = mem[0],zero<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm8 = xmm9[0],xmm8[0],xmm9[1],xmm8[1],xmm9[2],xmm8[2],xmm9[3],xmm8[3],xmm9[4],xmm8[4],xmm9[5],xmm8[5],xmm9[6],xmm8[6],xmm9[7],xmm8[7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm9 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm8, %xmm8<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm9, %xmm0<br>
> +; AVX2-NEXT:    vpblendw {{.*#+}} xmm8 = xmm0[0,1,2,3,4,5,6],xmm8[7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm13[0],xmm12[0],xmm13[1],xmm12[1],xmm13[2],xmm12[2],xmm13[3],xmm12[3],xmm13[4],xmm12[4],xmm13[5],xmm12[5],xmm13[6],xmm12[6],xmm13[7],xmm12[7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm9 = xmm15[0],xmm14[0],xmm15[1],xmm14[1],xmm15[2],xmm14[2],xmm15[3],xmm14[3],xmm15[4],xmm14[4],xmm15[5],xmm14[5],xmm15[6],xmm14[6],xmm15[7],xmm14[7]<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm9, %xmm1<br>
> +; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4],xmm0[5],xmm1[6,7]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1,2],xmm8[3]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm11[0],xmm10[0],xmm11[1],xmm10[1],xmm11[2],xmm10[2],xmm11[3],xmm10[3],xmm11[4],xmm10[4],xmm11[5],xmm10[5],xmm11[6],xmm10[6],xmm11[7],xmm10[7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm2, %xmm2<br>
> +; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2],xmm1[3],xmm2[4,5,6,7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]<br>
> +; AVX2-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm7[0],xmm6[0],xmm7[1],xmm6[1],xmm7[2],xmm6[2],xmm7[3],xmm6[3],xmm7[4],xmm6[4],xmm7[5],xmm6[5],xmm7[6],xmm6[6],xmm7[7],xmm6[7]<br>
> +; AVX2-NEXT:    vpbroadcastw %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1],xmm2[2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0],xmm1[1],xmm2[2,3]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]<br>
>  ; AVX2-NEXT:    vmovdqu %xmm0, (%rax)<br>
> +; AVX2-NEXT:    addq $16, %rsp<br>
>  ; AVX2-NEXT:    popq %rbx<br>
>  ; AVX2-NEXT:    popq %r12<br>
>  ; AVX2-NEXT:    popq %r13<br>
> @@ -2280,139 +2512,414 @@ define void @not_avg_v16i8_wide_constant<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> -; AVX512-LABEL: not_avg_v16i8_wide_constants:<br>
> -; AVX512:       # %bb.0:<br>
> -; AVX512-NEXT:    pushq %rbp<br>
> -; AVX512-NEXT:    pushq %r15<br>
> -; AVX512-NEXT:    pushq %r14<br>
> -; AVX512-NEXT:    pushq %r13<br>
> -; AVX512-NEXT:    pushq %r12<br>
> -; AVX512-NEXT:    pushq %rbx<br>
> -; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> -; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> -; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm10 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> -; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm3<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm5 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm5, %xmm4<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm9 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm9, %xmm7<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm1<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm2, %r15<br>
> -; AVX512-NEXT:    vmovq %xmm2, %r14<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX512-NEXT:    vmovq %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm10, %xmm1<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm1, %r13<br>
> -; AVX512-NEXT:    vmovq %xmm1, %r11<br>
> -; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm11 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> -; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm8 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm8, %xmm1<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm3, %xmm6<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm0<br>
> -; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX512-NEXT:    vmovd %xmm9, %r12d<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm9, %r9d<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm2, %xmm0<br>
> -; AVX512-NEXT:    vmovd %xmm7, %ecx<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm7, %edi<br>
> -; AVX512-NEXT:    vmovd %xmm5, %ebx<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm5, %esi<br>
> -; AVX512-NEXT:    vmovd %xmm4, %edx<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm4, %ebp<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm1, %eax<br>
> -; AVX512-NEXT:    leal -1(%rbp,%rax), %eax<br>
> -; AVX512-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX512-NEXT:    vmovd %xmm1, %eax<br>
> -; AVX512-NEXT:    leal -1(%rdx,%rax), %eax<br>
> -; AVX512-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm8, %eax<br>
> -; AVX512-NEXT:    leal -1(%rsi,%rax), %eax<br>
> -; AVX512-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> -; AVX512-NEXT:    vmovd %xmm8, %eax<br>
> -; AVX512-NEXT:    leal -1(%rbx,%rax), %r10d<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm6, %eax<br>
> -; AVX512-NEXT:    leal -1(%rdi,%rax), %r8d<br>
> -; AVX512-NEXT:    vmovd %xmm6, %eax<br>
> -; AVX512-NEXT:    leal -1(%rcx,%rax), %edi<br>
> -; AVX512-NEXT:    vpextrd $2, %xmm3, %eax<br>
> -; AVX512-NEXT:    leal -1(%r9,%rax), %r9d<br>
> -; AVX512-NEXT:    vmovd %xmm3, %ecx<br>
> -; AVX512-NEXT:    leal -1(%r12,%rcx), %r12d<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm0, %rcx<br>
> -; AVX512-NEXT:    leal -1(%r15,%rcx), %r15d<br>
> -; AVX512-NEXT:    vmovq %xmm0, %rcx<br>
> -; AVX512-NEXT:    leal -1(%r14,%rcx), %r14d<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm2, %rdx<br>
> -; AVX512-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> -; AVX512-NEXT:    leal -1(%rax,%rdx), %edx<br>
> -; AVX512-NEXT:    vmovq %xmm2, %rax<br>
> -; AVX512-NEXT:    vextracti128 $1, %ymm11, %xmm0<br>
> -; AVX512-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> -; AVX512-NEXT:    leal -1(%rcx,%rax), %eax<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi<br>
> -; AVX512-NEXT:    leal -1(%r13,%rsi), %esi<br>
> -; AVX512-NEXT:    vmovq %xmm0, %rbx<br>
> -; AVX512-NEXT:    leal -1(%r11,%rbx), %ebx<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm10, %rcx<br>
> -; AVX512-NEXT:    vpextrq $1, %xmm11, %r13<br>
> -; AVX512-NEXT:    leal -1(%rcx,%r13), %ecx<br>
> -; AVX512-NEXT:    vmovq %xmm10, %r13<br>
> -; AVX512-NEXT:    vmovq %xmm11, %r11<br>
> -; AVX512-NEXT:    leaq -1(%r13,%r11), %rbp<br>
> -; AVX512-NEXT:    shrq %rbp<br>
> -; AVX512-NEXT:    vmovd %ebp, %xmm0<br>
> -; AVX512-NEXT:    shrl %ecx<br>
> -; AVX512-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %ebx<br>
> -; AVX512-NEXT:    vpinsrb $2, %ebx, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %esi<br>
> -; AVX512-NEXT:    vpinsrb $3, %esi, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %eax<br>
> -; AVX512-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %edx<br>
> -; AVX512-NEXT:    vpinsrb $5, %edx, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r14d<br>
> -; AVX512-NEXT:    vpinsrb $6, %r14d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r15d<br>
> -; AVX512-NEXT:    vpinsrb $7, %r15d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r12d<br>
> -; AVX512-NEXT:    vpinsrb $8, %r12d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r9d<br>
> -; AVX512-NEXT:    vpinsrb $9, %r9d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %edi<br>
> -; AVX512-NEXT:    vpinsrb $10, %edi, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r8d<br>
> -; AVX512-NEXT:    vpinsrb $11, %r8d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    shrl %r10d<br>
> -; AVX512-NEXT:    vpinsrb $12, %r10d, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX512-NEXT:    shrl %eax<br>
> -; AVX512-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX512-NEXT:    shrl %eax<br>
> -; AVX512-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> -; AVX512-NEXT:    shrl %eax<br>
> -; AVX512-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0<br>
> -; AVX512-NEXT:    vmovdqu %xmm0, (%rax)<br>
> -; AVX512-NEXT:    popq %rbx<br>
> -; AVX512-NEXT:    popq %r12<br>
> -; AVX512-NEXT:    popq %r13<br>
> -; AVX512-NEXT:    popq %r14<br>
> -; AVX512-NEXT:    popq %r15<br>
> -; AVX512-NEXT:    popq %rbp<br>
> -; AVX512-NEXT:    vzeroupper<br>
> -; AVX512-NEXT:    retq<br>
> +; AVX512F-LABEL: not_avg_v16i8_wide_constants:<br>
> +; AVX512F:       # %bb.0:<br>
> +; AVX512F-NEXT:    pushq %rbp<br>
> +; AVX512F-NEXT:    pushq %r15<br>
> +; AVX512F-NEXT:    pushq %r14<br>
> +; AVX512F-NEXT:    pushq %r13<br>
> +; AVX512F-NEXT:    pushq %r12<br>
> +; AVX512F-NEXT:    pushq %rbx<br>
> +; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> +; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm3 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> +; AVX512F-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> +; AVX512F-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm4<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm4, %xmm5<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm5, %rdx<br>
> +; AVX512F-NEXT:    vmovq %xmm5, %rcx<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm4, %rax<br>
> +; AVX512F-NEXT:    vmovq %xmm4, %rbx<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm4<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm4, %rdi<br>
> +; AVX512F-NEXT:    vmovq %xmm4, %rsi<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm1, %r13<br>
> +; AVX512F-NEXT:    vmovq %xmm1, %r15<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm1<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm2, %r12<br>
> +; AVX512F-NEXT:    vmovq %xmm2, %r14<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm1, %r11<br>
> +; AVX512F-NEXT:    vmovq %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm1, %r10<br>
> +; AVX512F-NEXT:    vmovq %xmm1, %r9<br>
> +; AVX512F-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm3, %xmm3<br>
> +; AVX512F-NEXT:    vpmovzxwd {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm4, %xmm5<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm5, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%rdx,%rbp), %edx<br>
> +; AVX512F-NEXT:    movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> +; AVX512F-NEXT:    vmovq %xmm5, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%rcx,%rbp), %ecx<br>
> +; AVX512F-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm4, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%rax,%rbp), %eax<br>
> +; AVX512F-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill<br>
> +; AVX512F-NEXT:    vmovq %xmm4, %rbp<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX512F-NEXT:    leal -1(%rbx,%rbp), %r8d<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm4, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%rdi,%rbp), %edi<br>
> +; AVX512F-NEXT:    vmovq %xmm4, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%rsi,%rbp), %esi<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm3, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%r13,%rbp), %r13d<br>
> +; AVX512F-NEXT:    vmovq %xmm3, %rbp<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2<br>
> +; AVX512F-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX512F-NEXT:    leal -1(%r15,%rbp), %r15d<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm3, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%r12,%rbp), %r12d<br>
> +; AVX512F-NEXT:    vmovq %xmm3, %rbp<br>
> +; AVX512F-NEXT:    leal -1(%r14,%rbp), %r14d<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm2, %rdx<br>
> +; AVX512F-NEXT:    leal -1(%r11,%rdx), %r11d<br>
> +; AVX512F-NEXT:    vmovq %xmm2, %rbp<br>
> +; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512F-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512F-NEXT:    leal -1(%rax,%rbp), %ebp<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm2, %rcx<br>
> +; AVX512F-NEXT:    leal -1(%r10,%rcx), %ecx<br>
> +; AVX512F-NEXT:    vmovq %xmm2, %rax<br>
> +; AVX512F-NEXT:    leal -1(%r9,%rax), %eax<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm0, %rdx<br>
> +; AVX512F-NEXT:    vpextrq $1, %xmm1, %r10<br>
> +; AVX512F-NEXT:    leal -1(%rdx,%r10), %edx<br>
> +; AVX512F-NEXT:    vmovq %xmm0, %r10<br>
> +; AVX512F-NEXT:    vmovq %xmm1, %r9<br>
> +; AVX512F-NEXT:    leaq -1(%r10,%r9), %rbx<br>
> +; AVX512F-NEXT:    shrq %rbx<br>
> +; AVX512F-NEXT:    vmovd %ebx, %xmm0<br>
> +; AVX512F-NEXT:    shrl %edx<br>
> +; AVX512F-NEXT:    vpinsrb $1, %edx, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %eax<br>
> +; AVX512F-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %ecx<br>
> +; AVX512F-NEXT:    vpinsrb $3, %ecx, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %ebp<br>
> +; AVX512F-NEXT:    vpinsrb $4, %ebp, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r11d<br>
> +; AVX512F-NEXT:    vpinsrb $5, %r11d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r14d<br>
> +; AVX512F-NEXT:    vpinsrb $6, %r14d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r12d<br>
> +; AVX512F-NEXT:    vpinsrb $7, %r12d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r15d<br>
> +; AVX512F-NEXT:    vpinsrb $8, %r15d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r13d<br>
> +; AVX512F-NEXT:    vpinsrb $9, %r13d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %esi<br>
> +; AVX512F-NEXT:    vpinsrb $10, %esi, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %edi<br>
> +; AVX512F-NEXT:    vpinsrb $11, %edi, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    shrl %r8d<br>
> +; AVX512F-NEXT:    vpinsrb $12, %r8d, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> +; AVX512F-NEXT:    shrl %eax<br>
> +; AVX512F-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> +; AVX512F-NEXT:    shrl %eax<br>
> +; AVX512F-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload<br>
> +; AVX512F-NEXT:    shrl %eax<br>
> +; AVX512F-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vmovdqu %xmm0, (%rax)<br>
> +; AVX512F-NEXT:    popq %rbx<br>
> +; AVX512F-NEXT:    popq %r12<br>
> +; AVX512F-NEXT:    popq %r13<br>
> +; AVX512F-NEXT:    popq %r14<br>
> +; AVX512F-NEXT:    popq %r15<br>
> +; AVX512F-NEXT:    popq %rbp<br>
> +; AVX512F-NEXT:    vzeroupper<br>
> +; AVX512F-NEXT:    retq<br>
> +;<br>
> +; AVX512BW-LABEL: not_avg_v16i8_wide_constants:<br>
> +; AVX512BW:       # %bb.0:<br>
> +; AVX512BW-NEXT:    pushq %rbp<br>
> +; AVX512BW-NEXT:    pushq %r15<br>
> +; AVX512BW-NEXT:    pushq %r14<br>
> +; AVX512BW-NEXT:    pushq %r13<br>
> +; AVX512BW-NEXT:    pushq %r12<br>
> +; AVX512BW-NEXT:    pushq %rbx<br>
> +; AVX512BW-NEXT:    subq $24, %rsp<br>
> +; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> +; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero<br>
> +; AVX512BW-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX512BW-NEXT:    vmovq %xmm4, %rbx<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rbp<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %rdi<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rsi<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm2<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %rdx<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %r15<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, %r8<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, %r14<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> +; AVX512BW-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %r9<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %r10<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, %r11<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm0<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm2<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, %r13<br>
> +; AVX512BW-NEXT:    vpmovzxwd {{.*#+}} ymm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm3, %xmm4<br>
> +; AVX512BW-NEXT:    vmovq %xmm4, %rax<br>
> +; AVX512BW-NEXT:    addq %rbx, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, %rbx<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm4, %rax<br>
> +; AVX512BW-NEXT:    addq %rbp, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, %rbp<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %rcx<br>
> +; AVX512BW-NEXT:    addq %rdi, %rcx<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %r12<br>
> +; AVX512BW-NEXT:    addq %rsi, %r12<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm2<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %rax<br>
> +; AVX512BW-NEXT:    addq %rdx, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, %rdx<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rax<br>
> +; AVX512BW-NEXT:    addq %r15, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, %rax<br>
> +; AVX512BW-NEXT:    addq %r8, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, %rax<br>
> +; AVX512BW-NEXT:    addq %r14, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> +; AVX512BW-NEXT:    vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm2, %xmm3<br>
> +; AVX512BW-NEXT:    vmovq %xmm3, %rax<br>
> +; AVX512BW-NEXT:    addq %r9, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm3, %rax<br>
> +; AVX512BW-NEXT:    addq %r10, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, %rax<br>
> +; AVX512BW-NEXT:    addq %r11, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, %r14<br>
> +; AVX512BW-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Folded Reload<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm1<br>
> +; AVX512BW-NEXT:    vpmovzxdq {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512BW-NEXT:    vmovq %xmm2, %r10<br>
> +; AVX512BW-NEXT:    addq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Folded Reload<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm2, %r9<br>
> +; AVX512BW-NEXT:    addq %r13, %r9<br>
> +; AVX512BW-NEXT:    vmovq %xmm0, %rax<br>
> +; AVX512BW-NEXT:    vmovq %xmm1, %r8<br>
> +; AVX512BW-NEXT:    addq %rax, %r8<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm0, %rdi<br>
> +; AVX512BW-NEXT:    vpextrq $1, %xmm1, %rsi<br>
> +; AVX512BW-NEXT:    addq %rdi, %rsi<br>
> +; AVX512BW-NEXT:    addq $-1, %rbx<br>
> +; AVX512BW-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movl $0, %r15d<br>
> +; AVX512BW-NEXT:    adcq $-1, %r15<br>
> +; AVX512BW-NEXT:    addq $-1, %rbp<br>
> +; AVX512BW-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movl $0, %ebx<br>
> +; AVX512BW-NEXT:    adcq $-1, %rbx<br>
> +; AVX512BW-NEXT:    addq $-1, %rcx<br>
> +; AVX512BW-NEXT:    movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movl $0, %r11d<br>
> +; AVX512BW-NEXT:    adcq $-1, %r11<br>
> +; AVX512BW-NEXT:    addq $-1, %r12<br>
> +; AVX512BW-NEXT:    movq %r12, (%rsp) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movl $0, %edi<br>
> +; AVX512BW-NEXT:    adcq $-1, %rdi<br>
> +; AVX512BW-NEXT:    addq $-1, %rdx<br>
> +; AVX512BW-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    movl $0, %r13d<br>
> +; AVX512BW-NEXT:    adcq $-1, %r13<br>
> +; AVX512BW-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    movl $0, %r12d<br>
> +; AVX512BW-NEXT:    adcq $-1, %r12<br>
> +; AVX512BW-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; AVX512BW-NEXT:    addq $-1, %rcx<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, %r14<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, %r10<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    addq $-1, %r9<br>
> +; AVX512BW-NEXT:    movl $0, %edx<br>
> +; AVX512BW-NEXT:    adcq $-1, %rdx<br>
> +; AVX512BW-NEXT:    addq $-1, %r8<br>
> +; AVX512BW-NEXT:    movl $0, %eax<br>
> +; AVX512BW-NEXT:    adcq $-1, %rax<br>
> +; AVX512BW-NEXT:    addq $-1, %rsi<br>
> +; AVX512BW-NEXT:    movl $0, %ebp<br>
> +; AVX512BW-NEXT:    adcq $-1, %rbp<br>
> +; AVX512BW-NEXT:    shldq $63, %rsi, %rbp<br>
> +; AVX512BW-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    shldq $63, %r8, %rax<br>
> +; AVX512BW-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill<br>
> +; AVX512BW-NEXT:    shldq $63, %r9, %rdx<br>
> +; AVX512BW-NEXT:    movq %rdx, %rbp<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %r10, %r8<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %r14, %r10<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r9 # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rcx, %r9<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %r14<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %rsi<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %r12<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %r13<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %rdx<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %rcx<br>
> +; AVX512BW-NEXT:    movq (%rsp), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %rdi<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %r11<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %rbx<br>
> +; AVX512BW-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload<br>
> +; AVX512BW-NEXT:    shldq $63, %rax, %r15<br>
> +; AVX512BW-NEXT:    vmovq %r15, %xmm0<br>
> +; AVX512BW-NEXT:    vmovq %rbx, %xmm1<br>
> +; AVX512BW-NEXT:    vmovq %r11, %xmm2<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> +; AVX512BW-NEXT:    vmovq %rdi, %xmm1<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm1<br>
> +; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm0, %eax<br>
> +; AVX512BW-NEXT:    vmovd %eax, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $1, %eax, %xmm2, %xmm1<br>
> +; AVX512BW-NEXT:    vextracti32x4 $2, %zmm0, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1<br>
> +; AVX512BW-NEXT:    vextracti32x4 $3, %zmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm0, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm0<br>
> +; AVX512BW-NEXT:    vmovq %rcx, %xmm1<br>
> +; AVX512BW-NEXT:    vmovq %rdx, %xmm2<br>
> +; AVX512BW-NEXT:    vmovq %r13, %xmm3<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1<br>
> +; AVX512BW-NEXT:    vmovq %r12, %xmm2<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2<br>
> +; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vmovq %rsi, %xmm1<br>
> +; AVX512BW-NEXT:    vmovq %r14, %xmm2<br>
> +; AVX512BW-NEXT:    vmovq %r9, %xmm3<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1<br>
> +; AVX512BW-NEXT:    vmovq %r10, %xmm2<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2<br>
> +; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $8, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $9, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $10, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $11, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vmovq %r8, %xmm1<br>
> +; AVX512BW-NEXT:    vmovq %rbp, %xmm2<br>
> +; AVX512BW-NEXT:    vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 8-byte Folded Reload<br>
> +; AVX512BW-NEXT:    # xmm3 = mem[0],zero<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1<br>
> +; AVX512BW-NEXT:    vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 8-byte Folded Reload<br>
> +; AVX512BW-NEXT:    # xmm2 = mem[0],zero<br>
> +; AVX512BW-NEXT:    vinserti128 $1, %xmm2, %ymm3, %ymm2<br>
> +; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $12, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $13, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $2, %zmm1, %xmm2<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm2, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $14, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vextracti32x4 $3, %zmm1, %xmm1<br>
> +; AVX512BW-NEXT:    vpextrb $0, %xmm1, %eax<br>
> +; AVX512BW-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vmovdqu %xmm0, (%rax)<br>
> +; AVX512BW-NEXT:    addq $24, %rsp<br>
> +; AVX512BW-NEXT:    popq %rbx<br>
> +; AVX512BW-NEXT:    popq %r12<br>
> +; AVX512BW-NEXT:    popq %r13<br>
> +; AVX512BW-NEXT:    popq %r14<br>
> +; AVX512BW-NEXT:    popq %r15<br>
> +; AVX512BW-NEXT:    popq %rbp<br>
> +; AVX512BW-NEXT:    vzeroupper<br>
> +; AVX512BW-NEXT:    retq<br>
>    %1 = load <16 x i8>, <16 x i8>* %a<br>
>    %2 = load <16 x i8>, <16 x i8>* %b<br>
>    %3 = zext <16 x i8> %1 to <16 x i128><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx-cvt-2.ll Wed Aug  7 09:24:26 2019<br>
> @@ -40,7 +40,7 @@ define void @fptoui8(%f32vec_t %a, %i8ve<br>
>  ; CHECK:       # %bb.0:<br>
>  ; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0<br>
>  ; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1<br>
> -; CHECK-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0<br>
> +; CHECK-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0<br>
>  ; CHECK-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; CHECK-NEXT:    vmovq %xmm0, (%rdi)<br>
>  ; CHECK-NEXT:    vzeroupper<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx-fp2int.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-fp2int.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-fp2int.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx-fp2int.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx-fp2int.ll Wed Aug  7 09:24:26 2019<br>
> @@ -7,6 +7,7 @@ define <4 x i8> @test1(<4 x double> %d)<br>
>  ; CHECK-LABEL: test1:<br>
>  ; CHECK:       ## %bb.0:<br>
>  ; CHECK-NEXT:    vcvttpd2dq %ymm0, %xmm0<br>
> +; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; CHECK-NEXT:    vzeroupper<br>
>  ; CHECK-NEXT:    retl<br>
>    %c = fptoui <4 x double> %d to <4 x i8><br>
> @@ -16,6 +17,7 @@ define <4 x i8> @test2(<4 x double> %d)<br>
>  ; CHECK-LABEL: test2:<br>
>  ; CHECK:       ## %bb.0:<br>
>  ; CHECK-NEXT:    vcvttpd2dq %ymm0, %xmm0<br>
> +; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; CHECK-NEXT:    vzeroupper<br>
>  ; CHECK-NEXT:    retl<br>
>    %c = fptosi <4 x double> %d to <4 x i8><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx2-conversions.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-conversions.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-conversions.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx2-conversions.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx2-conversions.ll Wed Aug  7 09:24:26 2019<br>
> @@ -117,14 +117,12 @@ define <8 x i32> @zext8(<8 x i16> %A) no<br>
>  define <8 x i32> @zext_8i8_8i32(<8 x i8> %A) nounwind {<br>
>  ; X32-LABEL: zext_8i8_8i32:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0<br>
> -; X32-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; X32-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero<br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: zext_8i8_8i32:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0<br>
> -; X64-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; X64-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero<br>
>  ; X64-NEXT:    retq<br>
>    %B = zext <8 x i8> %A to <8 x i32><br>
>    ret <8 x i32>%B<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx2-masked-gather.ll Wed Aug  7 09:24:26 2019<br>
> @@ -9,23 +9,21 @@ declare <2 x i32> @llvm.masked.gather.v2<br>
>  define <2 x i32> @masked_gather_v2i32(<2 x i32*>* %ptr, <2 x i1> %masks, <2 x i32> %passthro) {<br>
>  ; X86-LABEL: masked_gather_v2i32:<br>
>  ; X86:       # %bb.0: # %entry<br>
> -; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X86-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
>  ; X86-NEXT:    vpslld $31, %xmm0, %xmm0<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero<br>
>  ; X86-NEXT:    vpgatherdd %xmm0, (,%xmm2), %xmm1<br>
> -; X86-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; X86-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; X86-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: masked_gather_v2i32:<br>
>  ; X64:       # %bb.0: # %entry<br>
>  ; X64-NEXT:    vmovdqa (%rdi), %xmm2<br>
> -; X64-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; X64-NEXT:    vpslld $31, %xmm0, %xmm0<br>
>  ; X64-NEXT:    vpgatherqd %xmm0, (,%xmm2), %xmm1<br>
> -; X64-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; X64-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; X64-NEXT:    retq<br>
>  ;<br>
>  ; NOGATHER-LABEL: masked_gather_v2i32:<br>
> @@ -43,14 +41,12 @@ define <2 x i32> @masked_gather_v2i32(<2<br>
>  ; NOGATHER-NEXT:    retq<br>
>  ; NOGATHER-NEXT:  .LBB0_1: # %cond.load<br>
>  ; NOGATHER-NEXT:    vmovq %xmm2, %rcx<br>
> -; NOGATHER-NEXT:    movl (%rcx), %ecx<br>
> -; NOGATHER-NEXT:    vpinsrq $0, %rcx, %xmm1, %xmm1<br>
> +; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm1, %xmm1<br>
>  ; NOGATHER-NEXT:    testb $2, %al<br>
>  ; NOGATHER-NEXT:    je .LBB0_4<br>
>  ; NOGATHER-NEXT:  .LBB0_3: # %cond.load1<br>
>  ; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax<br>
> -; NOGATHER-NEXT:    movl (%rax), %eax<br>
> -; NOGATHER-NEXT:    vpinsrq $1, %rax, %xmm1, %xmm1<br>
> +; NOGATHER-NEXT:    vpinsrd $1, (%rax), %xmm1, %xmm1<br>
>  ; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; NOGATHER-NEXT:    retq<br>
>  entry:<br>
> @@ -62,11 +58,10 @@ entry:<br>
>  define <4 x i32> @masked_gather_v2i32_concat(<2 x i32*>* %ptr, <2 x i1> %masks, <2 x i32> %passthro) {<br>
>  ; X86-LABEL: masked_gather_v2i32_concat:<br>
>  ; X86:       # %bb.0: # %entry<br>
> -; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X86-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
>  ; X86-NEXT:    vpslld $31, %xmm0, %xmm0<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero<br>
>  ; X86-NEXT:    vpgatherdd %xmm0, (,%xmm2), %xmm1<br>
>  ; X86-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; X86-NEXT:    retl<br>
> @@ -74,7 +69,6 @@ define <4 x i32> @masked_gather_v2i32_co<br>
>  ; X64-LABEL: masked_gather_v2i32_concat:<br>
>  ; X64:       # %bb.0: # %entry<br>
>  ; X64-NEXT:    vmovdqa (%rdi), %xmm2<br>
> -; X64-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; X64-NEXT:    vpslld $31, %xmm0, %xmm0<br>
>  ; X64-NEXT:    vpgatherqd %xmm0, (,%xmm2), %xmm1<br>
> @@ -92,19 +86,17 @@ define <4 x i32> @masked_gather_v2i32_co<br>
>  ; NOGATHER-NEXT:    testb $2, %al<br>
>  ; NOGATHER-NEXT:    jne .LBB1_3<br>
>  ; NOGATHER-NEXT:  .LBB1_4: # %else2<br>
> -; NOGATHER-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; NOGATHER-NEXT:    retq<br>
>  ; NOGATHER-NEXT:  .LBB1_1: # %cond.load<br>
>  ; NOGATHER-NEXT:    vmovq %xmm2, %rcx<br>
> -; NOGATHER-NEXT:    movl (%rcx), %ecx<br>
> -; NOGATHER-NEXT:    vpinsrq $0, %rcx, %xmm1, %xmm1<br>
> +; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm1, %xmm1<br>
>  ; NOGATHER-NEXT:    testb $2, %al<br>
>  ; NOGATHER-NEXT:    je .LBB1_4<br>
>  ; NOGATHER-NEXT:  .LBB1_3: # %cond.load1<br>
>  ; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax<br>
> -; NOGATHER-NEXT:    movl (%rax), %eax<br>
> -; NOGATHER-NEXT:    vpinsrq $1, %rax, %xmm1, %xmm1<br>
> -; NOGATHER-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; NOGATHER-NEXT:    vpinsrd $1, (%rax), %xmm1, %xmm1<br>
> +; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; NOGATHER-NEXT:    retq<br>
>  entry:<br>
>    %ld  = load <2 x i32*>, <2 x i32*>* %ptr<br>
> @@ -714,10 +706,10 @@ declare <2 x i64> @llvm.masked.gather.v2<br>
>  define <2 x i64> @masked_gather_v2i64(<2 x i64*>* %ptr, <2 x i1> %masks, <2 x i64> %passthro) {<br>
>  ; X86-LABEL: masked_gather_v2i64:<br>
>  ; X86:       # %bb.0: # %entry<br>
> -; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X86-NEXT:    vpmovsxdq (%eax), %xmm2<br>
>  ; X86-NEXT:    vpsllq $63, %xmm0, %xmm0<br>
> -; X86-NEXT:    vpgatherqq %xmm0, (,%xmm2), %xmm1<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero<br>
> +; X86-NEXT:    vpgatherdq %xmm0, (,%xmm2), %xmm1<br>
>  ; X86-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; X86-NEXT:    retl<br>
>  ;<br>
> @@ -763,10 +755,10 @@ declare <2 x double> @llvm.masked.gather<br>
>  define <2 x double> @masked_gather_v2double(<2 x double*>* %ptr, <2 x i1> %masks, <2 x double> %passthro) {<br>
>  ; X86-LABEL: masked_gather_v2double:<br>
>  ; X86:       # %bb.0: # %entry<br>
> -; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X86-NEXT:    vpmovsxdq (%eax), %xmm2<br>
>  ; X86-NEXT:    vpsllq $63, %xmm0, %xmm0<br>
> -; X86-NEXT:    vgatherqpd %xmm0, (,%xmm2), %xmm1<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; X86-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero<br>
> +; X86-NEXT:    vgatherdpd %xmm0, (,%xmm2), %xmm1<br>
>  ; X86-NEXT:    vmovapd %xmm1, %xmm0<br>
>  ; X86-NEXT:    retl<br>
>  ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll Wed Aug  7 09:24:26 2019<br>
> @@ -657,12 +657,12 @@ define <4 x float> @_e2(float* %ptr) nou<br>
>  define <8 x i8> @_e4(i8* %ptr) nounwind uwtable readnone ssp {<br>
>  ; X32-LABEL: _e4:<br>
>  ; X32:       ## %bb.0:<br>
> -; X32-NEXT:    vmovaps {{.*#+}} xmm0 = [52,52,52,52,52,52,52,52]<br>
> +; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <52,52,52,52,52,52,52,52,u,u,u,u,u,u,u,u><br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: _e4:<br>
>  ; X64:       ## %bb.0:<br>
> -; X64-NEXT:    vmovaps {{.*#+}} xmm0 = [52,52,52,52,52,52,52,52]<br>
> +; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <52,52,52,52,52,52,52,52,u,u,u,u,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %vecinit0.i = insertelement <8 x i8> undef, i8       52, i32 0<br>
>    %vecinit1.i = insertelement <8 x i8> %vecinit0.i, i8 52, i32 1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-any_extend_load.ll Wed Aug  7 09:24:26 2019<br>
> @@ -4,13 +4,25 @@<br>
><br>
><br>
>  define void @any_extend_load_v8i64(<8 x i8> * %ptr) {<br>
> -; ALL-LABEL: any_extend_load_v8i64:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpmovzxbq {{.*#+}} zmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero<br>
> -; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
> -; ALL-NEXT:    vpmovqb %zmm0, (%rdi)<br>
> -; ALL-NEXT:    vzeroupper<br>
> -; ALL-NEXT:    retq<br>
> +; KNL-LABEL: any_extend_load_v8i64:<br>
> +; KNL:       # %bb.0:<br>
> +; KNL-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero<br>
> +; KNL-NEXT:    vpmovzxbq {{.*#+}} ymm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero<br>
> +; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
> +; KNL-NEXT:    vpmovzxbq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero<br>
> +; KNL-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0<br>
> +; KNL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
> +; KNL-NEXT:    vpmovqb %zmm0, (%rdi)<br>
> +; KNL-NEXT:    vzeroupper<br>
> +; KNL-NEXT:    retq<br>
> +;<br>
> +; SKX-LABEL: any_extend_load_v8i64:<br>
> +; SKX:       # %bb.0:<br>
> +; SKX-NEXT:    vpmovzxbq {{.*#+}} zmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero<br>
> +; SKX-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
> +; SKX-NEXT:    vpmovqb %zmm0, (%rdi)<br>
> +; SKX-NEXT:    vzeroupper<br>
> +; SKX-NEXT:    retq<br>
>    %wide.load = load <8 x i8>, <8 x i8>* %ptr, align 1<br>
>    %1 = zext <8 x i8> %wide.load to <8 x i64><br>
>    %2 = add nuw nsw <8 x i64> %1, <i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4><br>
> @@ -23,10 +35,12 @@ define void @any_extend_load_v8i64(<8 x<br>
>  define void @any_extend_load_v8i32(<8 x i8> * %ptr) {<br>
>  ; KNL-LABEL: any_extend_load_v8i32:<br>
>  ; KNL:       # %bb.0:<br>
> -; KNL-NEXT:    vpmovzxbw {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero<br>
> -; KNL-NEXT:    vpaddw {{.*}}(%rip), %xmm0, %xmm0<br>
> -; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
> +; KNL-NEXT:    vpmovzxbd {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero<br>
> +; KNL-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]<br>
> +; KNL-NEXT:    vpaddd %ymm1, %ymm0, %ymm0<br>
> +; KNL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vmovq %xmm0, (%rdi)<br>
> +; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: any_extend_load_v8i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-cvt.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-cvt.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-cvt.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-cvt.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-cvt.ll Wed Aug  7 09:24:26 2019<br>
> @@ -513,15 +513,14 @@ define <8 x i8> @f64to8uc(<8 x double> %<br>
>  ; NOVL-LABEL: f64to8uc:<br>
>  ; NOVL:       # %bb.0:<br>
>  ; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0<br>
> -; NOVL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0<br>
> +; NOVL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; NOVL-NEXT:    vzeroupper<br>
>  ; NOVL-NEXT:    retq<br>
>  ;<br>
>  ; VL-LABEL: f64to8uc:<br>
>  ; VL:       # %bb.0:<br>
>  ; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0<br>
> -; VL-NEXT:    vpmovdw %ymm0, %xmm0<br>
> +; VL-NEXT:    vpmovdb %ymm0, %xmm0<br>
>  ; VL-NEXT:    vzeroupper<br>
>  ; VL-NEXT:    retq<br>
>    %res = fptoui <8 x double> %f to <8 x i8><br>
> @@ -657,15 +656,14 @@ define <8 x i8> @f64to8sc(<8 x double> %<br>
>  ; NOVL-LABEL: f64to8sc:<br>
>  ; NOVL:       # %bb.0:<br>
>  ; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0<br>
> -; NOVL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0<br>
> +; NOVL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; NOVL-NEXT:    vzeroupper<br>
>  ; NOVL-NEXT:    retq<br>
>  ;<br>
>  ; VL-LABEL: f64to8sc:<br>
>  ; VL:       # %bb.0:<br>
>  ; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0<br>
> -; VL-NEXT:    vpmovdw %ymm0, %xmm0<br>
> +; VL-NEXT:    vpmovdb %ymm0, %xmm0<br>
>  ; VL-NEXT:    vzeroupper<br>
>  ; VL-NEXT:    retq<br>
>    %res = fptosi <8 x double> %f to <8 x i8><br>
> @@ -1557,9 +1555,7 @@ define <8 x double> @ssto16f64(<8 x i16><br>
>  define <8 x double> @scto8f64(<8 x i8> %a) {<br>
>  ; ALL-LABEL: scto8f64:<br>
>  ; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; ALL-NEXT:    vpslld $24, %ymm0, %ymm0<br>
> -; ALL-NEXT:    vpsrad $24, %ymm0, %ymm0<br>
> +; ALL-NEXT:    vpmovsxbd %xmm0, %ymm0<br>
>  ; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm0<br>
>  ; ALL-NEXT:    retq<br>
>    %1 = sitofp <8 x i8> %a to <8 x double><br>
> @@ -1724,13 +1720,30 @@ define <2 x float> @sbto2f32(<2 x float><br>
>  }<br>
><br>
>  define <2 x double> @sbto2f64(<2 x double> %a) {<br>
> -; ALL-LABEL: sbto2f64:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1<br>
> -; ALL-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0<br>
> -; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; ALL-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> -; ALL-NEXT:    retq<br>
> +; NOVL-LABEL: sbto2f64:<br>
> +; NOVL:       # %bb.0:<br>
> +; NOVL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1<br>
> +; NOVL-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0<br>
> +; NOVL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; NOVL-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> +; NOVL-NEXT:    retq<br>
> +;<br>
> +; VLDQ-LABEL: sbto2f64:<br>
> +; VLDQ:       # %bb.0:<br>
> +; VLDQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm1<br>
> +; VLDQ-NEXT:    vcmpltpd %xmm0, %xmm1, %k0<br>
> +; VLDQ-NEXT:    vpmovm2d %k0, %xmm0<br>
> +; VLDQ-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> +; VLDQ-NEXT:    retq<br>
> +;<br>
> +; VLNODQ-LABEL: sbto2f64:<br>
> +; VLNODQ:       # %bb.0:<br>
> +; VLNODQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm1<br>
> +; VLNODQ-NEXT:    vcmpltpd %xmm0, %xmm1, %k1<br>
> +; VLNODQ-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0<br>
> +; VLNODQ-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}<br>
> +; VLNODQ-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> +; VLNODQ-NEXT:    retq<br>
>    %cmpres = fcmp ogt <2 x double> %a, zeroinitializer<br>
>    %1 = sitofp <2 x i1> %cmpres to <2 x double><br>
>    ret <2 x double> %1<br>
> @@ -1749,8 +1762,7 @@ define <16 x float> @ucto16f32(<16 x i8><br>
>  define <8 x double> @ucto8f64(<8 x i8> %a) {<br>
>  ; ALL-LABEL: ucto8f64:<br>
>  ; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; ALL-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero<br>
>  ; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm0<br>
>  ; ALL-NEXT:    retq<br>
>    %b = uitofp <8 x i8> %a to <8 x double><br>
> @@ -1993,29 +2005,42 @@ define <4 x double> @ubto4f64(<4 x i32><br>
>  }<br>
><br>
>  define <2 x float> @ubto2f32(<2 x i32> %a) {<br>
> -; ALL-LABEL: ubto2f32:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; ALL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]<br>
> -; ALL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpandn {{.*}}(%rip), %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; ALL-NEXT:    retq<br>
> +; NOVL-LABEL: ubto2f32:<br>
> +; NOVL:       # %bb.0:<br>
> +; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; NOVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> +; NOVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1065353216,1065353216,1065353216,1065353216]<br>
> +; NOVL-NEXT:    vpandn %xmm1, %xmm0, %xmm0<br>
> +; NOVL-NEXT:    retq<br>
> +;<br>
> +; VL-LABEL: ubto2f32:<br>
> +; VL:       # %bb.0:<br>
> +; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> +; VL-NEXT:    vpandnd {{.*}}(%rip){1to4}, %xmm0, %xmm0<br>
> +; VL-NEXT:    retq<br>
>    %mask = icmp ne <2 x i32> %a, zeroinitializer<br>
>    %1 = uitofp <2 x i1> %mask to <2 x float><br>
>    ret <2 x float> %1<br>
>  }<br>
><br>
>  define <2 x double> @ubto2f64(<2 x i32> %a) {<br>
> -; ALL-LABEL: ubto2f64:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; ALL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]<br>
> -; ALL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpandn {{.*}}(%rip), %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; ALL-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> -; ALL-NEXT:    retq<br>
> +; NOVL-LABEL: ubto2f64:<br>
> +; NOVL:       # %bb.0:<br>
> +; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; NOVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> +; NOVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]<br>
> +; NOVL-NEXT:    vpandn %xmm1, %xmm0, %xmm0<br>
> +; NOVL-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> +; NOVL-NEXT:    retq<br>
> +;<br>
> +; VL-LABEL: ubto2f64:<br>
> +; VL:       # %bb.0:<br>
> +; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> +; VL-NEXT:    vpandnd {{.*}}(%rip){1to4}, %xmm0, %xmm0<br>
> +; VL-NEXT:    vcvtdq2pd %xmm0, %xmm0<br>
> +; VL-NEXT:    retq<br>
>    %mask = icmp ne <2 x i32> %a, zeroinitializer<br>
>    %1 = uitofp <2 x i1> %mask to <2 x double><br>
>    ret <2 x double> %1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-ext.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-ext.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-ext.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-ext.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-ext.ll Wed Aug  7 09:24:26 2019<br>
> @@ -2134,28 +2134,53 @@ define <32 x i8> @zext_32xi1_to_32xi8(<3<br>
>  }<br>
><br>
>  define <4 x i32> @zext_4xi1_to_4x32(<4 x i8> %x, <4 x i8> %y) #0 {<br>
> -; ALL-LABEL: zext_4xi1_to_4x32:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [255,255,255,255]<br>
> -; ALL-NEXT:    vpand %xmm2, %xmm1, %xmm1<br>
> -; ALL-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpsrld $31, %xmm0, %xmm0<br>
> -; ALL-NEXT:    retq<br>
> +; KNL-LABEL: zext_4xi1_to_4x32:<br>
> +; KNL:       # %bb.0:<br>
> +; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0<br>
> +; KNL-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
> +; KNL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]<br>
> +; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
> +; KNL-NEXT:    retq<br>
> +;<br>
> +; SKX-LABEL: zext_4xi1_to_4x32:<br>
> +; SKX:       # %bb.0:<br>
> +; SKX-NEXT:    vpcmpeqb %xmm1, %xmm0, %k0<br>
> +; SKX-NEXT:    vpmovm2d %k0, %xmm0<br>
> +; SKX-NEXT:    vpsrld $31, %xmm0, %xmm0<br>
> +; SKX-NEXT:    retq<br>
> +;<br>
> +; AVX512DQNOBW-LABEL: zext_4xi1_to_4x32:<br>
> +; AVX512DQNOBW:       # %bb.0:<br>
> +; AVX512DQNOBW-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0<br>
> +; AVX512DQNOBW-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
> +; AVX512DQNOBW-NEXT:    vpandd {{.*}}(%rip){1to4}, %xmm0, %xmm0<br>
> +; AVX512DQNOBW-NEXT:    retq<br>
>    %mask = icmp eq <4 x i8> %x, %y<br>
>    %1 = zext <4 x i1> %mask to <4 x i32><br>
>    ret <4 x i32> %1<br>
>  }<br>
><br>
>  define <2 x i64> @zext_2xi1_to_2xi64(<2 x i8> %x, <2 x i8> %y) #0 {<br>
> -; ALL-LABEL: zext_2xi1_to_2xi64:<br>
> -; ALL:       # %bb.0:<br>
> -; ALL-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [255,255]<br>
> -; ALL-NEXT:    vpand %xmm2, %xmm1, %xmm1<br>
> -; ALL-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0<br>
> -; ALL-NEXT:    vpsrlq $63, %xmm0, %xmm0<br>
> -; ALL-NEXT:    retq<br>
> +; KNL-LABEL: zext_2xi1_to_2xi64:<br>
> +; KNL:       # %bb.0:<br>
> +; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0<br>
> +; KNL-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero<br>
> +; KNL-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0<br>
> +; KNL-NEXT:    retq<br>
> +;<br>
> +; SKX-LABEL: zext_2xi1_to_2xi64:<br>
> +; SKX:       # %bb.0:<br>
> +; SKX-NEXT:    vpcmpeqb %xmm1, %xmm0, %k0<br>
> +; SKX-NEXT:    vpmovm2q %k0, %xmm0<br>
> +; SKX-NEXT:    vpsrlq $63, %xmm0, %xmm0<br>
> +; SKX-NEXT:    retq<br>
> +;<br>
> +; AVX512DQNOBW-LABEL: zext_2xi1_to_2xi64:<br>
> +; AVX512DQNOBW:       # %bb.0:<br>
> +; AVX512DQNOBW-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0<br>
> +; AVX512DQNOBW-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero<br>
> +; AVX512DQNOBW-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX512DQNOBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i8> %x, %y<br>
>    %1 = zext <2 x i1> %mask to <2 x i64><br>
>    ret <2 x i64> %1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-intrinsics-upgrade.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5478,19 +5478,19 @@ define <8 x i8> @test_cmp_q_512(<8 x i64<br>
>  ; CHECK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k5 ## encoding: [0x62,0xf2,0xfd,0x48,0x37,0xe9]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax ## encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax ## encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax ## encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax ## encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax ## encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax ## encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} ## encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.512(<8 x i64> %a0, <8 x i64> %a1, i32 0, i8 -1)<br>
> @@ -5515,7 +5515,7 @@ define <8 x i8> @test_cmp_q_512(<8 x i64<br>
>  define <8 x i8> @test_mask_cmp_q_512(<8 x i64> %a0, <8 x i64> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_cmp_q_512:<br>
>  ; X86:       ## %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqq %zmm1, %zmm0, %k0 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0x29,0xc1]<br>
>  ; X86-NEXT:    vpcmpgtq %zmm0, %zmm1, %k2 {%k1} ## encoding: [0x62,0xf2,0xf5,0x49,0x37,0xd0]<br>
> @@ -5525,18 +5525,18 @@ define <8 x i8> @test_mask_cmp_q_512(<8<br>
>  ; X86-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0x37,0xc9]<br>
>  ; X86-NEXT:    kmovw %k0, %ecx ## encoding: [0xc5,0xf8,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovw %k2, %ecx ## encoding: [0xc5,0xf8,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %ecx ## encoding: [0xc5,0xf8,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %ecx ## encoding: [0xc5,0xf8,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %ecx ## encoding: [0xc5,0xf8,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovw %k1, %ecx ## encoding: [0xc5,0xf8,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl ## encoding: [0xc3]<br>
>  ;<br>
> @@ -5551,18 +5551,18 @@ define <8 x i8> @test_mask_cmp_q_512(<8<br>
>  ; X64-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0x37,0xc9]<br>
>  ; X64-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k2, %eax ## encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax ## encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax ## encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax ## encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k1, %eax ## encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq ## encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.512(<8 x i64> %a0, <8 x i64> %a1, i32 0, i8 %mask)<br>
> @@ -5597,19 +5597,19 @@ define <8 x i8> @test_ucmp_q_512(<8 x i6<br>
>  ; CHECK-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k5 ## encoding: [0x62,0xf3,0xfd,0x48,0x1e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax ## encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax ## encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax ## encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax ## encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax ## encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax ## encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} ## encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.512(<8 x i64> %a0, <8 x i64> %a1, i32 0, i8 -1)<br>
> @@ -5634,7 +5634,7 @@ define <8 x i8> @test_ucmp_q_512(<8 x i6<br>
>  define <8 x i8> @test_mask_ucmp_q_512(<8 x i64> %a0, <8 x i64> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_ucmp_q_512:<br>
>  ; X86:       ## %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqq %zmm1, %zmm0, %k0 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0x29,0xc1]<br>
>  ; X86-NEXT:    vpcmpltuq %zmm1, %zmm0, %k2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x49,0x1e,0xd1,0x01]<br>
> @@ -5644,18 +5644,18 @@ define <8 x i8> @test_mask_ucmp_q_512(<8<br>
>  ; X86-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf3,0xfd,0x49,0x1e,0xc9,0x06]<br>
>  ; X86-NEXT:    kmovw %k0, %ecx ## encoding: [0xc5,0xf8,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovw %k2, %ecx ## encoding: [0xc5,0xf8,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %ecx ## encoding: [0xc5,0xf8,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %ecx ## encoding: [0xc5,0xf8,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %ecx ## encoding: [0xc5,0xf8,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovw %k1, %ecx ## encoding: [0xc5,0xf8,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl ## encoding: [0xc3]<br>
>  ;<br>
> @@ -5670,18 +5670,18 @@ define <8 x i8> @test_mask_ucmp_q_512(<8<br>
>  ; X64-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k1 {%k1} ## encoding: [0x62,0xf3,0xfd,0x49,0x1e,0xc9,0x06]<br>
>  ; X64-NEXT:    kmovw %k0, %eax ## encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k2, %eax ## encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax ## encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax ## encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax ## encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k1, %eax ## encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    vzeroupper ## encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq ## encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.512(<8 x i64> %a0, <8 x i64> %a1, i32 0, i8 %mask)<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-mask-op.ll Wed Aug  7 09:24:26 2019<br>
> @@ -2296,21 +2296,22 @@ define <2 x i16> @load_2i1(<2 x i1>* %a)<br>
>  ; KNL-LABEL: load_2i1:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    kmovw (%rdi), %k1<br>
> -; KNL-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}<br>
> -; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}<br>
> +; KNL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: load_2i1:<br>
>  ; SKX:       ## %bb.0:<br>
>  ; SKX-NEXT:    kmovb (%rdi), %k0<br>
> -; SKX-NEXT:    vpmovm2q %k0, %xmm0<br>
> +; SKX-NEXT:    vpmovm2w %k0, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: load_2i1:<br>
>  ; AVX512BW:       ## %bb.0:<br>
> -; AVX512BW-NEXT:    kmovw (%rdi), %k1<br>
> -; AVX512BW-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}<br>
> +; AVX512BW-NEXT:    kmovw (%rdi), %k0<br>
> +; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0<br>
>  ; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2318,8 +2319,9 @@ define <2 x i16> @load_2i1(<2 x i1>* %a)<br>
>  ; AVX512DQ-LABEL: load_2i1:<br>
>  ; AVX512DQ:       ## %bb.0:<br>
>  ; AVX512DQ-NEXT:    kmovb (%rdi), %k0<br>
> -; AVX512DQ-NEXT:    vpmovm2q %k0, %zmm0<br>
> -; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0<br>
> +; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; AVX512DQ-NEXT:    vzeroupper<br>
>  ; AVX512DQ-NEXT:    retq<br>
>  ;<br>
> @@ -2327,7 +2329,7 @@ define <2 x i16> @load_2i1(<2 x i1>* %a)<br>
>  ; X86:       ## %bb.0:<br>
>  ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; X86-NEXT:    kmovb (%eax), %k0<br>
> -; X86-NEXT:    vpmovm2q %k0, %xmm0<br>
> +; X86-NEXT:    vpmovm2w %k0, %xmm0<br>
>  ; X86-NEXT:    retl<br>
>    %b = load <2 x i1>, <2 x i1>* %a<br>
>    %c = sext <2 x i1> %b to <2 x i16><br>
> @@ -2339,20 +2341,21 @@ define <4 x i16> @load_4i1(<4 x i1>* %a)<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    kmovw (%rdi), %k1<br>
>  ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}<br>
> -; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; KNL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: load_4i1:<br>
>  ; SKX:       ## %bb.0:<br>
>  ; SKX-NEXT:    kmovb (%rdi), %k0<br>
> -; SKX-NEXT:    vpmovm2d %k0, %xmm0<br>
> +; SKX-NEXT:    vpmovm2w %k0, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: load_4i1:<br>
>  ; AVX512BW:       ## %bb.0:<br>
> -; AVX512BW-NEXT:    kmovw (%rdi), %k1<br>
> -; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}<br>
> +; AVX512BW-NEXT:    kmovw (%rdi), %k0<br>
> +; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0<br>
>  ; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2361,7 +2364,8 @@ define <4 x i16> @load_4i1(<4 x i1>* %a)<br>
>  ; AVX512DQ:       ## %bb.0:<br>
>  ; AVX512DQ-NEXT:    kmovb (%rdi), %k0<br>
>  ; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0<br>
> -; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; AVX512DQ-NEXT:    vzeroupper<br>
>  ; AVX512DQ-NEXT:    retq<br>
>  ;<br>
> @@ -2369,7 +2373,7 @@ define <4 x i16> @load_4i1(<4 x i1>* %a)<br>
>  ; X86:       ## %bb.0:<br>
>  ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; X86-NEXT:    kmovb (%eax), %k0<br>
> -; X86-NEXT:    vpmovm2d %k0, %xmm0<br>
> +; X86-NEXT:    vpmovm2w %k0, %xmm0<br>
>  ; X86-NEXT:    retl<br>
>    %b = load <4 x i1>, <4 x i1>* %a<br>
>    %c = sext <4 x i1> %b to <4 x i16><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-trunc.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-trunc.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-trunc.ll Wed Aug  7 09:24:26 2019<br>
> @@ -36,7 +36,7 @@ define <16 x i16> @trunc_v16i32_to_v16i1<br>
>  define <8 x i8> @trunc_qb_512(<8 x i64> %i) #0 {<br>
>  ; ALL-LABEL: trunc_qb_512:<br>
>  ; ALL:       ## %bb.0:<br>
> -; ALL-NEXT:    vpmovqw %zmm0, %xmm0<br>
> +; ALL-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; ALL-NEXT:    vzeroupper<br>
>  ; ALL-NEXT:    retq<br>
>    %x = trunc <8 x i64> %i to <8 x i8><br>
> @@ -58,14 +58,13 @@ define <4 x i8> @trunc_qb_256(<4 x i64><br>
>  ; KNL-LABEL: trunc_qb_256:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
> +; KNL-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: trunc_qb_256:<br>
>  ; SKX:       ## %bb.0:<br>
> -; SKX-NEXT:    vpmovqd %ymm0, %xmm0<br>
> +; SKX-NEXT:    vpmovqb %ymm0, %xmm0<br>
>  ; SKX-NEXT:    vzeroupper<br>
>  ; SKX-NEXT:    retq<br>
>    %x = trunc <4 x i64> %i to <4 x i8><br>
> @@ -76,8 +75,7 @@ define void @trunc_qb_256_mem(<4 x i64><br>
>  ; KNL-LABEL: trunc_qb_256_mem:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; KNL-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vmovd %xmm0, (%rdi)<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
> @@ -95,6 +93,7 @@ define void @trunc_qb_256_mem(<4 x i64><br>
>  define <2 x i8> @trunc_qb_128(<2 x i64> %i) #0 {<br>
>  ; ALL-LABEL: trunc_qb_128:<br>
>  ; ALL:       ## %bb.0:<br>
> +; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; ALL-NEXT:    retq<br>
>    %x = trunc <2 x i64> %i to <2 x i8><br>
>    ret <2 x i8> %x<br>
> @@ -141,14 +140,13 @@ define <4 x i16> @trunc_qw_256(<4 x i64><br>
>  ; KNL-LABEL: trunc_qw_256:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
> +; KNL-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: trunc_qw_256:<br>
>  ; SKX:       ## %bb.0:<br>
> -; SKX-NEXT:    vpmovqd %ymm0, %xmm0<br>
> +; SKX-NEXT:    vpmovqw %ymm0, %xmm0<br>
>  ; SKX-NEXT:    vzeroupper<br>
>  ; SKX-NEXT:    retq<br>
>    %x = trunc <4 x i64> %i to <4 x i16><br>
> @@ -159,8 +157,7 @@ define void @trunc_qw_256_mem(<4 x i64><br>
>  ; KNL-LABEL: trunc_qw_256_mem:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
> +; KNL-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vmovq %xmm0, (%rdi)<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
> @@ -176,9 +173,16 @@ define void @trunc_qw_256_mem(<4 x i64><br>
>  }<br>
><br>
>  define <2 x i16> @trunc_qw_128(<2 x i64> %i) #0 {<br>
> -; ALL-LABEL: trunc_qw_128:<br>
> -; ALL:       ## %bb.0:<br>
> -; ALL-NEXT:    retq<br>
> +; KNL-LABEL: trunc_qw_128:<br>
> +; KNL:       ## %bb.0:<br>
> +; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; KNL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; KNL-NEXT:    retq<br>
> +;<br>
> +; SKX-LABEL: trunc_qw_128:<br>
> +; SKX:       ## %bb.0:<br>
> +; SKX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,10,11,8,9,10,11,12,13,14,15]<br>
> +; SKX-NEXT:    retq<br>
>    %x = trunc <2 x i64> %i to <2 x i16><br>
>    ret <2 x i16> %x<br>
>  }<br>
> @@ -260,6 +264,7 @@ define void @trunc_qd_256_mem(<4 x i64><br>
>  define <2 x i32> @trunc_qd_128(<2 x i64> %i) #0 {<br>
>  ; ALL-LABEL: trunc_qd_128:<br>
>  ; ALL:       ## %bb.0:<br>
> +; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; ALL-NEXT:    retq<br>
>    %x = trunc <2 x i64> %i to <2 x i32><br>
>    ret <2 x i32> %x<br>
> @@ -306,14 +311,13 @@ define <8 x i8> @trunc_db_256(<8 x i32><br>
>  ; KNL-LABEL: trunc_db_256:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0<br>
> +; KNL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: trunc_db_256:<br>
>  ; SKX:       ## %bb.0:<br>
> -; SKX-NEXT:    vpmovdw %ymm0, %xmm0<br>
> +; SKX-NEXT:    vpmovdb %ymm0, %xmm0<br>
>  ; SKX-NEXT:    vzeroupper<br>
>  ; SKX-NEXT:    retq<br>
>    %x = trunc <8 x i32> %i to <8 x i8><br>
> @@ -324,8 +328,7 @@ define void @trunc_db_256_mem(<8 x i32><br>
>  ; KNL-LABEL: trunc_db_256_mem:<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0<br>
> -; KNL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; KNL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
> +; KNL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vmovq %xmm0, (%rdi)<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
> @@ -343,6 +346,7 @@ define void @trunc_db_256_mem(<8 x i32><br>
>  define <4 x i8> @trunc_db_128(<4 x i32> %i) #0 {<br>
>  ; ALL-LABEL: trunc_db_128:<br>
>  ; ALL:       ## %bb.0:<br>
> +; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; ALL-NEXT:    retq<br>
>    %x = trunc <4 x i32> %i to <4 x i8><br>
>    ret <4 x i8> %x<br>
> @@ -513,6 +517,7 @@ define void @trunc_wb_256_mem(<16 x i16><br>
>  define <8 x i8> @trunc_wb_128(<8 x i16> %i) #0 {<br>
>  ; ALL-LABEL: trunc_wb_128:<br>
>  ; ALL:       ## %bb.0:<br>
> +; ALL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; ALL-NEXT:    retq<br>
>    %x = trunc <8 x i16> %i to <8 x i8><br>
>    ret <8 x i8> %x<br>
> @@ -691,6 +696,7 @@ define <8 x i8> @usat_trunc_wb_128(<8 x<br>
>  ; ALL-LABEL: usat_trunc_wb_128:<br>
>  ; ALL:       ## %bb.0:<br>
>  ; ALL-NEXT:    vpminuw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; ALL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; ALL-NEXT:    retq<br>
>    %x3 = icmp ult <8 x i16> %i, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255><br>
>    %x5 = select <8 x i1> %x3, <8 x i16> %i, <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255><br>
> @@ -716,16 +722,14 @@ define <16 x i8> @usat_trunc_db_256(<8 x<br>
>  ; KNL:       ## %bb.0:<br>
>  ; KNL-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]<br>
>  ; KNL-NEXT:    vpminud %ymm1, %ymm0, %ymm0<br>
> -; KNL-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; KNL-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
> +; KNL-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; KNL-NEXT:    vzeroupper<br>
>  ; KNL-NEXT:    retq<br>
>  ;<br>
>  ; SKX-LABEL: usat_trunc_db_256:<br>
>  ; SKX:       ## %bb.0:<br>
>  ; SKX-NEXT:    vpminud {{.*}}(%rip){1to8}, %ymm0, %ymm0<br>
> -; SKX-NEXT:    vpmovdw %ymm0, %xmm0<br>
> -; SKX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
> +; SKX-NEXT:    vpmovdb %ymm0, %xmm0<br>
>  ; SKX-NEXT:    vzeroupper<br>
>  ; SKX-NEXT:    retq<br>
>    %tmp1 = icmp ult <8 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-vec-cmp.ll Wed Aug  7 09:24:26 2019<br>
> @@ -886,22 +886,14 @@ define <8 x double> @test43(<8 x double><br>
>  define <4 x i32> @test44(<4 x i16> %x, <4 x i16> %y) #0 {<br>
>  ; AVX512-LABEL: test44:<br>
>  ; AVX512:       ## %bb.0:<br>
> -; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0xef,0xd2]<br>
> -; AVX512-NEXT:    vpblendw $170, %xmm2, %xmm1, %xmm1 ## encoding: [0xc4,0xe3,0x71,0x0e,0xca,0xaa]<br>
> -; AVX512-NEXT:    ## xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]<br>
> -; AVX512-NEXT:    vpblendw $170, %xmm2, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x0e,0xc2,0xaa]<br>
> -; AVX512-NEXT:    ## xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]<br>
> -; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x76,0xc1]<br>
> +; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x75,0xc1]<br>
> +; AVX512-NEXT:    vpmovsxwd %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x23,0xc0]<br>
>  ; AVX512-NEXT:    retq ## encoding: [0xc3]<br>
>  ;<br>
>  ; SKX-LABEL: test44:<br>
>  ; SKX:       ## %bb.0:<br>
> -; SKX-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xd2]<br>
> -; SKX-NEXT:    vpblendw $170, %xmm2, %xmm1, %xmm1 ## encoding: [0xc4,0xe3,0x71,0x0e,0xca,0xaa]<br>
> -; SKX-NEXT:    ## xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]<br>
> -; SKX-NEXT:    vpblendw $170, %xmm2, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x0e,0xc2,0xaa]<br>
> -; SKX-NEXT:    ## xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]<br>
> -; SKX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x76,0xc1]<br>
> +; SKX-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x08,0x75,0xc1]<br>
> +; SKX-NEXT:    vpmovm2d %k0, %xmm0 ## encoding: [0x62,0xf2,0x7e,0x08,0x38,0xc0]<br>
>  ; SKX-NEXT:    retq ## encoding: [0xc3]<br>
>    %mask = icmp eq <4 x i16> %x, %y<br>
>    %1 = sext <4 x i1> %mask to <4 x i32><br>
> @@ -911,23 +903,17 @@ define <4 x i32> @test44(<4 x i16> %x, <<br>
>  define <2 x i64> @test45(<2 x i16> %x, <2 x i16> %y) #0 {<br>
>  ; AVX512-LABEL: test45:<br>
>  ; AVX512:       ## %bb.0:<br>
> -; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe9,0xef,0xd2]<br>
> -; AVX512-NEXT:    vpblendw $17, %xmm1, %xmm2, %xmm1 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc9,0x11]<br>
> -; AVX512-NEXT:    ## xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]<br>
> -; AVX512-NEXT:    vpblendw $17, %xmm0, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc0,0x11]<br>
> -; AVX512-NEXT:    ## xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]<br>
> -; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x29,0xc1]<br>
> -; AVX512-NEXT:    vpsrlq $63, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x73,0xd0,0x3f]<br>
> +; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0x75,0xc1]<br>
> +; AVX512-NEXT:    vpmovzxwq %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x34,0xc0]<br>
> +; AVX512-NEXT:    ## xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero<br>
> +; AVX512-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0 ## encoding: [0xc5,0xf9,0xdb,0x05,A,A,A,A]<br>
> +; AVX512-NEXT:    ## fixup A - offset: 4, value: LCPI46_0-4, kind: reloc_riprel_4byte<br>
>  ; AVX512-NEXT:    retq ## encoding: [0xc3]<br>
>  ;<br>
>  ; SKX-LABEL: test45:<br>
>  ; SKX:       ## %bb.0:<br>
> -; SKX-NEXT:    vpxor %xmm2, %xmm2, %xmm2 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xd2]<br>
> -; SKX-NEXT:    vpblendw $17, %xmm1, %xmm2, %xmm1 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc9,0x11]<br>
> -; SKX-NEXT:    ## xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]<br>
> -; SKX-NEXT:    vpblendw $17, %xmm0, %xmm2, %xmm0 ## encoding: [0xc4,0xe3,0x69,0x0e,0xc0,0x11]<br>
> -; SKX-NEXT:    ## xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]<br>
> -; SKX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0x29,0xc1]<br>
> +; SKX-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 ## encoding: [0x62,0xf1,0x7d,0x08,0x75,0xc1]<br>
> +; SKX-NEXT:    vpmovm2q %k0, %xmm0 ## encoding: [0x62,0xf2,0xfe,0x08,0x38,0xc0]<br>
>  ; SKX-NEXT:    vpsrlq $63, %xmm0, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x73,0xd0,0x3f]<br>
>  ; SKX-NEXT:    retq ## encoding: [0xc3]<br>
>    %mask = icmp eq <2 x i16> %x, %y<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-vec3-crash.ll Wed Aug  7 09:24:26 2019<br>
> @@ -6,19 +6,15 @@ define <3 x i8 > @foo(<3 x i8>%x, <3 x i<br>
>  ; CHECK-LABEL: foo:<br>
>  ; CHECK:       # %bb.0:<br>
>  ; CHECK-NEXT:    vmovd %edi, %xmm0<br>
> -; CHECK-NEXT:    vpinsrd $1, %esi, %xmm0, %xmm0<br>
> -; CHECK-NEXT:    vpinsrd $2, %edx, %xmm0, %xmm0<br>
> -; CHECK-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> +; CHECK-NEXT:    vpinsrb $1, %esi, %xmm0, %xmm0<br>
> +; CHECK-NEXT:    vpinsrb $2, %edx, %xmm0, %xmm0<br>
>  ; CHECK-NEXT:    vmovd %ecx, %xmm1<br>
> -; CHECK-NEXT:    vpinsrd $1, %r8d, %xmm1, %xmm1<br>
> -; CHECK-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; CHECK-NEXT:    vpinsrd $2, %r9d, %xmm1, %xmm1<br>
> -; CHECK-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; CHECK-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; CHECK-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0<br>
> +; CHECK-NEXT:    vpinsrb $1, %r8d, %xmm1, %xmm1<br>
> +; CHECK-NEXT:    vpinsrb $2, %r9d, %xmm1, %xmm1<br>
> +; CHECK-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0<br>
>  ; CHECK-NEXT:    vpextrb $0, %xmm0, %eax<br>
> -; CHECK-NEXT:    vpextrb $4, %xmm0, %edx<br>
> -; CHECK-NEXT:    vpextrb $8, %xmm0, %ecx<br>
> +; CHECK-NEXT:    vpextrb $1, %xmm0, %edx<br>
> +; CHECK-NEXT:    vpextrb $2, %xmm0, %ecx<br>
>  ; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; CHECK-NEXT:    # kill: def $dl killed $dl killed $edx<br>
>  ; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512bwvl-intrinsics-upgrade.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5133,19 +5133,19 @@ define <8 x i8> @test_cmp_w_128(<8 x i16<br>
>  ; CHECK-NEXT:    vpcmpgtw %xmm1, %xmm0, %k5 # encoding: [0x62,0xf1,0x7d,0x08,0x65,0xe9]<br>
>  ; CHECK-NEXT:    kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovd %k1, %eax # encoding: [0xc5,0xfb,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovd %k2, %eax # encoding: [0xc5,0xfb,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovd %k3, %eax # encoding: [0xc5,0xfb,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovd %k4, %eax # encoding: [0xc5,0xfb,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovd %k5, %eax # encoding: [0xc5,0xfb,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax # encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.w.128(<8 x i16> %a0, <8 x i16> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -5169,7 +5169,7 @@ define <8 x i8> @test_cmp_w_128(<8 x i16<br>
>  define <8 x i8> @test_mask_cmp_w_128(<8 x i16> %a0, <8 x i16> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_cmp_w_128:<br>
>  ; X86:       # %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovd %eax, %k1 # encoding: [0xc5,0xfb,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 {%k1} # encoding: [0x62,0xf1,0x7d,0x09,0x75,0xc1]<br>
>  ; X86-NEXT:    vpcmpgtw %xmm0, %xmm1, %k2 {%k1} # encoding: [0x62,0xf1,0x75,0x09,0x65,0xd0]<br>
> @@ -5179,18 +5179,18 @@ define <8 x i8> @test_mask_cmp_w_128(<8<br>
>  ; X86-NEXT:    vpcmpgtw %xmm1, %xmm0, %k1 {%k1} # encoding: [0x62,0xf1,0x7d,0x09,0x65,0xc9]<br>
>  ; X86-NEXT:    kmovd %k0, %ecx # encoding: [0xc5,0xfb,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovd %k2, %ecx # encoding: [0xc5,0xfb,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovd %k3, %ecx # encoding: [0xc5,0xfb,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovd %k4, %ecx # encoding: [0xc5,0xfb,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovd %k5, %ecx # encoding: [0xc5,0xfb,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovd %k1, %ecx # encoding: [0xc5,0xfb,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_cmp_w_128:<br>
> @@ -5204,18 +5204,18 @@ define <8 x i8> @test_mask_cmp_w_128(<8<br>
>  ; X64-NEXT:    vpcmpgtw %xmm1, %xmm0, %k1 {%k1} # encoding: [0x62,0xf1,0x7d,0x09,0x65,0xc9]<br>
>  ; X64-NEXT:    kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovd %k2, %eax # encoding: [0xc5,0xfb,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovd %k3, %eax # encoding: [0xc5,0xfb,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovd %k4, %eax # encoding: [0xc5,0xfb,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovd %k5, %eax # encoding: [0xc5,0xfb,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovd %k1, %eax # encoding: [0xc5,0xfb,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.w.128(<8 x i16> %a0, <8 x i16> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -5249,19 +5249,19 @@ define <8 x i8> @test_ucmp_w_128(<8 x i1<br>
>  ; CHECK-NEXT:    vpcmpnleuw %xmm1, %xmm0, %k5 # encoding: [0x62,0xf3,0xfd,0x08,0x3e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovd %k1, %eax # encoding: [0xc5,0xfb,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovd %k2, %eax # encoding: [0xc5,0xfb,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovd %k3, %eax # encoding: [0xc5,0xfb,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovd %k4, %eax # encoding: [0xc5,0xfb,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovd %k5, %eax # encoding: [0xc5,0xfb,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax # encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.w.128(<8 x i16> %a0, <8 x i16> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -5285,7 +5285,7 @@ define <8 x i8> @test_ucmp_w_128(<8 x i1<br>
>  define <8 x i8> @test_mask_ucmp_w_128(<8 x i16> %a0, <8 x i16> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_ucmp_w_128:<br>
>  ; X86:       # %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovd %eax, %k1 # encoding: [0xc5,0xfb,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 {%k1} # encoding: [0x62,0xf1,0x7d,0x09,0x75,0xc1]<br>
>  ; X86-NEXT:    vpcmpltuw %xmm1, %xmm0, %k2 {%k1} # encoding: [0x62,0xf3,0xfd,0x09,0x3e,0xd1,0x01]<br>
> @@ -5295,18 +5295,18 @@ define <8 x i8> @test_mask_ucmp_w_128(<8<br>
>  ; X86-NEXT:    vpcmpnleuw %xmm1, %xmm0, %k1 {%k1} # encoding: [0x62,0xf3,0xfd,0x09,0x3e,0xc9,0x06]<br>
>  ; X86-NEXT:    kmovd %k0, %ecx # encoding: [0xc5,0xfb,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovd %k2, %ecx # encoding: [0xc5,0xfb,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovd %k3, %ecx # encoding: [0xc5,0xfb,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovd %k4, %ecx # encoding: [0xc5,0xfb,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovd %k5, %ecx # encoding: [0xc5,0xfb,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovd %k1, %ecx # encoding: [0xc5,0xfb,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_ucmp_w_128:<br>
> @@ -5320,18 +5320,18 @@ define <8 x i8> @test_mask_ucmp_w_128(<8<br>
>  ; X64-NEXT:    vpcmpnleuw %xmm1, %xmm0, %k1 {%k1} # encoding: [0x62,0xf3,0xfd,0x09,0x3e,0xc9,0x06]<br>
>  ; X64-NEXT:    kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovd %k2, %eax # encoding: [0xc5,0xfb,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovd %k3, %eax # encoding: [0xc5,0xfb,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovd %k4, %eax # encoding: [0xc5,0xfb,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovd %k5, %eax # encoding: [0xc5,0xfb,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovd %k1, %eax # encoding: [0xc5,0xfb,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.w.128(<8 x i16> %a0, <8 x i16> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-fast-isel.ll Wed Aug  7 09:24:26 2019<br>
> @@ -3326,6 +3326,8 @@ define <2 x i64> @test_mm256_cvtepi64_ep<br>
>  ; CHECK-LABEL: test_mm256_cvtepi64_epi8:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
>  ; CHECK-NEXT:    vpmovqb %ymm0, %xmm0<br>
> +; CHECK-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; CHECK-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3,4,5,6,7]<br>
>  ; CHECK-NEXT:    vzeroupper<br>
>  ; CHECK-NEXT:    ret{{[l|q]}}<br>
>  entry:<br>
> @@ -3339,6 +3341,7 @@ define <2 x i64> @test_mm256_cvtepi64_ep<br>
>  ; CHECK-LABEL: test_mm256_cvtepi64_epi16:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
>  ; CHECK-NEXT:    vpmovqw %ymm0, %xmm0<br>
> +; CHECK-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; CHECK-NEXT:    vzeroupper<br>
>  ; CHECK-NEXT:    ret{{[l|q]}}<br>
>  entry:<br>
> @@ -3352,6 +3355,7 @@ define <2 x i64> @test_mm256_cvtepi32_ep<br>
>  ; CHECK-LABEL: test_mm256_cvtepi32_epi8:<br>
>  ; CHECK:       # %bb.0: # %entry<br>
>  ; CHECK-NEXT:    vpmovdb %ymm0, %xmm0<br>
> +; CHECK-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; CHECK-NEXT:    vzeroupper<br>
>  ; CHECK-NEXT:    ret{{[l|q]}}<br>
>  entry:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll Wed Aug  7 09:24:26 2019<br>
> @@ -8069,19 +8069,19 @@ define <8 x i8> @test_cmp_d_256(<8 x i32<br>
>  ; CHECK-NEXT:    vpcmpgtd %ymm1, %ymm0, %k5 # encoding: [0x62,0xf1,0x7d,0x28,0x66,0xe9]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax # encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 0, i8 -1)<br>
> @@ -8106,7 +8106,7 @@ define <8 x i8> @test_cmp_d_256(<8 x i32<br>
>  define <8 x i8> @test_mask_cmp_d_256(<8 x i32> %a0, <8 x i32> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_cmp_d_256:<br>
>  ; X86:       # %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqd %ymm1, %ymm0, %k0 {%k1} # encoding: [0x62,0xf1,0x7d,0x29,0x76,0xc1]<br>
>  ; X86-NEXT:    vpcmpgtd %ymm0, %ymm1, %k2 {%k1} # encoding: [0x62,0xf1,0x75,0x29,0x66,0xd0]<br>
> @@ -8116,18 +8116,18 @@ define <8 x i8> @test_mask_cmp_d_256(<8<br>
>  ; X86-NEXT:    vpcmpgtd %ymm1, %ymm0, %k1 {%k1} # encoding: [0x62,0xf1,0x7d,0x29,0x66,0xc9]<br>
>  ; X86-NEXT:    kmovw %k0, %ecx # encoding: [0xc5,0xf8,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovw %k2, %ecx # encoding: [0xc5,0xf8,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %ecx # encoding: [0xc5,0xf8,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %ecx # encoding: [0xc5,0xf8,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %ecx # encoding: [0xc5,0xf8,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovw %k1, %ecx # encoding: [0xc5,0xf8,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
> @@ -8142,18 +8142,18 @@ define <8 x i8> @test_mask_cmp_d_256(<8<br>
>  ; X64-NEXT:    vpcmpgtd %ymm1, %ymm0, %k1 {%k1} # encoding: [0x62,0xf1,0x7d,0x29,0x66,0xc9]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 0, i8 %mask)<br>
> @@ -8188,19 +8188,19 @@ define <8 x i8> @test_ucmp_d_256(<8 x i3<br>
>  ; CHECK-NEXT:    vpcmpnleud %ymm1, %ymm0, %k5 # encoding: [0x62,0xf3,0x7d,0x28,0x1e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $255, %eax # encoding: [0xb8,0xff,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 0, i8 -1)<br>
> @@ -8225,7 +8225,7 @@ define <8 x i8> @test_ucmp_d_256(<8 x i3<br>
>  define <8 x i8> @test_mask_ucmp_d_256(<8 x i32> %a0, <8 x i32> %a1, i8 %mask) {<br>
>  ; X86-LABEL: test_mask_ucmp_d_256:<br>
>  ; X86:       # %bb.0:<br>
> -; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb7,0x44,0x24,0x04]<br>
> +; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>  ; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]<br>
>  ; X86-NEXT:    vpcmpeqd %ymm1, %ymm0, %k0 {%k1} # encoding: [0x62,0xf1,0x7d,0x29,0x76,0xc1]<br>
>  ; X86-NEXT:    vpcmpltud %ymm1, %ymm0, %k2 {%k1} # encoding: [0x62,0xf3,0x7d,0x29,0x1e,0xd1,0x01]<br>
> @@ -8235,18 +8235,18 @@ define <8 x i8> @test_mask_ucmp_d_256(<8<br>
>  ; X86-NEXT:    vpcmpnleud %ymm1, %ymm0, %k1 {%k1} # encoding: [0x62,0xf3,0x7d,0x29,0x1e,0xc9,0x06]<br>
>  ; X86-NEXT:    kmovw %k0, %ecx # encoding: [0xc5,0xf8,0x93,0xc8]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x00]<br>
>  ; X86-NEXT:    kmovw %k2, %ecx # encoding: [0xc5,0xf8,0x93,0xca]<br>
> -; X86-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %ecx # encoding: [0xc5,0xf8,0x93,0xcb]<br>
> -; X86-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %ecx # encoding: [0xc5,0xf8,0x93,0xcc]<br>
> -; X86-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %ecx # encoding: [0xc5,0xf8,0x93,0xcd]<br>
> -; X86-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x05]<br>
>  ; X86-NEXT:    kmovw %k1, %ecx # encoding: [0xc5,0xf8,0x93,0xc9]<br>
> -; X86-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc1,0x06]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc1,0x06]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
> @@ -8261,18 +8261,18 @@ define <8 x i8> @test_mask_ucmp_d_256(<8<br>
>  ; X64-NEXT:    vpcmpnleud %ymm1, %ymm0, %k1 {%k1} # encoding: [0x62,0xf3,0x7d,0x29,0x1e,0xc9,0x06]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> -; X64-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc7,0x07]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $7, %edi, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc7,0x07]<br>
>  ; X64-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.d.256(<8 x i32> %a0, <8 x i32> %a1, i32 0, i8 %mask)<br>
> @@ -8307,19 +8307,19 @@ define <8 x i8> @test_cmp_q_256(<4 x i64<br>
>  ; CHECK-NEXT:    vpcmpgtq %ymm1, %ymm0, %k5 # encoding: [0x62,0xf2,0xfd,0x28,0x37,0xe9]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $15, %eax # encoding: [0xb8,0x0f,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.256(<4 x i64> %a0, <4 x i64> %a1, i32 0, i8 -1)<br>
> @@ -8356,19 +8356,19 @@ define <8 x i8> @test_mask_cmp_q_256(<4<br>
>  ; X86-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
> @@ -8385,19 +8385,19 @@ define <8 x i8> @test_mask_cmp_q_256(<4<br>
>  ; X64-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.256(<4 x i64> %a0, <4 x i64> %a1, i32 0, i8 %mask)<br>
> @@ -8432,19 +8432,19 @@ define <8 x i8> @test_ucmp_q_256(<4 x i6<br>
>  ; CHECK-NEXT:    vpcmpnleuq %ymm1, %ymm0, %k5 # encoding: [0x62,0xf3,0xfd,0x28,0x1e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $15, %eax # encoding: [0xb8,0x0f,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.256(<4 x i64> %a0, <4 x i64> %a1, i32 0, i8 -1)<br>
> @@ -8481,19 +8481,19 @@ define <8 x i8> @test_mask_ucmp_q_256(<4<br>
>  ; X86-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
> @@ -8510,19 +8510,19 @@ define <8 x i8> @test_mask_ucmp_q_256(<4<br>
>  ; X64-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.256(<4 x i64> %a0, <4 x i64> %a1, i32 0, i8 %mask)<br>
> @@ -8557,19 +8557,19 @@ define <8 x i8> @test_cmp_d_128(<4 x i32<br>
>  ; CHECK-NEXT:    vpcmpgtd %xmm1, %xmm0, %k5 # encoding: [0x62,0xf1,0x7d,0x08,0x66,0xe9]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $15, %eax # encoding: [0xb8,0x0f,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.d.128(<4 x i32> %a0, <4 x i32> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8605,19 +8605,19 @@ define <8 x i8> @test_mask_cmp_d_128(<4<br>
>  ; X86-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_cmp_d_128:<br>
> @@ -8633,19 +8633,19 @@ define <8 x i8> @test_mask_cmp_d_128(<4<br>
>  ; X64-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.d.128(<4 x i32> %a0, <4 x i32> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8679,19 +8679,19 @@ define <8 x i8> @test_ucmp_d_128(<4 x i3<br>
>  ; CHECK-NEXT:    vpcmpnleud %xmm1, %xmm0, %k5 # encoding: [0x62,0xf3,0x7d,0x08,0x1e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $15, %eax # encoding: [0xb8,0x0f,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.d.128(<4 x i32> %a0, <4 x i32> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8727,19 +8727,19 @@ define <8 x i8> @test_mask_ucmp_d_128(<4<br>
>  ; X86-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_ucmp_d_128:<br>
> @@ -8755,19 +8755,19 @@ define <8 x i8> @test_mask_ucmp_d_128(<4<br>
>  ; X64-NEXT:    kshiftrw $12, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0c]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.d.128(<4 x i32> %a0, <4 x i32> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8801,19 +8801,19 @@ define <8 x i8> @test_cmp_q_128(<2 x i64<br>
>  ; CHECK-NEXT:    vpcmpgtq %xmm1, %xmm0, %k5 # encoding: [0x62,0xf2,0xfd,0x08,0x37,0xe9]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $3, %eax # encoding: [0xb8,0x03,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.128(<2 x i64> %a0, <2 x i64> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8849,19 +8849,19 @@ define <8 x i8> @test_mask_cmp_q_128(<2<br>
>  ; X86-NEXT:    kshiftrw $14, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0e]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_cmp_q_128:<br>
> @@ -8877,19 +8877,19 @@ define <8 x i8> @test_mask_cmp_q_128(<2<br>
>  ; X64-NEXT:    kshiftrw $14, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0e]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.cmp.q.128(<2 x i64> %a0, <2 x i64> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8923,19 +8923,19 @@ define <8 x i8> @test_ucmp_q_128(<2 x i6<br>
>  ; CHECK-NEXT:    vpcmpnleuq %xmm1, %xmm0, %k5 # encoding: [0x62,0xf3,0xfd,0x08,0x1e,0xe9,0x06]<br>
>  ; CHECK-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; CHECK-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; CHECK-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; CHECK-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; CHECK-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; CHECK-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; CHECK-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; CHECK-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; CHECK-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; CHECK-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; CHECK-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; CHECK-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; CHECK-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; CHECK-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; CHECK-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; CHECK-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; CHECK-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; CHECK-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; CHECK-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; CHECK-NEXT:    movl $3, %eax # encoding: [0xb8,0x03,0x00,0x00,0x00]<br>
> -; CHECK-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; CHECK-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.128(<2 x i64> %a0, <2 x i64> %a1, i32 0, i8 -1)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
> @@ -8971,19 +8971,19 @@ define <8 x i8> @test_mask_ucmp_q_128(<2<br>
>  ; X86-NEXT:    kshiftrw $14, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0e]<br>
>  ; X86-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X86-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X86-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X86-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X86-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X86-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X86-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X86-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X86-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X86-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X86-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X86-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X86-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X86-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X86-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X86-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X86-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X86-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X86-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X86-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X86-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X86-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X86-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-LABEL: test_mask_ucmp_q_128:<br>
> @@ -8999,19 +8999,19 @@ define <8 x i8> @test_mask_ucmp_q_128(<2<br>
>  ; X64-NEXT:    kshiftrw $14, %k2, %k2 # encoding: [0xc4,0xe3,0xf9,0x30,0xd2,0x0e]<br>
>  ; X64-NEXT:    kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]<br>
>  ; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xef,0xc0]<br>
> -; X64-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x00]<br>
> +; X64-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x00]<br>
>  ; X64-NEXT:    kmovw %k1, %eax # encoding: [0xc5,0xf8,0x93,0xc1]<br>
> -; X64-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x01]<br>
> +; X64-NEXT:    vpinsrb $1, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x01]<br>
>  ; X64-NEXT:    kmovw %k3, %eax # encoding: [0xc5,0xf8,0x93,0xc3]<br>
> -; X64-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x02]<br>
> +; X64-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x02]<br>
>  ; X64-NEXT:    kmovw %k4, %eax # encoding: [0xc5,0xf8,0x93,0xc4]<br>
> -; X64-NEXT:    vpinsrw $4, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x04]<br>
> +; X64-NEXT:    vpinsrb $4, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x04]<br>
>  ; X64-NEXT:    kmovw %k5, %eax # encoding: [0xc5,0xf8,0x93,0xc5]<br>
> -; X64-NEXT:    vpinsrw $5, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x05]<br>
> +; X64-NEXT:    vpinsrb $5, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x05]<br>
>  ; X64-NEXT:    kmovw %k6, %eax # encoding: [0xc5,0xf8,0x93,0xc6]<br>
> -; X64-NEXT:    vpinsrw $6, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x06]<br>
> +; X64-NEXT:    vpinsrb $6, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x06]<br>
>  ; X64-NEXT:    kmovw %k2, %eax # encoding: [0xc5,0xf8,0x93,0xc2]<br>
> -; X64-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xc4,0xc0,0x07]<br>
> +; X64-NEXT:    vpinsrb $7, %eax, %xmm0, %xmm0 # encoding: [0xc4,0xe3,0x79,0x20,0xc0,0x07]<br>
>  ; X64-NEXT:    retq # encoding: [0xc3]<br>
>    %res0 = call i8 @llvm.x86.avx512.mask.ucmp.q.128(<2 x i64> %a0, <2 x i64> %a1, i32 0, i8 %mask)<br>
>    %vec0 = insertelement <8 x i8> undef, i8 %res0, i32 0<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-128.ll Wed Aug  7 09:24:26 2019<br>
> @@ -178,144 +178,63 @@ define i16 @v16i8(<16 x i8> %a, <16 x i8<br>
>  }<br>
><br>
>  define i2 @v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d) {<br>
> -; SSE2-SSSE3-LABEL: v2i8:<br>
> -; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    por %xmm2, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    movmskpd %xmm3, %eax<br>
> -; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; SSE2-SSSE3-NEXT:    retq<br>
> +; SSE2-LABEL: v2i8:<br>
> +; SSE2:       # %bb.0:<br>
> +; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
> +; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
> +; SSE2-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; SSE2-NEXT:    retq<br>
> +;<br>
> +; SSSE3-LABEL: v2i8:<br>
> +; SSSE3:       # %bb.0:<br>
> +; SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = <u,u,0,0,u,u,0,0,u,u,1,1,u,u,1,1><br>
> +; SSSE3-NEXT:    pshufb %xmm1, %xmm0<br>
> +; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2<br>
> +; SSSE3-NEXT:    pshufb %xmm1, %xmm2<br>
> +; SSSE3-NEXT:    pand %xmm0, %xmm2<br>
> +; SSSE3-NEXT:    movmskpd %xmm2, %eax<br>
> +; SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i8:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm3, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1],xmm4[2,3],xmm3[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i8:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm3, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm3 = xmm3[0],xmm4[1],xmm3[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm2 = xmm2[0],xmm4[1],xmm2[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i8:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxbq %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -329,142 +248,47 @@ define i2 @v2i8(<2 x i8> %a, <2 x i8> %b<br>
>  define i2 @v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d) {<br>
>  ; SSE2-SSSE3-LABEL: v2i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    por %xmm2, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    movmskpd %xmm3, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]<br>
> +; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i16:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm3, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1],xmm4[2,3],xmm3[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i16:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm3, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm3 = xmm3[0],xmm4[1],xmm3[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm2 = xmm2[0],xmm4[1],xmm2[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i16:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxwq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxwq %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i16:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i16:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -478,118 +302,40 @@ define i2 @v2i16(<2 x i16> %a, <2 x i16><br>
>  define i2 @v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d) {<br>
>  ; SSE2-SSSE3-LABEL: v2i32:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm3, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm0, %xmm5<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    por %xmm3, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm4, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    por %xmm4, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movmskpd %xmm2, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,0,1,1]<br>
> +; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i32:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1],xmm4[2,3],xmm3[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm2, %xmm4<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm3<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i32:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm3, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm4, %xmm4<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm3 = xmm3[0],xmm4[1],xmm3[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm2, %xmm4<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm4, %xmm4<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm2 = xmm2[0],xmm4[1],xmm2[2],xmm4[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm1, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm0, %xmm3<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i32:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxdq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxdq %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i32:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtd %xmm3, %xmm2, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i32:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtd %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -700,66 +446,47 @@ define i2 @v2f64(<2 x double> %a, <2 x d<br>
>  define i4 @v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i8> %d) {<br>
>  ; SSE2-SSSE3-LABEL: v4i8:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]<br>
> +; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    movmskps %xmm1, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: v4i8:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpslld $24, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpslld $24, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbd %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxbd %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vmovmskps %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v4i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v4i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -773,66 +500,45 @@ define i4 @v4i8(<4 x i8> %a, <4 x i8> %b<br>
>  define i4 @v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i16> %d) {<br>
>  ; SSE2-SSSE3-LABEL: v4i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]<br>
> +; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    movmskps %xmm1, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: v4i16:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpslld $16, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpslld $16, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxwd %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vmovmskps %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v4i16:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v4i16:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -846,35 +552,23 @@ define i4 @v4i16(<4 x i16> %a, <4 x i16><br>
>  define i8 @v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i8> %d) {<br>
>  ; SSE2-SSSE3-LABEL: v8i8:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm3<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]<br>
> +; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm1<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm1, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: v8i8:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm3, %xmm3<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm2<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbw %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1<br>
> +; AVX12-NEXT:    vpmovsxbw %xmm1, %xmm1<br>
> +; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vpmovmskb %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> @@ -882,19 +576,13 @@ define i8 @v8i8(<8 x i8> %a, <8 x i8> %b<br>
>  ;<br>
>  ; AVX512F-LABEL: v8i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm3, %xmm3<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> -; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1<br>
> +; AVX512F-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
> @@ -902,16 +590,9 @@ define i8 @v8i8(<8 x i8> %a, <8 x i8> %b<br>
>  ;<br>
>  ; AVX512BW-LABEL: v8i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm3, %xmm3<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm2, %xmm2<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k1<br>
> -; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k0 {%k1}<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1<br>
> +; AVX512BW-NEXT:    kandw %k1, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/bitcast-setcc-128.ll Wed Aug  7 09:24:26 2019<br>
> @@ -144,87 +144,45 @@ define i16 @v16i8(<16 x i8> %a, <16 x i8<br>
>  }<br>
><br>
>  define i2 @v2i8(<2 x i8> %a, <2 x i8> %b) {<br>
> -; SSE2-SSSE3-LABEL: v2i8:<br>
> -; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $56, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movmskpd %xmm1, %eax<br>
> -; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; SSE2-SSSE3-NEXT:    retq<br>
> +; SSE2-LABEL: v2i8:<br>
> +; SSE2:       # %bb.0:<br>
> +; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
> +; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
> +; SSE2-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; SSE2-NEXT:    retq<br>
> +;<br>
> +; SSSE3-LABEL: v2i8:<br>
> +; SSSE3:       # %bb.0:<br>
> +; SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,0,0,u,u,0,0,u,u,1,1,u,u,1,1]<br>
> +; SSSE3-NEXT:    movmskpd %xmm0, %eax<br>
> +; SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i8:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i8:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i8:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $56, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $56, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $56, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -236,85 +194,34 @@ define i2 @v2i8(<2 x i8> %a, <2 x i8> %b<br>
>  define i2 @v2i16(<2 x i16> %a, <2 x i16> %b) {<br>
>  ; SSE2-SSSE3-LABEL: v2i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $48, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm2, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    movmskpd %xmm1, %eax<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
> +; SSE2-SSSE3-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i16:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i16:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i16:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxwq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i16:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $48, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i16:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $48, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $48, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -326,73 +233,30 @@ define i2 @v2i16(<2 x i16> %a, <2 x i16><br>
>  define i2 @v2i32(<2 x i32> %a, <2 x i32> %b) {<br>
>  ; SSE2-SSSE3-LABEL: v2i32:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]<br>
> -; SSE2-SSSE3-NEXT:    psllq $32, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    psrad $31, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]<br>
> -; SSE2-SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> -; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648]<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pxor %xmm1, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pcmpeqd %xmm0, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm0, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]<br>
> -; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    por %xmm2, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]<br>
>  ; SSE2-SSSE3-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: v2i32:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX1-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: v2i32:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm1, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpsllq $32, %xmm0, %xmm2<br>
> -; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vmovmskpd %xmm0, %eax<br>
> -; AVX2-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX12-LABEL: v2i32:<br>
> +; AVX12:       # %bb.0:<br>
> +; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxdq %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vmovmskpd %xmm0, %eax<br>
> +; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v2i32:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v2i32:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -478,44 +342,34 @@ define i2 @v2f64(<2 x double> %a, <2 x d<br>
>  define i4 @v4i8(<4 x i8> %a, <4 x i8> %b) {<br>
>  ; SSE2-SSSE3-LABEL: v4i8:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pslld $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psrad $24, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
>  ; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: v4i8:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbd %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vmovmskps %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v4i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v4i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpslld $24, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsrad $24, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -527,44 +381,33 @@ define i4 @v4i8(<4 x i8> %a, <4 x i8> %b<br>
>  define i4 @v4i16(<4 x i16> %a, <4 x i16> %b) {<br>
>  ; SSE2-SSSE3-LABEL: v4i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    pslld $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psrad $16, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
>  ; SSE2-SSSE3-NEXT:    movmskps %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: v4i16:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vmovmskps %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX12-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: v4i16:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> +; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
> +; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
>  ; AVX512BW-LABEL: v4i16:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpslld $16, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsrad $16, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -576,11 +419,8 @@ define i4 @v4i16(<4 x i16> %a, <4 x i16><br>
>  define i8 @v8i8(<8 x i8> %a, <8 x i8> %b) {<br>
>  ; SSE2-SSSE3-LABEL: v8i8:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm1<br>
> -; SSE2-SSSE3-NEXT:    psllw $8, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    psraw $8, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
>  ; SSE2-SSSE3-NEXT:    packsswb %xmm0, %xmm0<br>
>  ; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax<br>
> @@ -588,11 +428,8 @@ define i8 @v8i8(<8 x i8> %a, <8 x i8> %b<br>
>  ;<br>
>  ; AVX12-LABEL: v8i8:<br>
>  ; AVX12:       # %bb.0:<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX12-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX12-NEXT:    vpmovsxbw %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX12-NEXT:    vpmovmskb %xmm0, %eax<br>
>  ; AVX12-NEXT:    # kill: def $al killed $al killed $eax<br>
> @@ -600,13 +437,9 @@ define i8 @v8i8(<8 x i8> %a, <8 x i8> %b<br>
>  ;<br>
>  ; AVX512F-LABEL: v8i8:<br>
>  ; AVX512F:       # %bb.0:<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0<br>
> -; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> -; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0<br>
> +; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0<br>
> +; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
> @@ -614,11 +447,7 @@ define i8 @v8i8(<8 x i8> %a, <8 x i8> %b<br>
>  ;<br>
>  ; AVX512BW-LABEL: v8i8:<br>
>  ; AVX512BW:       # %bb.0:<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm1, %xmm1<br>
> -; AVX512BW-NEXT:    vpsllw $8, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpsraw $8, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0<br>
> +; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0<br>
>  ; AVX512BW-NEXT:    kmovd %k0, %eax<br>
>  ; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax<br>
>  ; AVX512BW-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/bitcast-vector-bool.ll Wed Aug  7 09:24:26 2019<br>
> @@ -151,27 +151,14 @@ define i4 @bitcast_v8i16_to_v2i4(<8 x i1<br>
>  }<br>
><br>
>  define i8 @bitcast_v16i8_to_v2i8(<16 x i8> %a0) nounwind {<br>
> -; SSE2-LABEL: bitcast_v16i8_to_v2i8:<br>
> -; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm0<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    retq<br>
> -;<br>
> -; SSSE3-LABEL: bitcast_v16i8_to_v2i8:<br>
> -; SSSE3:       # %bb.0:<br>
> -; SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSSE3-NEXT:    movd %eax, %xmm0<br>
> -; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,u,u,u,u,u,u,u,1,u,u,u,u,u,u,u]<br>
> -; SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    retq<br>
> +; SSE2-SSSE3-LABEL: bitcast_v16i8_to_v2i8:<br>
> +; SSE2-SSSE3:       # %bb.0:<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    movd %eax, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX12-LABEL: bitcast_v16i8_to_v2i8:<br>
>  ; AVX12:       # %bb.0:<br>
> @@ -187,7 +174,7 @@ define i8 @bitcast_v16i8_to_v2i8(<16 x i<br>
>  ; AVX512:       # %bb.0:<br>
>  ; AVX512-NEXT:    vpmovb2m %xmm0, %k0<br>
>  ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)<br>
> -; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> +; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addb %cl, %al<br>
> @@ -318,29 +305,15 @@ define i4 @bitcast_v8i32_to_v2i4(<8 x i3<br>
>  }<br>
><br>
>  define i8 @bitcast_v16i16_to_v2i8(<16 x i16> %a0) nounwind {<br>
> -; SSE2-LABEL: bitcast_v16i16_to_v2i8:<br>
> -; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    packsswb %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm0<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    retq<br>
> -;<br>
> -; SSSE3-LABEL: bitcast_v16i16_to_v2i8:<br>
> -; SSSE3:       # %bb.0:<br>
> -; SSSE3-NEXT:    packsswb %xmm1, %xmm0<br>
> -; SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSSE3-NEXT:    movd %eax, %xmm0<br>
> -; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,u,u,u,u,u,u,u,1,u,u,u,u,u,u,u]<br>
> -; SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    retq<br>
> +; SSE2-SSSE3-LABEL: bitcast_v16i16_to_v2i8:<br>
> +; SSE2-SSSE3:       # %bb.0:<br>
> +; SSE2-SSSE3-NEXT:    packsswb %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    movd %eax, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: bitcast_v16i16_to_v2i8:<br>
>  ; AVX1:       # %bb.0:<br>
> @@ -374,7 +347,7 @@ define i8 @bitcast_v16i16_to_v2i8(<16 x<br>
>  ; AVX512:       # %bb.0:<br>
>  ; AVX512-NEXT:    vpmovw2m %ymm0, %k0<br>
>  ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)<br>
> -; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> +; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addb %cl, %al<br>
> @@ -392,12 +365,10 @@ define i8 @bitcast_v16i16_to_v2i8(<16 x<br>
>  define i16 @bitcast_v32i8_to_v2i16(<32 x i8> %a0) nounwind {<br>
>  ; SSE2-SSSE3-LABEL: bitcast_v32i8_to_v2i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
> -; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSE2-SSSE3-NEXT:    pmovmskb %xmm1, %ecx<br>
> -; SSE2-SSSE3-NEXT:    shll $16, %ecx<br>
> -; SSE2-SSSE3-NEXT:    orl %eax, %ecx<br>
> -; SSE2-SSSE3-NEXT:    movd %ecx, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pextrw $0, %xmm0, %ecx<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %ecx<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm1, %eax<br>
> +; SSE2-SSSE3-NEXT:    shll $16, %eax<br>
> +; SSE2-SSSE3-NEXT:    movd %eax, %xmm0<br>
>  ; SSE2-SSSE3-NEXT:    pextrw $1, %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    addl %ecx, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -411,7 +382,6 @@ define i16 @bitcast_v32i8_to_v2i16(<32 x<br>
>  ; AVX1-NEXT:    shll $16, %ecx<br>
>  ; AVX1-NEXT:    orl %eax, %ecx<br>
>  ; AVX1-NEXT:    vmovd %ecx, %xmm0<br>
> -; AVX1-NEXT:    vpextrw $0, %xmm0, %ecx<br>
>  ; AVX1-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX1-NEXT:    addl %ecx, %eax<br>
>  ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -420,9 +390,8 @@ define i16 @bitcast_v32i8_to_v2i16(<32 x<br>
>  ;<br>
>  ; AVX2-LABEL: bitcast_v32i8_to_v2i16:<br>
>  ; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpmovmskb %ymm0, %eax<br>
> -; AVX2-NEXT:    vmovd %eax, %xmm0<br>
> -; AVX2-NEXT:    vpextrw $0, %xmm0, %ecx<br>
> +; AVX2-NEXT:    vpmovmskb %ymm0, %ecx<br>
> +; AVX2-NEXT:    vmovd %ecx, %xmm0<br>
>  ; AVX2-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX2-NEXT:    addl %ecx, %eax<br>
>  ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -437,8 +406,8 @@ define i16 @bitcast_v32i8_to_v2i16(<32 x<br>
>  ; AVX512-NEXT:    subq $32, %rsp<br>
>  ; AVX512-NEXT:    vpmovb2m %ymm0, %k0<br>
>  ; AVX512-NEXT:    kmovd %k0, (%rsp)<br>
> -; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> -; AVX512-NEXT:    vpextrw $0, %xmm0, %ecx<br>
> +; AVX512-NEXT:    vmovdqa (%rsp), %xmm0<br>
> +; AVX512-NEXT:    vmovd %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addl %ecx, %eax<br>
>  ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -579,33 +548,17 @@ define i4 @bitcast_v8i64_to_v2i4(<8 x i6<br>
>  }<br>
><br>
>  define i8 @bitcast_v16i32_to_v2i8(<16 x i32> %a0) nounwind {<br>
> -; SSE2-LABEL: bitcast_v16i32_to_v2i8:<br>
> -; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    packssdw %xmm3, %xmm2<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> -; SSE2-NEXT:    packsswb %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm0<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; SSE2-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSE2-NEXT:    retq<br>
> -;<br>
> -; SSSE3-LABEL: bitcast_v16i32_to_v2i8:<br>
> -; SSSE3:       # %bb.0:<br>
> -; SSSE3-NEXT:    packssdw %xmm3, %xmm2<br>
> -; SSSE3-NEXT:    packssdw %xmm1, %xmm0<br>
> -; SSSE3-NEXT:    packsswb %xmm2, %xmm0<br>
> -; SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> -; SSSE3-NEXT:    movd %eax, %xmm0<br>
> -; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,u,u,u,u,u,u,u,1,u,u,u,u,u,u,u]<br>
> -; SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> -; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> -; SSSE3-NEXT:    retq<br>
> +; SSE2-SSSE3-LABEL: bitcast_v16i32_to_v2i8:<br>
> +; SSE2-SSSE3:       # %bb.0:<br>
> +; SSE2-SSSE3-NEXT:    packssdw %xmm3, %xmm2<br>
> +; SSE2-SSSE3-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    packsswb %xmm2, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    movd %eax, %xmm0<br>
> +; SSE2-SSSE3-NEXT:    movdqa %xmm0, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    addb -{{[0-9]+}}(%rsp), %al<br>
> +; SSE2-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: bitcast_v16i32_to_v2i8:<br>
>  ; AVX1:       # %bb.0:<br>
> @@ -646,7 +599,7 @@ define i8 @bitcast_v16i32_to_v2i8(<16 x<br>
>  ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
>  ; AVX512-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0<br>
>  ; AVX512-NEXT:    kmovw %k0, -{{[0-9]+}}(%rsp)<br>
> -; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> +; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX512-NEXT:    vpextrb $0, %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrb $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addb %cl, %al<br>
> @@ -665,13 +618,11 @@ define i16 @bitcast_v32i16_to_v2i16(<32<br>
>  ; SSE2-SSSE3-LABEL: bitcast_v32i16_to_v2i16:<br>
>  ; SSE2-SSSE3:       # %bb.0:<br>
>  ; SSE2-SSSE3-NEXT:    packsswb %xmm1, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %eax<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm0, %ecx<br>
>  ; SSE2-SSSE3-NEXT:    packsswb %xmm3, %xmm2<br>
> -; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %ecx<br>
> -; SSE2-SSSE3-NEXT:    shll $16, %ecx<br>
> -; SSE2-SSSE3-NEXT:    orl %eax, %ecx<br>
> -; SSE2-SSSE3-NEXT:    movd %ecx, %xmm0<br>
> -; SSE2-SSSE3-NEXT:    pextrw $0, %xmm0, %ecx<br>
> +; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %eax<br>
> +; SSE2-SSSE3-NEXT:    shll $16, %eax<br>
> +; SSE2-SSSE3-NEXT:    movd %eax, %xmm0<br>
>  ; SSE2-SSSE3-NEXT:    pextrw $1, %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    addl %ecx, %eax<br>
>  ; SSE2-SSSE3-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -688,7 +639,6 @@ define i16 @bitcast_v32i16_to_v2i16(<32<br>
>  ; AVX1-NEXT:    shll $16, %ecx<br>
>  ; AVX1-NEXT:    orl %eax, %ecx<br>
>  ; AVX1-NEXT:    vmovd %ecx, %xmm0<br>
> -; AVX1-NEXT:    vpextrw $0, %xmm0, %ecx<br>
>  ; AVX1-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX1-NEXT:    addl %ecx, %eax<br>
>  ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -699,9 +649,8 @@ define i16 @bitcast_v32i16_to_v2i16(<32<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0<br>
>  ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]<br>
> -; AVX2-NEXT:    vpmovmskb %ymm0, %eax<br>
> -; AVX2-NEXT:    vmovd %eax, %xmm0<br>
> -; AVX2-NEXT:    vpextrw $0, %xmm0, %ecx<br>
> +; AVX2-NEXT:    vpmovmskb %ymm0, %ecx<br>
> +; AVX2-NEXT:    vmovd %ecx, %xmm0<br>
>  ; AVX2-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX2-NEXT:    addl %ecx, %eax<br>
>  ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -716,8 +665,8 @@ define i16 @bitcast_v32i16_to_v2i16(<32<br>
>  ; AVX512-NEXT:    subq $32, %rsp<br>
>  ; AVX512-NEXT:    vpmovw2m %zmm0, %k0<br>
>  ; AVX512-NEXT:    kmovd %k0, (%rsp)<br>
> -; AVX512-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> -; AVX512-NEXT:    vpextrw $0, %xmm0, %ecx<br>
> +; AVX512-NEXT:    vmovdqa (%rsp), %xmm0<br>
> +; AVX512-NEXT:    vmovd %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrw $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addl %ecx, %eax<br>
>  ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax<br>
> @@ -984,9 +933,9 @@ define i32 @bitcast_v64i8_to_v2i32(<64 x<br>
>  ; SSE2-SSSE3-NEXT:    orl %ecx, %edx<br>
>  ; SSE2-SSSE3-NEXT:    orl %eax, %edx<br>
>  ; SSE2-SSSE3-NEXT:    movw %dx, -{{[0-9]+}}(%rsp)<br>
> -; SSE2-SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; SSE2-SSSE3-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; SSE2-SSSE3-NEXT:    movd %xmm0, %ecx<br>
> -; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,0,1]<br>
> +; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
>  ; SSE2-SSSE3-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-SSSE3-NEXT:    addl %ecx, %eax<br>
>  ; SSE2-SSSE3-NEXT:    retq<br>
> @@ -1246,7 +1195,7 @@ define i32 @bitcast_v64i8_to_v2i32(<64 x<br>
>  ; AVX1-NEXT:    orl %ecx, %edx<br>
>  ; AVX1-NEXT:    orl %eax, %edx<br>
>  ; AVX1-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)<br>
> -; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero<br>
> +; AVX1-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX1-NEXT:    vmovd %xmm0, %ecx<br>
>  ; AVX1-NEXT:    vpextrd $1, %xmm0, %eax<br>
>  ; AVX1-NEXT:    addl %ecx, %eax<br>
> @@ -1506,7 +1455,7 @@ define i32 @bitcast_v64i8_to_v2i32(<64 x<br>
>  ; AVX2-NEXT:    orl %ecx, %edx<br>
>  ; AVX2-NEXT:    orl %eax, %edx<br>
>  ; AVX2-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)<br>
> -; AVX2-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero<br>
> +; AVX2-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX2-NEXT:    vmovd %xmm0, %ecx<br>
>  ; AVX2-NEXT:    vpextrd $1, %xmm0, %eax<br>
>  ; AVX2-NEXT:    addl %ecx, %eax<br>
> @@ -1517,7 +1466,7 @@ define i32 @bitcast_v64i8_to_v2i32(<64 x<br>
>  ; AVX512:       # %bb.0:<br>
>  ; AVX512-NEXT:    vpmovb2m %zmm0, %k0<br>
>  ; AVX512-NEXT:    kmovq %k0, -{{[0-9]+}}(%rsp)<br>
> -; AVX512-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero<br>
> +; AVX512-NEXT:    vmovdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; AVX512-NEXT:    vmovd %xmm0, %ecx<br>
>  ; AVX512-NEXT:    vpextrd $1, %xmm0, %eax<br>
>  ; AVX512-NEXT:    addl %ecx, %eax<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/bitreverse.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitreverse.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitreverse.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/bitreverse.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/bitreverse.ll Wed Aug  7 09:24:26 2019<br>
> @@ -55,13 +55,11 @@ define <2 x i16> @test_bitreverse_v2i16(<br>
>  ; X64-NEXT:    pxor %xmm1, %xmm1<br>
>  ; X64-NEXT:    movdqa %xmm0, %xmm2<br>
>  ; X64-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]<br>
> -; X64-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]<br>
> -; X64-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]<br>
> +; X64-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]<br>
> +; X64-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]<br>
>  ; X64-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
> -; X64-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]<br>
> -; X64-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]<br>
> +; X64-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]<br>
> +; X64-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]<br>
>  ; X64-NEXT:    packuswb %xmm2, %xmm0<br>
>  ; X64-NEXT:    movdqa %xmm0, %xmm1<br>
>  ; X64-NEXT:    psllw $4, %xmm1<br>
> @@ -81,7 +79,6 @@ define <2 x i16> @test_bitreverse_v2i16(<br>
>  ; X64-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; X64-NEXT:    psrlw $1, %xmm0<br>
>  ; X64-NEXT:    por %xmm1, %xmm0<br>
> -; X64-NEXT:    psrlq $48, %xmm0<br>
>  ; X64-NEXT:    retq<br>
>    %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> %a)<br>
>    ret <2 x i16> %b<br>
> @@ -410,7 +407,7 @@ define <2 x i16> @fold_v2i16() {<br>
>  ;<br>
>  ; X64-LABEL: fold_v2i16:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    movaps {{.*#+}} xmm0 = [61440,240]<br>
> +; X64-NEXT:    movaps {{.*#+}} xmm0 = <61440,240,u,u,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> <i16 15, i16 3840>)<br>
>    ret <2 x i16> %b<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/bswap-vector.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bswap-vector.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bswap-vector.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/bswap-vector.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/bswap-vector.ll Wed Aug  7 09:24:26 2019<br>
> @@ -291,23 +291,22 @@ define <4 x i16> @test7(<4 x i16> %v) {<br>
>  ; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm1<br>
>  ; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2<br>
>  ; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]<br>
> -; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]<br>
> -; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]<br>
> +; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]<br>
> +; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]<br>
>  ; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]<br>
> -; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]<br>
> -; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]<br>
> +; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]<br>
> +; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]<br>
>  ; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0<br>
> -; CHECK-NOSSSE3-NEXT:    psrld $16, %xmm0<br>
>  ; CHECK-NOSSSE3-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-SSSE3-LABEL: test7:<br>
>  ; CHECK-SSSE3:       # %bb.0: # %entry<br>
> -; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0],zero,zero,xmm0[5,4],zero,zero,xmm0[9,8],zero,zero,xmm0[13,12],zero,zero<br>
> +; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]<br>
>  ; CHECK-SSSE3-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-AVX-LABEL: test7:<br>
>  ; CHECK-AVX:       # %bb.0: # %entry<br>
> -; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0],zero,zero,xmm0[5,4],zero,zero,xmm0[9,8],zero,zero,xmm0[13,12],zero,zero<br>
> +; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]<br>
>  ; CHECK-AVX-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-WIDE-AVX-LABEL: test7:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/buildvec-insertvec.ll Wed Aug  7 09:24:26 2019<br>
> @@ -6,22 +6,29 @@ define void @foo(<3 x float> %in, <4 x i<br>
>  ; SSE2-LABEL: foo:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    cvttps2dq %xmm0, %xmm0<br>
> -; SSE2-NEXT:    movl $255, %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm1<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0]<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0]<br>
> -; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)<br>
> +; SSE2-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax<br>
> +; SSE2-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx<br>
> +; SSE2-NEXT:    shll $8, %ecx<br>
> +; SSE2-NEXT:    orl %eax, %ecx<br>
> +; SSE2-NEXT:    movd %ecx, %xmm0<br>
> +; SSE2-NEXT:    movl $65280, %eax # imm = 0xFF00<br>
> +; SSE2-NEXT:    orl -{{[0-9]+}}(%rsp), %eax<br>
> +; SSE2-NEXT:    pinsrw $1, %eax, %xmm0<br>
>  ; SSE2-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE41-LABEL: foo:<br>
>  ; SSE41:       # %bb.0:<br>
>  ; SSE41-NEXT:    cvttps2dq %xmm0, %xmm0<br>
> +; SSE41-NEXT:    pextrb $8, %xmm0, %eax<br>
> +; SSE41-NEXT:    pextrb $4, %xmm0, %ecx<br>
> +; SSE41-NEXT:    pextrb $0, %xmm0, %edx<br>
> +; SSE41-NEXT:    movd %edx, %xmm0<br>
> +; SSE41-NEXT:    pinsrb $1, %ecx, %xmm0<br>
> +; SSE41-NEXT:    pinsrb $2, %eax, %xmm0<br>
>  ; SSE41-NEXT:    movl $255, %eax<br>
> -; SSE41-NEXT:    pinsrd $3, %eax, %xmm0<br>
> -; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; SSE41-NEXT:    pinsrb $3, %eax, %xmm0<br>
>  ; SSE41-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE41-NEXT:    retq<br>
>    %t0 = fptoui <3 x float> %in to <3 x i8><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/combine-64bit-vec-binop.ll Wed Aug  7 09:24:26 2019<br>
> @@ -101,9 +101,9 @@ define double @test2_mul(double %A, doub<br>
>  define double @test3_mul(double %A, double %B) {<br>
>  ; SSE41-LABEL: test3_mul:<br>
>  ; SSE41:       # %bb.0:<br>
> -; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> -; SSE41-NEXT:    pmullw %xmm2, %xmm0<br>
> +; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero<br>
> +; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; SSE41-NEXT:    pmullw %xmm1, %xmm0<br>
>  ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; SSE41-NEXT:    retq<br>
>    %1 = bitcast double %A to <8 x i8><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/combine-or.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/combine-or.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/combine-or.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/combine-or.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/combine-or.ll Wed Aug  7 09:24:26 2019<br>
> @@ -362,7 +362,7 @@ define <4 x float> @test25(<4 x float> %<br>
>  define <4 x i8> @test_crash(<4 x i8> %a, <4 x i8> %b) {<br>
>  ; CHECK-LABEL: test_crash:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]<br>
> +; CHECK-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0],xmm0[1],xmm1[2,3,4,5,6,7]<br>
>  ; CHECK-NEXT:    retq<br>
>    %shuf1 = shufflevector <4 x i8> %a, <4 x i8> zeroinitializer, <4 x i32><i32 4, i32 4, i32 2, i32 3><br>
>    %shuf2 = shufflevector <4 x i8> %b, <4 x i8> zeroinitializer, <4 x i32><i32 0, i32 1, i32 4, i32 4><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/complex-fastmath.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/complex-fastmath.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/complex-fastmath.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/complex-fastmath.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/complex-fastmath.ll Wed Aug  7 09:24:26 2019<br>
> @@ -39,7 +39,7 @@ define <2 x float> @complex_square_f32(<<br>
>  ; FMA-NEXT:    vaddss %xmm0, %xmm0, %xmm2<br>
>  ; FMA-NEXT:    vmulss %xmm2, %xmm1, %xmm2<br>
>  ; FMA-NEXT:    vmulss %xmm1, %xmm1, %xmm1<br>
> -; FMA-NEXT:    vfmsub231ss %xmm0, %xmm0, %xmm1<br>
> +; FMA-NEXT:    vfmsub231ss {{.*#+}} xmm1 = (xmm0 * xmm0) - xmm1<br>
>  ; FMA-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm2[0],xmm1[2,3]<br>
>  ; FMA-NEXT:    retq<br>
>    %2 = extractelement <2 x float> %0, i32 0<br>
> @@ -85,7 +85,7 @@ define <2 x double> @complex_square_f64(<br>
>  ; FMA-NEXT:    vaddsd %xmm0, %xmm0, %xmm2<br>
>  ; FMA-NEXT:    vmulsd %xmm2, %xmm1, %xmm2<br>
>  ; FMA-NEXT:    vmulsd %xmm1, %xmm1, %xmm1<br>
> -; FMA-NEXT:    vfmsub231sd %xmm0, %xmm0, %xmm1<br>
> +; FMA-NEXT:    vfmsub231sd {{.*#+}} xmm1 = (xmm0 * xmm0) - xmm1<br>
>  ; FMA-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm2[0]<br>
>  ; FMA-NEXT:    retq<br>
>    %2 = extractelement <2 x double> %0, i32 0<br>
> @@ -137,9 +137,9 @@ define <2 x float> @complex_mul_f32(<2 x<br>
>  ; FMA-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]<br>
>  ; FMA-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm1[1,1,3,3]<br>
>  ; FMA-NEXT:    vmulss %xmm2, %xmm1, %xmm4<br>
> -; FMA-NEXT:    vfmadd231ss %xmm0, %xmm3, %xmm4<br>
> +; FMA-NEXT:    vfmadd231ss {{.*#+}} xmm4 = (xmm3 * xmm0) + xmm4<br>
>  ; FMA-NEXT:    vmulss %xmm2, %xmm3, %xmm2<br>
> -; FMA-NEXT:    vfmsub231ss %xmm0, %xmm1, %xmm2<br>
> +; FMA-NEXT:    vfmsub231ss {{.*#+}} xmm2 = (xmm1 * xmm0) - xmm2<br>
>  ; FMA-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0],xmm4[0],xmm2[2,3]<br>
>  ; FMA-NEXT:    retq<br>
>    %3 = extractelement <2 x float> %0, i32 0<br>
> @@ -192,9 +192,9 @@ define <2 x double> @complex_mul_f64(<2<br>
>  ; FMA-NEXT:    vpermilpd {{.*#+}} xmm2 = xmm0[1,0]<br>
>  ; FMA-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm1[1,0]<br>
>  ; FMA-NEXT:    vmulsd %xmm2, %xmm1, %xmm4<br>
> -; FMA-NEXT:    vfmadd231sd %xmm0, %xmm3, %xmm4<br>
> +; FMA-NEXT:    vfmadd231sd {{.*#+}} xmm4 = (xmm3 * xmm0) + xmm4<br>
>  ; FMA-NEXT:    vmulsd %xmm2, %xmm3, %xmm2<br>
> -; FMA-NEXT:    vfmsub231sd %xmm0, %xmm1, %xmm2<br>
> +; FMA-NEXT:    vfmsub231sd {{.*#+}} xmm2 = (xmm1 * xmm0) - xmm2<br>
>  ; FMA-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm4[0]<br>
>  ; FMA-NEXT:    retq<br>
>    %3 = extractelement <2 x double> %0, i32 0<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/cvtv2f32.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/cvtv2f32.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/cvtv2f32.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/cvtv2f32.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/cvtv2f32.ll Wed Aug  7 09:24:26 2019<br>
> @@ -42,11 +42,9 @@ define <2 x float> @uitofp_2i32_cvt_buil<br>
>  define <2 x float> @uitofp_2i32_buildvector_cvt(i32 %x, i32 %y, <2 x float> %v) {<br>
>  ; X32-LABEL: uitofp_2i32_buildvector_cvt:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
> -; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero<br>
> -; X32-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm1[0]<br>
> -; X32-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> -; X32-NEXT:    orpd %xmm1, %xmm2<br>
> +; X32-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> +; X32-NEXT:    pmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero<br>
> +; X32-NEXT:    por %xmm1, %xmm2<br>
>  ; X32-NEXT:    subpd %xmm1, %xmm2<br>
>  ; X32-NEXT:    cvtpd2ps %xmm2, %xmm1<br>
>  ; X32-NEXT:    mulps %xmm1, %xmm0<br>
> @@ -54,13 +52,13 @@ define <2 x float> @uitofp_2i32_buildvec<br>
>  ;<br>
>  ; X64-LABEL: uitofp_2i32_buildvector_cvt:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    movd %esi, %xmm1<br>
> -; X64-NEXT:    movd %edi, %xmm2<br>
> -; X64-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]<br>
> -; X64-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> -; X64-NEXT:    por %xmm1, %xmm2<br>
> -; X64-NEXT:    subpd %xmm1, %xmm2<br>
> -; X64-NEXT:    cvtpd2ps %xmm2, %xmm1<br>
> +; X64-NEXT:    movd %edi, %xmm1<br>
> +; X64-NEXT:    pinsrd $1, %esi, %xmm1<br>
> +; X64-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero<br>
> +; X64-NEXT:    movdqa {{.*#+}} xmm2 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> +; X64-NEXT:    por %xmm2, %xmm1<br>
> +; X64-NEXT:    subpd %xmm2, %xmm1<br>
> +; X64-NEXT:    cvtpd2ps %xmm1, %xmm1<br>
>  ; X64-NEXT:    mulps %xmm1, %xmm0<br>
>  ; X64-NEXT:    retq<br>
>    %t1 = insertelement <2 x i32> undef, i32 %x, i32 0<br>
> @@ -73,23 +71,21 @@ define <2 x float> @uitofp_2i32_buildvec<br>
>  define <2 x float> @uitofp_2i32_legalized(<2 x i32> %in, <2 x float> %v) {<br>
>  ; X32-LABEL: uitofp_2i32_legalized:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    xorps %xmm2, %xmm2<br>
> -; X32-NEXT:    blendps {{.*#+}} xmm2 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; X32-NEXT:    movaps {{.*#+}} xmm0 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> -; X32-NEXT:    orps %xmm0, %xmm2<br>
> -; X32-NEXT:    subpd %xmm0, %xmm2<br>
> -; X32-NEXT:    cvtpd2ps %xmm2, %xmm0<br>
> +; X32-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
> +; X32-NEXT:    movdqa {{.*#+}} xmm2 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> +; X32-NEXT:    por %xmm2, %xmm0<br>
> +; X32-NEXT:    subpd %xmm2, %xmm0<br>
> +; X32-NEXT:    cvtpd2ps %xmm0, %xmm0<br>
>  ; X32-NEXT:    mulps %xmm1, %xmm0<br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: uitofp_2i32_legalized:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    xorps %xmm2, %xmm2<br>
> -; X64-NEXT:    blendps {{.*#+}} xmm2 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; X64-NEXT:    movaps {{.*#+}} xmm0 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> -; X64-NEXT:    orps %xmm0, %xmm2<br>
> -; X64-NEXT:    subpd %xmm0, %xmm2<br>
> -; X64-NEXT:    cvtpd2ps %xmm2, %xmm0<br>
> +; X64-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
> +; X64-NEXT:    movdqa {{.*#+}} xmm2 = [4.503599627370496E+15,4.503599627370496E+15]<br>
> +; X64-NEXT:    por %xmm2, %xmm0<br>
> +; X64-NEXT:    subpd %xmm2, %xmm0<br>
> +; X64-NEXT:    cvtpd2ps %xmm0, %xmm0<br>
>  ; X64-NEXT:    mulps %xmm1, %xmm0<br>
>  ; X64-NEXT:    retq<br>
>    %t1 = uitofp <2 x i32> %in to <2 x float><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/extract-concat.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-concat.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-concat.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/extract-concat.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/extract-concat.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5,9 +5,14 @@ define void @foo(<4 x float> %in, <4 x i<br>
>  ; CHECK-LABEL: foo:<br>
>  ; CHECK:       # %bb.0:<br>
>  ; CHECK-NEXT:    cvttps2dq %xmm0, %xmm0<br>
> +; CHECK-NEXT:    pextrb $8, %xmm0, %eax<br>
> +; CHECK-NEXT:    pextrb $4, %xmm0, %ecx<br>
> +; CHECK-NEXT:    pextrb $0, %xmm0, %edx<br>
> +; CHECK-NEXT:    movd %edx, %xmm0<br>
> +; CHECK-NEXT:    pinsrb $1, %ecx, %xmm0<br>
> +; CHECK-NEXT:    pinsrb $2, %eax, %xmm0<br>
>  ; CHECK-NEXT:    movl $255, %eax<br>
> -; CHECK-NEXT:    pinsrd $3, %eax, %xmm0<br>
> -; CHECK-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; CHECK-NEXT:    pinsrb $3, %eax, %xmm0<br>
>  ; CHECK-NEXT:    movd %xmm0, (%rdi)<br>
>  ; CHECK-NEXT:    retq<br>
>    %t0 = fptosi <4 x float> %in to <4 x i32><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/extract-insert.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-insert.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-insert.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/extract-insert.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/extract-insert.ll Wed Aug  7 09:24:26 2019<br>
> @@ -31,12 +31,10 @@ define i8 @extractelt_bitcast(i32 %x) no<br>
>  define i8 @extractelt_bitcast_extra_use(i32 %x, <4 x i8>* %p) nounwind {<br>
>  ; X86-LABEL: extractelt_bitcast_extra_use:<br>
>  ; X86:       # %bb.0:<br>
> -; X86-NEXT:    pushl %eax<br>
>  ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
>  ; X86-NEXT:    movl %eax, (%ecx)<br>
>  ; X86-NEXT:    # kill: def $al killed $al killed $eax<br>
> -; X86-NEXT:    popl %ecx<br>
>  ; X86-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: extractelt_bitcast_extra_use:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/f16c-intrinsics.ll Wed Aug  7 09:24:26 2019<br>
> @@ -268,14 +268,12 @@ define void @test_x86_vcvtps2ph_128_m(<4<br>
>  ; X32-AVX512VL-LABEL: test_x86_vcvtps2ph_128_m:<br>
>  ; X32-AVX512VL:       # %bb.0: # %entry<br>
>  ; X32-AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
> -; X32-AVX512VL-NEXT:    vcvtps2ph $3, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x1d,0xc0,0x03]<br>
> -; X32-AVX512VL-NEXT:    vmovlps %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x13,0x00]<br>
> +; X32-AVX512VL-NEXT:    vcvtps2ph $3, %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x1d,0x00,0x03]<br>
>  ; X32-AVX512VL-NEXT:    retl # encoding: [0xc3]<br>
>  ;<br>
>  ; X64-AVX512VL-LABEL: test_x86_vcvtps2ph_128_m:<br>
>  ; X64-AVX512VL:       # %bb.0: # %entry<br>
> -; X64-AVX512VL-NEXT:    vcvtps2ph $3, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x1d,0xc0,0x03]<br>
> -; X64-AVX512VL-NEXT:    vmovlps %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x13,0x07]<br>
> +; X64-AVX512VL-NEXT:    vcvtps2ph $3, %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc4,0xe3,0x79,0x1d,0x07,0x03]<br>
>  ; X64-AVX512VL-NEXT:    retq # encoding: [0xc3]<br>
>  entry:<br>
>    %0 = tail call <8 x i16> @llvm.x86.vcvtps2ph.128(<4 x float> %a, i32 3)<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/fold-vector-sext-zext.ll Wed Aug  7 09:24:26 2019<br>
> @@ -11,12 +11,12 @@<br>
>  define <4 x i16> @test_sext_4i8_4i16() {<br>
>  ; X32-LABEL: test_sext_4i8_4i16:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,2,4294967293]<br>
> +; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <0,65535,2,65533,u,u,u,u><br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: test_sext_4i8_4i16:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,2,4294967293]<br>
> +; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <0,65535,2,65533,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %1 = insertelement <4 x i8> undef, i8 0, i32 0<br>
>    %2 = insertelement <4 x i8> %1, i8 -1, i32 1<br>
> @@ -29,12 +29,12 @@ define <4 x i16> @test_sext_4i8_4i16() {<br>
>  define <4 x i16> @test_sext_4i8_4i16_undef() {<br>
>  ; X32-LABEL: test_sext_4i8_4i16_undef:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <u,4294967295,u,4294967293><br>
> +; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <u,65535,u,65533,u,u,u,u><br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: test_sext_4i8_4i16_undef:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <u,4294967295,u,4294967293><br>
> +; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <u,65535,u,65533,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %1 = insertelement <4 x i8> undef, i8 undef, i32 0<br>
>    %2 = insertelement <4 x i8> %1, i8 -1, i32 1<br>
> @@ -207,12 +207,12 @@ define <8 x i32> @test_sext_8i8_8i32_und<br>
>  define <4 x i16> @test_zext_4i8_4i16() {<br>
>  ; X32-LABEL: test_zext_4i8_4i16:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,2,253]<br>
> +; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <0,255,2,253,u,u,u,u><br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: test_zext_4i8_4i16:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,2,253]<br>
> +; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <0,255,2,253,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %1 = insertelement <4 x i8> undef, i8 0, i32 0<br>
>    %2 = insertelement <4 x i8> %1, i8 -1, i32 1<br>
> @@ -261,12 +261,12 @@ define <4 x i64> @test_zext_4i8_4i64() {<br>
>  define <4 x i16> @test_zext_4i8_4i16_undef() {<br>
>  ; X32-LABEL: test_zext_4i8_4i16_undef:<br>
>  ; X32:       # %bb.0:<br>
> -; X32-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,0,253]<br>
> +; X32-NEXT:    vmovaps {{.*#+}} xmm0 = <0,255,0,253,u,u,u,u><br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: test_zext_4i8_4i16_undef:<br>
>  ; X64:       # %bb.0:<br>
> -; X64-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,0,253]<br>
> +; X64-NEXT:    vmovaps {{.*#+}} xmm0 = <0,255,0,253,u,u,u,u><br>
>  ; X64-NEXT:    retq<br>
>    %1 = insertelement <4 x i8> undef, i8 undef, i32 0<br>
>    %2 = insertelement <4 x i8> %1, i8 -1, i32 1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/insertelement-shuffle.ll Wed Aug  7 09:24:26 2019<br>
> @@ -30,18 +30,10 @@ define <8 x float> @insert_subvector_256<br>
>  define <8 x i64> @insert_subvector_512(i32 %x0, i32 %x1, <8 x i64> %v) nounwind {<br>
>  ; X86_AVX256-LABEL: insert_subvector_512:<br>
>  ; X86_AVX256:       # %bb.0:<br>
> -; X86_AVX256-NEXT:    pushl %ebp<br>
> -; X86_AVX256-NEXT:    movl %esp, %ebp<br>
> -; X86_AVX256-NEXT:    andl $-8, %esp<br>
> -; X86_AVX256-NEXT:    subl $8, %esp<br>
> -; X86_AVX256-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero<br>
> -; X86_AVX256-NEXT:    vmovlps %xmm2, (%esp)<br>
>  ; X86_AVX256-NEXT:    vextracti128 $1, %ymm0, %xmm2<br>
> -; X86_AVX256-NEXT:    vpinsrd $0, (%esp), %xmm2, %xmm2<br>
> +; X86_AVX256-NEXT:    vpinsrd $0, {{[0-9]+}}(%esp), %xmm2, %xmm2<br>
>  ; X86_AVX256-NEXT:    vpinsrd $1, {{[0-9]+}}(%esp), %xmm2, %xmm2<br>
>  ; X86_AVX256-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0<br>
> -; X86_AVX256-NEXT:    movl %ebp, %esp<br>
> -; X86_AVX256-NEXT:    popl %ebp<br>
>  ; X86_AVX256-NEXT:    retl<br>
>  ;<br>
>  ; X64_AVX256-LABEL: insert_subvector_512:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/known-bits.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/known-bits.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/known-bits.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/known-bits.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/known-bits.ll Wed Aug  7 09:24:26 2019<br>
> @@ -5,100 +5,44 @@<br>
>  define void @knownbits_zext_in_reg(i8*) nounwind {<br>
>  ; X32-LABEL: knownbits_zext_in_reg:<br>
>  ; X32:       # %bb.0: # %BB<br>
> -; X32-NEXT:    pushl %ebp<br>
>  ; X32-NEXT:    pushl %ebx<br>
> -; X32-NEXT:    pushl %edi<br>
> -; X32-NEXT:    pushl %esi<br>
> -; X32-NEXT:    subl $16, %esp<br>
>  ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; X32-NEXT:    movzbl (%eax), %ecx<br>
>  ; X32-NEXT:    imull $101, %ecx, %eax<br>
>  ; X32-NEXT:    shrl $14, %eax<br>
> -; X32-NEXT:    imull $177, %ecx, %ecx<br>
> -; X32-NEXT:    shrl $14, %ecx<br>
> -; X32-NEXT:    movzbl %al, %eax<br>
> -; X32-NEXT:    vpxor %xmm0, %xmm0, %xmm0<br>
> -; X32-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm1<br>
> -; X32-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3.57331108E-43,3.57331108E-43,3.57331108E-43,3.57331108E-43]<br>
> -; X32-NEXT:    vpand %xmm2, %xmm1, %xmm1<br>
> -; X32-NEXT:    movzbl %cl, %eax<br>
> -; X32-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm0<br>
> -; X32-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; X32-NEXT:    vpextrd $1, %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill<br>
> -; X32-NEXT:    vpextrd $1, %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill<br>
> -; X32-NEXT:    xorl %ecx, %ecx<br>
> -; X32-NEXT:    vmovd %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill<br>
> -; X32-NEXT:    vmovd %xmm0, (%esp) # 4-byte Folded Spill<br>
> -; X32-NEXT:    vpextrd $2, %xmm1, %edi<br>
> -; X32-NEXT:    vpextrd $2, %xmm0, %esi<br>
> -; X32-NEXT:    vpextrd $3, %xmm1, %ebx<br>
> -; X32-NEXT:    vpextrd $3, %xmm0, %ebp<br>
> +; X32-NEXT:    imull $177, %ecx, %edx<br>
> +; X32-NEXT:    shrl $14, %edx<br>
> +; X32-NEXT:    movzbl %al, %ecx<br>
> +; X32-NEXT:    xorl %ebx, %ebx<br>
>  ; X32-NEXT:    .p2align 4, 0x90<br>
>  ; X32-NEXT:  .LBB0_1: # %CF<br>
>  ; X32-NEXT:    # =>This Loop Header: Depth=1<br>
>  ; X32-NEXT:    # Child Loop BB0_2 Depth 2<br>
> -; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload<br>
> -; X32-NEXT:    xorl %edx, %edx<br>
> -; X32-NEXT:    divl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload<br>
> -; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload<br>
> -; X32-NEXT:    xorl %edx, %edx<br>
> -; X32-NEXT:    divl (%esp) # 4-byte Folded Reload<br>
> -; X32-NEXT:    movl %edi, %eax<br>
> -; X32-NEXT:    xorl %edx, %edx<br>
> -; X32-NEXT:    divl %esi<br>
> -; X32-NEXT:    movl %ebx, %eax<br>
> -; X32-NEXT:    xorl %edx, %edx<br>
> -; X32-NEXT:    divl %ebp<br>
> +; X32-NEXT:    movl %ecx, %eax<br>
> +; X32-NEXT:    divb %dl<br>
>  ; X32-NEXT:    .p2align 4, 0x90<br>
>  ; X32-NEXT:  .LBB0_2: # %CF237<br>
>  ; X32-NEXT:    # Parent Loop BB0_1 Depth=1<br>
>  ; X32-NEXT:    # => This Inner Loop Header: Depth=2<br>
> -; X32-NEXT:    testb %cl, %cl<br>
> +; X32-NEXT:    testb %bl, %bl<br>
>  ; X32-NEXT:    jne .LBB0_2<br>
>  ; X32-NEXT:    jmp .LBB0_1<br>
>  ;<br>
>  ; X64-LABEL: knownbits_zext_in_reg:<br>
>  ; X64:       # %bb.0: # %BB<br>
> -; X64-NEXT:    pushq %rbp<br>
> -; X64-NEXT:    pushq %rbx<br>
>  ; X64-NEXT:    movzbl (%rdi), %eax<br>
>  ; X64-NEXT:    imull $101, %eax, %ecx<br>
>  ; X64-NEXT:    shrl $14, %ecx<br>
> -; X64-NEXT:    imull $177, %eax, %eax<br>
> -; X64-NEXT:    shrl $14, %eax<br>
> +; X64-NEXT:    imull $177, %eax, %edx<br>
> +; X64-NEXT:    shrl $14, %edx<br>
>  ; X64-NEXT:    movzbl %cl, %ecx<br>
> -; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0<br>
> -; X64-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm1<br>
> -; X64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3.57331108E-43,3.57331108E-43,3.57331108E-43,3.57331108E-43]<br>
> -; X64-NEXT:    vpand %xmm2, %xmm1, %xmm1<br>
> -; X64-NEXT:    movzbl %al, %eax<br>
> -; X64-NEXT:    vpinsrd $1, %eax, %xmm0, %xmm0<br>
> -; X64-NEXT:    vpand %xmm2, %xmm0, %xmm0<br>
> -; X64-NEXT:    vpextrd $1, %xmm1, %r8d<br>
> -; X64-NEXT:    vpextrd $1, %xmm0, %r9d<br>
>  ; X64-NEXT:    xorl %esi, %esi<br>
> -; X64-NEXT:    vmovd %xmm1, %r10d<br>
> -; X64-NEXT:    vmovd %xmm0, %r11d<br>
> -; X64-NEXT:    vpextrd $2, %xmm1, %edi<br>
> -; X64-NEXT:    vpextrd $2, %xmm0, %ebx<br>
> -; X64-NEXT:    vpextrd $3, %xmm1, %ecx<br>
> -; X64-NEXT:    vpextrd $3, %xmm0, %ebp<br>
>  ; X64-NEXT:    .p2align 4, 0x90<br>
>  ; X64-NEXT:  .LBB0_1: # %CF<br>
>  ; X64-NEXT:    # =>This Loop Header: Depth=1<br>
>  ; X64-NEXT:    # Child Loop BB0_2 Depth 2<br>
> -; X64-NEXT:    movl %r8d, %eax<br>
> -; X64-NEXT:    xorl %edx, %edx<br>
> -; X64-NEXT:    divl %r9d<br>
> -; X64-NEXT:    movl %r10d, %eax<br>
> -; X64-NEXT:    xorl %edx, %edx<br>
> -; X64-NEXT:    divl %r11d<br>
> -; X64-NEXT:    movl %edi, %eax<br>
> -; X64-NEXT:    xorl %edx, %edx<br>
> -; X64-NEXT:    divl %ebx<br>
>  ; X64-NEXT:    movl %ecx, %eax<br>
> -; X64-NEXT:    xorl %edx, %edx<br>
> -; X64-NEXT:    divl %ebp<br>
> +; X64-NEXT:    divb %dl<br>
>  ; X64-NEXT:    .p2align 4, 0x90<br>
>  ; X64-NEXT:  .LBB0_2: # %CF237<br>
>  ; X64-NEXT:    # Parent Loop BB0_1 Depth=1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/load-partial.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/load-partial.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/load-partial.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/load-partial.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/load-partial.ll Wed Aug  7 09:24:26 2019<br>
> @@ -145,18 +145,8 @@ define i32 @load_partial_illegal_type()<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    movzwl {{.*}}(%rip), %eax<br>
>  ; SSE2-NEXT:    movd %eax, %xmm0<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm1<br>
> -; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,0,3]<br>
> -; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> -; SSE2-NEXT:    movl $2, %eax<br>
> -; SSE2-NEXT:    movd %eax, %xmm1<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]<br>
> -; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> -; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    por {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -164,7 +154,8 @@ define i32 @load_partial_illegal_type()<br>
>  ; SSSE3:       # %bb.0:<br>
>  ; SSSE3-NEXT:    movzwl {{.*}}(%rip), %eax<br>
>  ; SSSE3-NEXT:    movd %eax, %xmm0<br>
> -; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]<br>
> +; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[3,4,5,6,7,8,9,10,11,12,13,14,15]<br>
> +; SSSE3-NEXT:    por {{.*}}(%rip), %xmm0<br>
>  ; SSSE3-NEXT:    movd %xmm0, %eax<br>
>  ; SSSE3-NEXT:    retq<br>
>  ;<br>
> @@ -172,10 +163,8 @@ define i32 @load_partial_illegal_type()<br>
>  ; SSE41:       # %bb.0:<br>
>  ; SSE41-NEXT:    movzwl {{.*}}(%rip), %eax<br>
>  ; SSE41-NEXT:    movd %eax, %xmm0<br>
> -; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,1],zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]<br>
>  ; SSE41-NEXT:    movl $2, %eax<br>
> -; SSE41-NEXT:    pinsrd $2, %eax, %xmm0<br>
> -; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; SSE41-NEXT:    pinsrb $2, %eax, %xmm0<br>
>  ; SSE41-NEXT:    movd %xmm0, %eax<br>
>  ; SSE41-NEXT:    retq<br>
>  ;<br>
> @@ -183,10 +172,8 @@ define i32 @load_partial_illegal_type()<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    movzwl {{.*}}(%rip), %eax<br>
>  ; AVX-NEXT:    vmovd %eax, %xmm0<br>
> -; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,1],zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    movl $2, %eax<br>
> -; AVX-NEXT:    vpinsrd $2, %eax, %xmm0, %xmm0<br>
> -; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> +; AVX-NEXT:    vpinsrb $2, %eax, %xmm0, %xmm0<br>
>  ; AVX-NEXT:    vmovd %xmm0, %eax<br>
>  ; AVX-NEXT:    retq<br>
>    %1 = load <2 x i8>, <2 x i8>* bitcast (i8* @h to <2 x i8>*), align 1<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/lower-bitcast.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/lower-bitcast.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/lower-bitcast.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/lower-bitcast.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/lower-bitcast.ll Wed Aug  7 09:24:26 2019<br>
> @@ -9,9 +9,7 @@<br>
>  define double @test1(double %A) {<br>
>  ; CHECK-LABEL: test1:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
>  ; CHECK-NEXT:    paddd {{.*}}(%rip), %xmm0<br>
> -; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; CHECK-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-WIDE-LABEL: test1:<br>
> @@ -68,9 +66,7 @@ define i64 @test4(i64 %A) {<br>
>  ; CHECK-LABEL: test4:<br>
>  ; CHECK:       # %bb.0:<br>
>  ; CHECK-NEXT:    movq %rdi, %xmm0<br>
> -; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
>  ; CHECK-NEXT:    paddd {{.*}}(%rip), %xmm0<br>
> -; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; CHECK-NEXT:    movq %xmm0, %rax<br>
>  ; CHECK-NEXT:    retq<br>
>  ;<br>
> @@ -108,9 +104,7 @@ define double @test5(double %A) {<br>
>  define double @test6(double %A) {<br>
>  ; CHECK-LABEL: test6:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
>  ; CHECK-NEXT:    paddw {{.*}}(%rip), %xmm0<br>
> -; CHECK-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; CHECK-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-WIDE-LABEL: test6:<br>
> @@ -147,9 +141,7 @@ define double @test7(double %A, double %<br>
>  define double @test8(double %A) {<br>
>  ; CHECK-LABEL: test8:<br>
>  ; CHECK:       # %bb.0:<br>
> -; CHECK-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
>  ; CHECK-NEXT:    paddb {{.*}}(%rip), %xmm0<br>
> -; CHECK-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; CHECK-NEXT:    retq<br>
>  ;<br>
>  ; CHECK-WIDE-LABEL: test8:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/madd.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/madd.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/madd.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/madd.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/madd.ll Wed Aug  7 09:24:26 2019<br>
> @@ -1876,26 +1876,12 @@ define <4 x i32> @larger_mul(<16 x i16><br>
>  ;<br>
>  ; AVX1-LABEL: larger_mul:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
> -; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpackssdw %xmm0, %xmm2, %xmm0<br>
> -; AVX1-NEXT:    vpmovsxwd %xmm1, %xmm2<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]<br>
> -; AVX1-NEXT:    vpmovsxwd %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpackssdw %xmm1, %xmm2, %xmm1<br>
>  ; AVX1-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: larger_mul:<br>
>  ; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm0<br>
> -; AVX2-NEXT:    vpmovsxwd %xmm1, %ymm1<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2<br>
> -; AVX2-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2<br>
> -; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
> @@ -2597,29 +2583,29 @@ define <4 x i32> @pmaddwd_bad_indices(<8<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    movdqa (%rdi), %xmm0<br>
>  ; SSE2-NEXT:    movdqa (%rsi), %xmm1<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[2,1,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,6,5,6,7]<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[2,1,2,3,4,5,6,7]<br>
> -; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,6,5,6,7]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]<br>
> -; SSE2-NEXT:    movdqa %xmm3, %xmm4<br>
> -; SSE2-NEXT:    pmulhw %xmm2, %xmm4<br>
> -; SSE2-NEXT:    pmullw %xmm2, %xmm3<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]<br>
>  ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]<br>
>  ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,7]<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
>  ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,1,2,3,4,5,6,7]<br>
>  ; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pmulhw %xmm1, %xmm2<br>
> +; SSE2-NEXT:    movdqa %xmm2, %xmm4<br>
> +; SSE2-NEXT:    pmulhw %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pmullw %xmm3, %xmm2<br>
> +; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pmulhw %xmm1, %xmm3<br>
>  ; SSE2-NEXT:    pmullw %xmm1, %xmm0<br>
> -; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]<br>
> -; SSE2-NEXT:    paddd %xmm3, %xmm0<br>
> +; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
> +; SSE2-NEXT:    paddd %xmm2, %xmm0<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: pmaddwd_bad_indices:<br>
> @@ -2627,13 +2613,13 @@ define <4 x i32> @pmaddwd_bad_indices(<8<br>
>  ; AVX-NEXT:    vmovdqa (%rdi), %xmm0<br>
>  ; AVX-NEXT:    vmovdqa (%rsi), %xmm1<br>
>  ; AVX-NEXT:    vpshufb {{.*#+}} xmm2 = xmm0[2,3,4,5,10,11,12,13,12,13,10,11,12,13,14,15]<br>
> -; AVX-NEXT:    vpmovsxwd %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,8,9,14,15,8,9,14,15,12,13,14,15]<br>
>  ; AVX-NEXT:    vpshufb {{.*#+}} xmm3 = xmm1[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[2,3,6,7,10,11,14,15,14,15,10,11,12,13,14,15]<br>
> +; AVX-NEXT:    vpmovsxwd %xmm2, %xmm2<br>
>  ; AVX-NEXT:    vpmovsxwd %xmm3, %xmm3<br>
>  ; AVX-NEXT:    vpmulld %xmm3, %xmm2, %xmm2<br>
> -; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,8,9,14,15,8,9,14,15,12,13,14,15]<br>
>  ; AVX-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
> -; AVX-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[2,3,6,7,10,11,14,15,14,15,10,11,12,13,14,15]<br>
>  ; AVX-NEXT:    vpmovsxwd %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vpmulld %xmm1, %xmm0, %xmm0<br>
>  ; AVX-NEXT:    vpaddd %xmm0, %xmm2, %xmm0<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_compressstore.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_compressstore.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_compressstore.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_compressstore.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_compressstore.ll Wed Aug  7 09:24:26 2019<br>
> @@ -603,11 +603,9 @@ define void @compressstore_v16f64_v16i1(<br>
>  define void @compressstore_v2f32_v2i32(float* %base, <2 x float> %V, <2 x i32> %trigger) {<br>
>  ; SSE2-LABEL: compressstore_v2f32_v2i32:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB2_1<br>
> @@ -629,8 +627,8 @@ define void @compressstore_v2f32_v2i32(f<br>
>  ; SSE42-LABEL: compressstore_v2f32_v2i32:<br>
>  ; SSE42:       ## %bb.0:<br>
>  ; SSE42-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; SSE42-NEXT:    pcmpeqq %xmm2, %xmm1<br>
> +; SSE42-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE42-NEXT:    pmovsxdq %xmm2, %xmm1<br>
>  ; SSE42-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE42-NEXT:    testb $1, %al<br>
>  ; SSE42-NEXT:    jne LBB2_1<br>
> @@ -648,69 +646,54 @@ define void @compressstore_v2f32_v2i32(f<br>
>  ; SSE42-NEXT:    extractps $1, %xmm0, (%rdi)<br>
>  ; SSE42-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: compressstore_v2f32_v2i32:<br>
> -; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vmovmskpd %xmm1, %eax<br>
> -; AVX1-NEXT:    testb $1, %al<br>
> -; AVX1-NEXT:    jne LBB2_1<br>
> -; AVX1-NEXT:  ## %bb.2: ## %else<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    jne LBB2_3<br>
> -; AVX1-NEXT:  LBB2_4: ## %else2<br>
> -; AVX1-NEXT:    retq<br>
> -; AVX1-NEXT:  LBB2_1: ## %cond.store<br>
> -; AVX1-NEXT:    vmovss %xmm0, (%rdi)<br>
> -; AVX1-NEXT:    addq $4, %rdi<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    je LBB2_4<br>
> -; AVX1-NEXT:  LBB2_3: ## %cond.store1<br>
> -; AVX1-NEXT:    vextractps $1, %xmm0, (%rdi)<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: compressstore_v2f32_v2i32:<br>
> -; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vmovmskpd %xmm1, %eax<br>
> -; AVX2-NEXT:    testb $1, %al<br>
> -; AVX2-NEXT:    jne LBB2_1<br>
> -; AVX2-NEXT:  ## %bb.2: ## %else<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    jne LBB2_3<br>
> -; AVX2-NEXT:  LBB2_4: ## %else2<br>
> -; AVX2-NEXT:    retq<br>
> -; AVX2-NEXT:  LBB2_1: ## %cond.store<br>
> -; AVX2-NEXT:    vmovss %xmm0, (%rdi)<br>
> -; AVX2-NEXT:    addq $4, %rdi<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    je LBB2_4<br>
> -; AVX2-NEXT:  LBB2_3: ## %cond.store1<br>
> -; AVX2-NEXT:    vextractps $1, %xmm0, (%rdi)<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX1OR2-LABEL: compressstore_v2f32_v2i32:<br>
> +; AVX1OR2:       ## %bb.0:<br>
> +; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX1OR2-NEXT:    vpmovsxdq %xmm1, %xmm1<br>
> +; AVX1OR2-NEXT:    vmovmskpd %xmm1, %eax<br>
> +; AVX1OR2-NEXT:    testb $1, %al<br>
> +; AVX1OR2-NEXT:    jne LBB2_1<br>
> +; AVX1OR2-NEXT:  ## %bb.2: ## %else<br>
> +; AVX1OR2-NEXT:    testb $2, %al<br>
> +; AVX1OR2-NEXT:    jne LBB2_3<br>
> +; AVX1OR2-NEXT:  LBB2_4: ## %else2<br>
> +; AVX1OR2-NEXT:    retq<br>
> +; AVX1OR2-NEXT:  LBB2_1: ## %cond.store<br>
> +; AVX1OR2-NEXT:    vmovss %xmm0, (%rdi)<br>
> +; AVX1OR2-NEXT:    addq $4, %rdi<br>
> +; AVX1OR2-NEXT:    testb $2, %al<br>
> +; AVX1OR2-NEXT:    je LBB2_4<br>
> +; AVX1OR2-NEXT:  LBB2_3: ## %cond.store1<br>
> +; AVX1OR2-NEXT:    vextractps $1, %xmm0, (%rdi)<br>
> +; AVX1OR2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: compressstore_v2f32_v2i32:<br>
>  ; AVX512F:       ## %bb.0:<br>
> +; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vcompressps %zmm0, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: compressstore_v2f32_v2i32:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm1, %xmm1, %k1<br>
> -; AVX512VL-NEXT:    vcompressps %xmm0, (%rdi) {%k1}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: compressstore_v2f32_v2i32:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm1, %xmm1, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vcompressps %xmm0, (%rdi) {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: compressstore_v2f32_v2i32:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm1, %xmm1, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vcompressps %xmm0, (%rdi) {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    call void @llvm.masked.compressstore.v2f32(<2 x float> %V, float* %base, <2 x i1> %mask)<br>
>    ret void<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_expandload.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_expandload.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_expandload.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_expandload.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_expandload.ll Wed Aug  7 09:24:26 2019<br>
> @@ -1117,11 +1117,9 @@ define <16 x double> @expandload_v16f64_<br>
>  define <2 x float> @expandload_v2f32_v2i1(float* %base, <2 x float> %src0, <2 x i32> %trigger) {<br>
>  ; SSE2-LABEL: expandload_v2f32_v2i1:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB4_1<br>
> @@ -1146,8 +1144,8 @@ define <2 x float> @expandload_v2f32_v2i<br>
>  ; SSE42-LABEL: expandload_v2f32_v2i1:<br>
>  ; SSE42:       ## %bb.0:<br>
>  ; SSE42-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; SSE42-NEXT:    pcmpeqq %xmm2, %xmm1<br>
> +; SSE42-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE42-NEXT:    pmovsxdq %xmm2, %xmm1<br>
>  ; SSE42-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE42-NEXT:    testb $1, %al<br>
>  ; SSE42-NEXT:    jne LBB4_1<br>
> @@ -1166,58 +1164,34 @@ define <2 x float> @expandload_v2f32_v2i<br>
>  ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]<br>
>  ; SSE42-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: expandload_v2f32_v2i1:<br>
> -; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vmovmskpd %xmm1, %eax<br>
> -; AVX1-NEXT:    testb $1, %al<br>
> -; AVX1-NEXT:    jne LBB4_1<br>
> -; AVX1-NEXT:  ## %bb.2: ## %else<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    jne LBB4_3<br>
> -; AVX1-NEXT:  LBB4_4: ## %else2<br>
> -; AVX1-NEXT:    retq<br>
> -; AVX1-NEXT:  LBB4_1: ## %cond.load<br>
> -; AVX1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
> -; AVX1-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]<br>
> -; AVX1-NEXT:    addq $4, %rdi<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    je LBB4_4<br>
> -; AVX1-NEXT:  LBB4_3: ## %cond.load1<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: expandload_v2f32_v2i1:<br>
> -; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vmovmskpd %xmm1, %eax<br>
> -; AVX2-NEXT:    testb $1, %al<br>
> -; AVX2-NEXT:    jne LBB4_1<br>
> -; AVX2-NEXT:  ## %bb.2: ## %else<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    jne LBB4_3<br>
> -; AVX2-NEXT:  LBB4_4: ## %else2<br>
> -; AVX2-NEXT:    retq<br>
> -; AVX2-NEXT:  LBB4_1: ## %cond.load<br>
> -; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
> -; AVX2-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]<br>
> -; AVX2-NEXT:    addq $4, %rdi<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    je LBB4_4<br>
> -; AVX2-NEXT:  LBB4_3: ## %cond.load1<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX1OR2-LABEL: expandload_v2f32_v2i1:<br>
> +; AVX1OR2:       ## %bb.0:<br>
> +; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX1OR2-NEXT:    vpmovsxdq %xmm1, %xmm1<br>
> +; AVX1OR2-NEXT:    vmovmskpd %xmm1, %eax<br>
> +; AVX1OR2-NEXT:    testb $1, %al<br>
> +; AVX1OR2-NEXT:    jne LBB4_1<br>
> +; AVX1OR2-NEXT:  ## %bb.2: ## %else<br>
> +; AVX1OR2-NEXT:    testb $2, %al<br>
> +; AVX1OR2-NEXT:    jne LBB4_3<br>
> +; AVX1OR2-NEXT:  LBB4_4: ## %else2<br>
> +; AVX1OR2-NEXT:    retq<br>
> +; AVX1OR2-NEXT:  LBB4_1: ## %cond.load<br>
> +; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero<br>
> +; AVX1OR2-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]<br>
> +; AVX1OR2-NEXT:    addq $4, %rdi<br>
> +; AVX1OR2-NEXT:    testb $2, %al<br>
> +; AVX1OR2-NEXT:    je LBB4_4<br>
> +; AVX1OR2-NEXT:  LBB4_3: ## %cond.load1<br>
> +; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]<br>
> +; AVX1OR2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: expandload_v2f32_v2i1:<br>
>  ; AVX512F:       ## %bb.0:<br>
> +; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vexpandps (%rdi), %zmm0 {%k1}<br>
> @@ -1225,13 +1199,21 @@ define <2 x float> @expandload_v2f32_v2i<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: expandload_v2f32_v2i1:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm1, %xmm1, %k1<br>
> -; AVX512VL-NEXT:    vexpandps (%rdi), %xmm0 {%k1}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: expandload_v2f32_v2i1:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm1, %xmm1, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vexpandps (%rdi), %xmm0 {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: expandload_v2f32_v2i1:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm1, %xmm1, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vexpandps (%rdi), %xmm0 {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    %res = call <2 x float> @llvm.masked.expandload.v2f32(float* %base, <2 x i1> %mask, <2 x float> %src0)<br>
>    ret <2 x float> %res<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_gather_scatter.ll Wed Aug  7 09:24:26 2019<br>
> @@ -915,13 +915,12 @@ define <2 x double> @test17(double* %bas<br>
>  ; KNL_64-LABEL: test17:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_64-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_64-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_64-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_64-NEXT:    vgatherqpd (%rdi,%zmm0,8), %zmm2 {%k1}<br>
> +; KNL_64-NEXT:    vgatherdpd (%rdi,%ymm0,8), %zmm2 {%k1}<br>
>  ; KNL_64-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
> @@ -929,36 +928,31 @@ define <2 x double> @test17(double* %bas<br>
>  ; KNL_32-LABEL: test17:<br>
>  ; KNL_32:       # %bb.0:<br>
>  ; KNL_32-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_32-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_32-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vgatherqpd (%eax,%zmm0,8), %zmm2 {%k1}<br>
> +; KNL_32-NEXT:    vgatherdpd (%eax,%ymm0,8), %zmm2 {%k1}<br>
>  ; KNL_32-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
>  ; SKX-LABEL: test17:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; SKX-NEXT:    vgatherqpd (%rdi,%xmm0,8), %xmm2 {%k1}<br>
> +; SKX-NEXT:    vgatherdpd (%rdi,%xmm0,8), %xmm2 {%k1}<br>
>  ; SKX-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test17:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX_32-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; SKX_32-NEXT:    vgatherqpd (%eax,%xmm0,8), %xmm2 {%k1}<br>
> +; SKX_32-NEXT:    vgatherdpd (%eax,%xmm0,8), %xmm2 {%k1}<br>
>  ; SKX_32-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
><br>
> @@ -1080,8 +1074,8 @@ define void @test20(<2 x float>%a1, <2 x<br>
>  ;<br>
>  ; KNL_32-LABEL: test20:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; KNL_32-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; KNL_32-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
> @@ -1099,7 +1093,6 @@ define void @test20(<2 x float>%a1, <2 x<br>
>  ;<br>
>  ; SKX_32-LABEL: test20:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm2, %k1<br>
>  ; SKX_32-NEXT:    vscatterdps %xmm0, (,%xmm1) {%k1}<br>
> @@ -1113,9 +1106,9 @@ define void @test21(<2 x i32>%a1, <2 x i<br>
>  ; KNL_64-LABEL: test21:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; KNL_64-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; KNL_64-NEXT:    vpscatterqd %ymm0, (,%zmm1) {%k1}<br>
> @@ -1124,10 +1117,10 @@ define void @test21(<2 x i32>%a1, <2 x i<br>
>  ;<br>
>  ; KNL_32-LABEL: test21:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; KNL_32-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; KNL_32-NEXT:    vpscatterdd %zmm0, (,%zmm1) {%k1}<br>
> @@ -1138,7 +1131,6 @@ define void @test21(<2 x i32>%a1, <2 x i<br>
>  ; SKX:       # %bb.0:<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; SKX-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX-NEXT:    vpscatterqd %xmm0, (,%xmm1) {%k1}<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
> @@ -1146,8 +1138,6 @@ define void @test21(<2 x i32>%a1, <2 x i<br>
>  ; SKX_32:       # %bb.0:<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; SKX_32-NEXT:    vpscatterdd %xmm0, (,%xmm1) {%k1}<br>
>  ; SKX_32-NEXT:    retl<br>
>    call void @llvm.masked.scatter.v2i32.v2p0i32(<2 x i32> %a1, <2 x i32*> %ptr, i32 4, <2 x i1> %mask)<br>
> @@ -1161,7 +1151,7 @@ define <2 x float> @test22(float* %base,<br>
>  ; KNL_64-LABEL: test22:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_64-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_64-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
> @@ -1174,7 +1164,7 @@ define <2 x float> @test22(float* %base,<br>
>  ; KNL_32-LABEL: test22:<br>
>  ; KNL_32:       # %bb.0:<br>
>  ; KNL_32-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_32-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_32-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
> @@ -1187,7 +1177,6 @@ define <2 x float> @test22(float* %base,<br>
>  ;<br>
>  ; SKX-LABEL: test22:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX-NEXT:    vgatherdps (%rdi,%xmm0,4), %xmm2 {%k1}<br>
> @@ -1196,7 +1185,6 @@ define <2 x float> @test22(float* %base,<br>
>  ;<br>
>  ; SKX_32-LABEL: test22:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> @@ -1264,28 +1252,28 @@ declare <2 x i64> @llvm.masked.gather.v2<br>
>  define <2 x i32> @test23(i32* %base, <2 x i32> %ind, <2 x i1> %mask, <2 x i32> %src0) {<br>
>  ; KNL_64-LABEL: test23:<br>
>  ; KNL_64:       # %bb.0:<br>
> +; KNL_64-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_64-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_64-NEXT:    vpgatherdd (%rdi,%zmm0,4), %zmm1 {%k1}<br>
> -; KNL_64-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_64-NEXT:    vpgatherdd (%rdi,%zmm0,4), %zmm2 {%k1}<br>
> +; KNL_64-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
>  ;<br>
>  ; KNL_32-LABEL: test23:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_32-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_32-NEXT:    vpgatherdd (%eax,%zmm0,4), %zmm1 {%k1}<br>
> -; KNL_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; KNL_32-NEXT:    vpgatherdd (%eax,%zmm0,4), %zmm2 {%k1}<br>
> +; KNL_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
> @@ -1293,10 +1281,8 @@ define <2 x i32> @test23(i32* %base, <2<br>
>  ; SKX:       # %bb.0:<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; SKX-NEXT:    vpgatherdd (%rdi,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX-NEXT:    vpgatherdd (%rdi,%xmm0,4), %xmm2 {%k1}<br>
> +; SKX-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test23:<br>
> @@ -1304,10 +1290,8 @@ define <2 x i32> @test23(i32* %base, <2<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; SKX_32-NEXT:    vpgatherdd (%eax,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX_32-NEXT:    vpgatherdd (%eax,%xmm0,4), %xmm2 {%k1}<br>
> +; SKX_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %sext_ind = sext <2 x i32> %ind to <2 x i64><br>
>    %gep.random = getelementptr i32, i32* %base, <2 x i64> %sext_ind<br>
> @@ -1318,28 +1302,28 @@ define <2 x i32> @test23(i32* %base, <2<br>
>  define <2 x i32> @test23b(i32* %base, <2 x i64> %ind, <2 x i1> %mask, <2 x i32> %src0) {<br>
>  ; KNL_64-LABEL: test23b:<br>
>  ; KNL_64:       # %bb.0:<br>
> +; KNL_64-NEXT:    # kill: def $xmm2 killed $xmm2 def $ymm2<br>
>  ; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_64-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_64-NEXT:    vpgatherqd (%rdi,%zmm0,4), %ymm1 {%k1}<br>
> -; KNL_64-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_64-NEXT:    vpgatherqd (%rdi,%zmm0,4), %ymm2 {%k1}<br>
> +; KNL_64-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
>  ;<br>
>  ; KNL_32-LABEL: test23b:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm2 killed $xmm2 def $ymm2<br>
>  ; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_32-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_32-NEXT:    vpgatherqd (%eax,%zmm0,4), %ymm1 {%k1}<br>
> -; KNL_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; KNL_32-NEXT:    vpgatherqd (%eax,%zmm0,4), %ymm2 {%k1}<br>
> +; KNL_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
> @@ -1347,9 +1331,8 @@ define <2 x i32> @test23b(i32* %base, <2<br>
>  ; SKX:       # %bb.0:<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; SKX-NEXT:    vpgatherqd (%rdi,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX-NEXT:    vpgatherqd (%rdi,%xmm0,4), %xmm2 {%k1}<br>
> +; SKX-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test23b:<br>
> @@ -1357,9 +1340,8 @@ define <2 x i32> @test23b(i32* %base, <2<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; SKX_32-NEXT:    vpgatherqd (%eax,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX_32-NEXT:    vpgatherqd (%eax,%xmm0,4), %xmm2 {%k1}<br>
> +; SKX_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %gep.random = getelementptr i32, i32* %base, <2 x i64> %ind<br>
>    %res = call <2 x i32> @llvm.masked.gather.v2i32.v2p0i32(<2 x i32*> %gep.random, i32 4, <2 x i1> %mask, <2 x i32> %src0)<br>
> @@ -1369,22 +1351,22 @@ define <2 x i32> @test23b(i32* %base, <2<br>
>  define <2 x i32> @test24(i32* %base, <2 x i32> %ind) {<br>
>  ; KNL_64-LABEL: test24:<br>
>  ; KNL_64:       # %bb.0:<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_64-NEXT:    movw $3, %ax<br>
>  ; KNL_64-NEXT:    kmovw %eax, %k1<br>
>  ; KNL_64-NEXT:    vpgatherdd (%rdi,%zmm0,4), %zmm1 {%k1}<br>
> -; KNL_64-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_64-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
>  ;<br>
>  ; KNL_32-LABEL: test24:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; KNL_32-NEXT:    movw $3, %cx<br>
>  ; KNL_32-NEXT:    kmovw %ecx, %k1<br>
>  ; KNL_32-NEXT:    vpgatherdd (%eax,%zmm0,4), %zmm1 {%k1}<br>
> -; KNL_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; KNL_32-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
> @@ -1392,9 +1374,8 @@ define <2 x i32> @test24(i32* %base, <2<br>
>  ; SKX:       # %bb.0:<br>
>  ; SKX-NEXT:    movb $3, %al<br>
>  ; SKX-NEXT:    kmovw %eax, %k1<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX-NEXT:    vpgatherdd (%rdi,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test24:<br>
> @@ -1402,9 +1383,8 @@ define <2 x i32> @test24(i32* %base, <2<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; SKX_32-NEXT:    movb $3, %cl<br>
>  ; SKX_32-NEXT:    kmovw %ecx, %k1<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX_32-NEXT:    vpgatherdd (%eax,%xmm0,4), %xmm1 {%k1}<br>
> -; SKX_32-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; SKX_32-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %sext_ind = sext <2 x i32> %ind to <2 x i64><br>
>    %gep.random = getelementptr i32, i32* %base, <2 x i64> %sext_ind<br>
> @@ -1416,13 +1396,12 @@ define <2 x i64> @test25(i64* %base, <2<br>
>  ; KNL_64-LABEL: test25:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_64-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_64-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_64-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_64-NEXT:    vpgatherqq (%rdi,%zmm0,8), %zmm2 {%k1}<br>
> +; KNL_64-NEXT:    vpgatherdq (%rdi,%ymm0,8), %zmm2 {%k1}<br>
>  ; KNL_64-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
> @@ -1430,36 +1409,31 @@ define <2 x i64> @test25(i64* %base, <2<br>
>  ; KNL_32-LABEL: test25:<br>
>  ; KNL_32:       # %bb.0:<br>
>  ; KNL_32-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; KNL_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_32-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; KNL_32-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vpgatherqq (%eax,%zmm0,8), %zmm2 {%k1}<br>
> +; KNL_32-NEXT:    vpgatherdq (%eax,%ymm0,8), %zmm2 {%k1}<br>
>  ; KNL_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
>  ; SKX-LABEL: test25:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; SKX-NEXT:    vpgatherqq (%rdi,%xmm0,8), %xmm2 {%k1}<br>
> +; SKX-NEXT:    vpgatherdq (%rdi,%xmm0,8), %xmm2 {%k1}<br>
>  ; SKX-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test25:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX_32-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm1, %k1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; SKX_32-NEXT:    vpgatherqq (%eax,%xmm0,8), %xmm2 {%k1}<br>
> +; SKX_32-NEXT:    vpgatherdq (%eax,%xmm0,8), %xmm2 {%k1}<br>
>  ; SKX_32-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %sext_ind = sext <2 x i32> %ind to <2 x i64><br>
> @@ -1472,11 +1446,10 @@ define <2 x i64> @test26(i64* %base, <2<br>
>  ; KNL_64-LABEL: test26:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> -; KNL_64-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_64-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_64-NEXT:    movb $3, %al<br>
>  ; KNL_64-NEXT:    kmovw %eax, %k1<br>
> -; KNL_64-NEXT:    vpgatherqq (%rdi,%zmm0,8), %zmm1 {%k1}<br>
> +; KNL_64-NEXT:    vpgatherdq (%rdi,%ymm0,8), %zmm1 {%k1}<br>
>  ; KNL_64-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
> @@ -1484,32 +1457,27 @@ define <2 x i64> @test26(i64* %base, <2<br>
>  ; KNL_32-LABEL: test26:<br>
>  ; KNL_32:       # %bb.0:<br>
>  ; KNL_32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> -; KNL_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; KNL_32-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; KNL_32-NEXT:    movb $3, %cl<br>
>  ; KNL_32-NEXT:    kmovw %ecx, %k1<br>
> -; KNL_32-NEXT:    vpgatherqq (%eax,%zmm0,8), %zmm1 {%k1}<br>
> +; KNL_32-NEXT:    vpgatherdq (%eax,%ymm0,8), %zmm1 {%k1}<br>
>  ; KNL_32-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
>  ; SKX-LABEL: test26:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX-NEXT:    kxnorw %k0, %k0, %k1<br>
> -; SKX-NEXT:    vpgatherqq (%rdi,%xmm0,8), %xmm1 {%k1}<br>
> +; SKX-NEXT:    vpgatherdq (%rdi,%xmm0,8), %xmm1 {%k1}<br>
>  ; SKX-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test26:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; SKX_32-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; SKX_32-NEXT:    kxnorw %k0, %k0, %k1<br>
> -; SKX_32-NEXT:    vpgatherqq (%eax,%xmm0,8), %xmm1 {%k1}<br>
> +; SKX_32-NEXT:    vpgatherdq (%eax,%xmm0,8), %xmm1 {%k1}<br>
>  ; SKX_32-NEXT:    vmovdqa %xmm1, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %sext_ind = sext <2 x i32> %ind to <2 x i64><br>
> @@ -1522,40 +1490,40 @@ define <2 x i64> @test26(i64* %base, <2<br>
>  define <2 x float> @test27(float* %base, <2 x i32> %ind) {<br>
>  ; KNL_64-LABEL: test27:<br>
>  ; KNL_64:       # %bb.0:<br>
> -; KNL_64-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_64-NEXT:    movw $3, %ax<br>
>  ; KNL_64-NEXT:    kmovw %eax, %k1<br>
> -; KNL_64-NEXT:    vgatherdps (%rdi,%zmm1,4), %zmm0 {%k1}<br>
> -; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; KNL_64-NEXT:    vgatherdps (%rdi,%zmm0,4), %zmm1 {%k1}<br>
> +; KNL_64-NEXT:    vmovaps %xmm1, %xmm0<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
>  ;<br>
>  ; KNL_32-LABEL: test27:<br>
>  ; KNL_32:       # %bb.0:<br>
> -; KNL_32-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; KNL_32-NEXT:    movw $3, %cx<br>
>  ; KNL_32-NEXT:    kmovw %ecx, %k1<br>
> -; KNL_32-NEXT:    vgatherdps (%eax,%zmm1,4), %zmm0 {%k1}<br>
> -; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0<br>
> +; KNL_32-NEXT:    vgatherdps (%eax,%zmm0,4), %zmm1 {%k1}<br>
> +; KNL_32-NEXT:    vmovaps %xmm1, %xmm0<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
>  ; SKX-LABEL: test27:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
>  ; SKX-NEXT:    movb $3, %al<br>
>  ; SKX-NEXT:    kmovw %eax, %k1<br>
> -; SKX-NEXT:    vgatherdps (%rdi,%xmm1,4), %xmm0 {%k1}<br>
> +; SKX-NEXT:    vgatherdps (%rdi,%xmm0,4), %xmm1 {%k1}<br>
> +; SKX-NEXT:    vmovaps %xmm1, %xmm0<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test27:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
>  ; SKX_32-NEXT:    movb $3, %cl<br>
>  ; SKX_32-NEXT:    kmovw %ecx, %k1<br>
> -; SKX_32-NEXT:    vgatherdps (%eax,%xmm1,4), %xmm0 {%k1}<br>
> +; SKX_32-NEXT:    vgatherdps (%eax,%xmm0,4), %xmm1 {%k1}<br>
> +; SKX_32-NEXT:    vmovaps %xmm1, %xmm0<br>
>  ; SKX_32-NEXT:    retl<br>
>    %sext_ind = sext <2 x i32> %ind to <2 x i64><br>
>    %gep.random = getelementptr float, float* %base, <2 x i64> %sext_ind<br>
> @@ -1568,7 +1536,7 @@ define void @test28(<2 x i32>%a1, <2 x i<br>
>  ; KNL_64-LABEL: test28:<br>
>  ; KNL_64:       # %bb.0:<br>
>  ; KNL_64-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> -; KNL_64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; KNL_64-NEXT:    movb $3, %al<br>
>  ; KNL_64-NEXT:    kmovw %eax, %k1<br>
>  ; KNL_64-NEXT:    vpscatterqd %ymm0, (,%zmm1) {%k1}<br>
> @@ -1577,8 +1545,8 @@ define void @test28(<2 x i32>%a1, <2 x i<br>
>  ;<br>
>  ; KNL_32-LABEL: test28:<br>
>  ; KNL_32:       # %bb.0:<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; KNL_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; KNL_32-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; KNL_32-NEXT:    movw $3, %ax<br>
>  ; KNL_32-NEXT:    kmovw %eax, %k1<br>
>  ; KNL_32-NEXT:    vpscatterdd %zmm0, (,%zmm1) {%k1}<br>
> @@ -1587,7 +1555,6 @@ define void @test28(<2 x i32>%a1, <2 x i<br>
>  ;<br>
>  ; SKX-LABEL: test28:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SKX-NEXT:    kxnorw %k0, %k0, %k1<br>
>  ; SKX-NEXT:    vpscatterqd %xmm0, (,%xmm1) {%k1}<br>
>  ; SKX-NEXT:    retq<br>
> @@ -1596,8 +1563,6 @@ define void @test28(<2 x i32>%a1, <2 x i<br>
>  ; SKX_32:       # %bb.0:<br>
>  ; SKX_32-NEXT:    movb $3, %al<br>
>  ; SKX_32-NEXT:    kmovw %eax, %k1<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; SKX_32-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; SKX_32-NEXT:    vpscatterdd %xmm0, (,%xmm1) {%k1}<br>
>  ; SKX_32-NEXT:    retl<br>
>    call void @llvm.masked.scatter.v2i32.v2p0i32(<2 x i32> %a1, <2 x i32*> %ptr, i32 4, <2 x i1> <i1 true, i1 true>)<br>
> @@ -2673,9 +2638,7 @@ define <16 x float> @sext_i8_index(float<br>
>  define <8 x float> @sext_v8i8_index(float* %base, <8 x i8> %ind) {<br>
>  ; KNL_64-LABEL: sext_v8i8_index:<br>
>  ; KNL_64:       # %bb.0:<br>
> -; KNL_64-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> -; KNL_64-NEXT:    vpslld $24, %ymm0, %ymm0<br>
> -; KNL_64-NEXT:    vpsrad $24, %ymm0, %ymm1<br>
> +; KNL_64-NEXT:    vpmovsxbd %xmm0, %ymm1<br>
>  ; KNL_64-NEXT:    movw $255, %ax<br>
>  ; KNL_64-NEXT:    kmovw %eax, %k1<br>
>  ; KNL_64-NEXT:    vgatherdps (%rdi,%zmm1,4), %zmm0 {%k1}<br>
> @@ -2684,10 +2647,8 @@ define <8 x float> @sext_v8i8_index(floa<br>
>  ;<br>
>  ; KNL_32-LABEL: sext_v8i8_index:<br>
>  ; KNL_32:       # %bb.0:<br>
> -; KNL_32-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vpslld $24, %ymm0, %ymm0<br>
> -; KNL_32-NEXT:    vpsrad $24, %ymm0, %ymm1<br>
> +; KNL_32-NEXT:    vpmovsxbd %xmm0, %ymm1<br>
>  ; KNL_32-NEXT:    movw $255, %cx<br>
>  ; KNL_32-NEXT:    kmovw %ecx, %k1<br>
>  ; KNL_32-NEXT:    vgatherdps (%eax,%zmm1,4), %zmm0 {%k1}<br>
> @@ -2696,20 +2657,16 @@ define <8 x float> @sext_v8i8_index(floa<br>
>  ;<br>
>  ; SKX-LABEL: sext_v8i8_index:<br>
>  ; SKX:       # %bb.0:<br>
> -; SKX-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
> +; SKX-NEXT:    vpmovsxbd %xmm0, %ymm1<br>
>  ; SKX-NEXT:    kxnorw %k0, %k0, %k1<br>
> -; SKX-NEXT:    vpslld $24, %ymm0, %ymm0<br>
> -; SKX-NEXT:    vpsrad $24, %ymm0, %ymm1<br>
>  ; SKX-NEXT:    vgatherdps (%rdi,%ymm1,4), %ymm0 {%k1}<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: sext_v8i8_index:<br>
>  ; SKX_32:       # %bb.0:<br>
> -; SKX_32-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> +; SKX_32-NEXT:    vpmovsxbd %xmm0, %ymm1<br>
>  ; SKX_32-NEXT:    kxnorw %k0, %k0, %k1<br>
> -; SKX_32-NEXT:    vpslld $24, %ymm0, %ymm0<br>
> -; SKX_32-NEXT:    vpsrad $24, %ymm0, %ymm1<br>
>  ; SKX_32-NEXT:    vgatherdps (%eax,%ymm1,4), %ymm0 {%k1}<br>
>  ; SKX_32-NEXT:    retl<br>
><br>
> @@ -2725,28 +2682,26 @@ declare <8 x float> @llvm.masked.gather.<br>
>  define void @test_scatter_2i32_index(<2 x double> %a1, double* %base, <2 x i32> %ind, <2 x i1> %mask) {<br>
>  ; KNL_64-LABEL: test_scatter_2i32_index:<br>
>  ; KNL_64:       # %bb.0:<br>
> +; KNL_64-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1<br>
>  ; KNL_64-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; KNL_64-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; KNL_64-NEXT:    vpsraq $32, %zmm1, %zmm1<br>
>  ; KNL_64-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; KNL_64-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
>  ; KNL_64-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_64-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; KNL_64-NEXT:    vscatterqpd %zmm0, (%rdi,%zmm1,8) {%k1}<br>
> +; KNL_64-NEXT:    vscatterdpd %zmm0, (%rdi,%ymm1,8) {%k1}<br>
>  ; KNL_64-NEXT:    vzeroupper<br>
>  ; KNL_64-NEXT:    retq<br>
>  ;<br>
>  ; KNL_32-LABEL: test_scatter_2i32_index:<br>
>  ; KNL_32:       # %bb.0:<br>
> +; KNL_32-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1<br>
>  ; KNL_32-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; KNL_32-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; KNL_32-NEXT:    vpsraq $32, %zmm1, %zmm1<br>
>  ; KNL_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; KNL_32-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
>  ; KNL_32-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; KNL_32-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; KNL_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; KNL_32-NEXT:    vscatterqpd %zmm0, (%eax,%zmm1,8) {%k1}<br>
> +; KNL_32-NEXT:    vscatterdpd %zmm0, (%eax,%ymm1,8) {%k1}<br>
>  ; KNL_32-NEXT:    vzeroupper<br>
>  ; KNL_32-NEXT:    retl<br>
>  ;<br>
> @@ -2754,19 +2709,15 @@ define void @test_scatter_2i32_index(<2<br>
>  ; SKX:       # %bb.0:<br>
>  ; SKX-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; SKX-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; SKX-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; SKX-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; SKX-NEXT:    vscatterqpd %xmm0, (%rdi,%xmm1,8) {%k1}<br>
> +; SKX-NEXT:    vscatterdpd %xmm0, (%rdi,%xmm1,8) {%k1}<br>
>  ; SKX-NEXT:    retq<br>
>  ;<br>
>  ; SKX_32-LABEL: test_scatter_2i32_index:<br>
>  ; SKX_32:       # %bb.0:<br>
>  ; SKX_32-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; SKX_32-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; SKX_32-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; SKX_32-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
>  ; SKX_32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; SKX_32-NEXT:    vscatterqpd %xmm0, (%eax,%xmm1,8) {%k1}<br>
> +; SKX_32-NEXT:    vscatterdpd %xmm0, (%eax,%xmm1,8) {%k1}<br>
>  ; SKX_32-NEXT:    retl<br>
>    %gep = getelementptr double, double *%base, <2 x i32> %ind<br>
>    call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %a1, <2 x double*> %gep, i32 4, <2 x i1> %mask)<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_gather_scatter_widen.ll Wed Aug  7 09:24:26 2019<br>
> @@ -30,24 +30,21 @@ define <2 x double> @test_gather_v2i32_i<br>
>  ;<br>
>  ; PROMOTE_SKX-LABEL: test_gather_v2i32_index:<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
> -; PROMOTE_SKX-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; PROMOTE_SKX-NEXT:    vpsraq $32, %xmm0, %xmm0<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; PROMOTE_SKX-NEXT:    vgatherqpd (%rdi,%xmm0,8), %xmm2 {%k1}<br>
> +; PROMOTE_SKX-NEXT:    vgatherdpd (%rdi,%xmm0,8), %xmm2 {%k1}<br>
>  ; PROMOTE_SKX-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_gather_v2i32_index:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
>  ; PROMOTE_KNL-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> -; PROMOTE_KNL-NEXT:    vpsllq $32, %xmm0, %xmm0<br>
> -; PROMOTE_KNL-NEXT:    vpsraq $32, %zmm0, %zmm0<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; PROMOTE_KNL-NEXT:    vgatherqpd (%rdi,%zmm0,8), %zmm2 {%k1}<br>
> +; PROMOTE_KNL-NEXT:    vgatherdpd (%rdi,%ymm0,8), %zmm2 {%k1}<br>
>  ; PROMOTE_KNL-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; PROMOTE_KNL-NEXT:    vzeroupper<br>
>  ; PROMOTE_KNL-NEXT:    retq<br>
> @@ -61,11 +58,8 @@ define <2 x double> @test_gather_v2i32_i<br>
>  ;<br>
>  ; PROMOTE_AVX2-LABEL: test_gather_v2i32_index:<br>
>  ; PROMOTE_AVX2:       # %bb.0:<br>
> -; PROMOTE_AVX2-NEXT:    vpsllq $32, %xmm0, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3]<br>
>  ; PROMOTE_AVX2-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
> -; PROMOTE_AVX2-NEXT:    vgatherqpd %xmm1, (%rdi,%xmm0,8), %xmm2<br>
> +; PROMOTE_AVX2-NEXT:    vgatherdpd %xmm1, (%rdi,%xmm0,8), %xmm2<br>
>  ; PROMOTE_AVX2-NEXT:    vmovapd %xmm2, %xmm0<br>
>  ; PROMOTE_AVX2-NEXT:    retq<br>
>    %gep.random = getelementptr double, double* %base, <2 x i32> %ind<br>
> @@ -97,21 +91,18 @@ define void @test_scatter_v2i32_index(<2<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; PROMOTE_SKX-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; PROMOTE_SKX-NEXT:    vpsraq $32, %xmm1, %xmm1<br>
> -; PROMOTE_SKX-NEXT:    vscatterqpd %xmm0, (%rdi,%xmm1,8) {%k1}<br>
> +; PROMOTE_SKX-NEXT:    vscatterdpd %xmm0, (%rdi,%xmm1,8) {%k1}<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_scatter_v2i32_index:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1<br>
>  ; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
> -; PROMOTE_KNL-NEXT:    vpsllq $32, %xmm1, %xmm1<br>
> -; PROMOTE_KNL-NEXT:    vpsraq $32, %zmm1, %zmm1<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; PROMOTE_KNL-NEXT:    vscatterqpd %zmm0, (%rdi,%zmm1,8) {%k1}<br>
> +; PROMOTE_KNL-NEXT:    vscatterdpd %zmm0, (%rdi,%ymm1,8) {%k1}<br>
>  ; PROMOTE_KNL-NEXT:    vzeroupper<br>
>  ; PROMOTE_KNL-NEXT:    retq<br>
>  ;<br>
> @@ -143,9 +134,7 @@ define void @test_scatter_v2i32_index(<2<br>
>  ;<br>
>  ; PROMOTE_AVX2-LABEL: test_scatter_v2i32_index:<br>
>  ; PROMOTE_AVX2:       # %bb.0:<br>
> -; PROMOTE_AVX2-NEXT:    vpsllq $32, %xmm1, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3]<br>
> +; PROMOTE_AVX2-NEXT:    vpmovsxdq %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vpsllq $3, %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vmovq %rdi, %xmm3<br>
>  ; PROMOTE_AVX2-NEXT:    vpbroadcastq %xmm3, %xmm3<br>
> @@ -199,21 +188,20 @@ define <2 x i32> @test_gather_v2i32_data<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; PROMOTE_SKX-NEXT:    vpgatherqd (,%xmm0), %xmm1 {%k1}<br>
> -; PROMOTE_SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; PROMOTE_SKX-NEXT:    vpgatherqd (,%xmm0), %xmm2 {%k1}<br>
> +; PROMOTE_SKX-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_gather_v2i32_data:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm2 killed $xmm2 def $ymm2<br>
>  ; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; PROMOTE_KNL-NEXT:    vpgatherqd (,%zmm0), %ymm1 {%k1}<br>
> -; PROMOTE_KNL-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; PROMOTE_KNL-NEXT:    vpgatherqd (,%zmm0), %ymm2 {%k1}<br>
> +; PROMOTE_KNL-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_KNL-NEXT:    vzeroupper<br>
>  ; PROMOTE_KNL-NEXT:    retq<br>
>  ;<br>
> @@ -227,11 +215,10 @@ define <2 x i32> @test_gather_v2i32_data<br>
>  ;<br>
>  ; PROMOTE_AVX2-LABEL: test_gather_v2i32_data:<br>
>  ; PROMOTE_AVX2:       # %bb.0:<br>
> -; PROMOTE_AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]<br>
>  ; PROMOTE_AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; PROMOTE_AVX2-NEXT:    vpslld $31, %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vpgatherqd %xmm1, (,%xmm0), %xmm2<br>
> -; PROMOTE_AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm2[0],zero,xmm2[1],zero<br>
> +; PROMOTE_AVX2-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_AVX2-NEXT:    retq<br>
>    %res = call <2 x i32> @llvm.masked.gather.v2i32.v2p0i32(<2 x i32*> %ptr, i32 4, <2 x i1> %mask, <2 x i32> %src0)<br>
>    ret <2 x i32>%res<br>
> @@ -261,16 +248,15 @@ define void @test_scatter_v2i32_data(<2<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; PROMOTE_SKX-NEXT:    vpscatterqd %xmm0, (,%xmm1) {%k1}<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_scatter_v2i32_data:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
>  ; PROMOTE_KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; PROMOTE_KNL-NEXT:    vpscatterqd %ymm0, (,%zmm1) {%k1}<br>
> @@ -316,7 +302,7 @@ define void @test_scatter_v2i32_data(<2<br>
>  ; PROMOTE_AVX2-NEXT:    je .LBB3_4<br>
>  ; PROMOTE_AVX2-NEXT:  .LBB3_3: # %cond.store1<br>
>  ; PROMOTE_AVX2-NEXT:    vpextrq $1, %xmm1, %rax<br>
> -; PROMOTE_AVX2-NEXT:    vextractps $2, %xmm0, (%rax)<br>
> +; PROMOTE_AVX2-NEXT:    vextractps $1, %xmm0, (%rax)<br>
>  ; PROMOTE_AVX2-NEXT:    retq<br>
>    call void @llvm.masked.scatter.v2i32.v2p0i32(<2 x i32> %a1, <2 x i32*> %ptr, i32 4, <2 x i1> %mask)<br>
>    ret void<br>
> @@ -348,22 +334,20 @@ define <2 x i32> @test_gather_v2i32_data<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm1, %k1<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
> -; PROMOTE_SKX-NEXT:    vpgatherdd (%rdi,%xmm0,4), %xmm1 {%k1}<br>
> -; PROMOTE_SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; PROMOTE_SKX-NEXT:    vpgatherdd (%rdi,%xmm0,4), %xmm2 {%k1}<br>
> +; PROMOTE_SKX-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_gather_v2i32_data_index:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm1, %xmm1<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; PROMOTE_KNL-NEXT:    vpgatherdd (%rdi,%zmm0,4), %zmm1 {%k1}<br>
> -; PROMOTE_KNL-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero<br>
> +; PROMOTE_KNL-NEXT:    vpgatherdd (%rdi,%zmm0,4), %zmm2 {%k1}<br>
> +; PROMOTE_KNL-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_KNL-NEXT:    vzeroupper<br>
>  ; PROMOTE_KNL-NEXT:    retq<br>
>  ;<br>
> @@ -377,12 +361,10 @@ define <2 x i32> @test_gather_v2i32_data<br>
>  ;<br>
>  ; PROMOTE_AVX2-LABEL: test_gather_v2i32_data_index:<br>
>  ; PROMOTE_AVX2:       # %bb.0:<br>
> -; PROMOTE_AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; PROMOTE_AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]<br>
>  ; PROMOTE_AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; PROMOTE_AVX2-NEXT:    vpslld $31, %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vpgatherdd %xmm1, (%rdi,%xmm0,4), %xmm2<br>
> -; PROMOTE_AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm2[0],zero,xmm2[1],zero<br>
> +; PROMOTE_AVX2-NEXT:    vmovdqa %xmm2, %xmm0<br>
>  ; PROMOTE_AVX2-NEXT:    retq<br>
>    %gep.random = getelementptr i32, i32* %base, <2 x i32> %ind<br>
>    %res = call <2 x i32> @llvm.masked.gather.v2i32.v2p0i32(<2 x i32*> %gep.random, i32 4, <2 x i1> %mask, <2 x i32> %src0)<br>
> @@ -413,17 +395,15 @@ define void @test_scatter_v2i32_data_ind<br>
>  ; PROMOTE_SKX:       # %bb.0:<br>
>  ; PROMOTE_SKX-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_SKX-NEXT:    vpmovq2m %xmm2, %k1<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; PROMOTE_SKX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; PROMOTE_SKX-NEXT:    vpscatterdd %xmm0, (%rdi,%xmm1,4) {%k1}<br>
>  ; PROMOTE_SKX-NEXT:    retq<br>
>  ;<br>
>  ; PROMOTE_KNL-LABEL: test_scatter_v2i32_data_index:<br>
>  ; PROMOTE_KNL:       # %bb.0:<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; PROMOTE_KNL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; PROMOTE_KNL-NEXT:    vpsllq $63, %xmm2, %xmm2<br>
>  ; PROMOTE_KNL-NEXT:    vptestmq %zmm2, %zmm2, %k0<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; PROMOTE_KNL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; PROMOTE_KNL-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; PROMOTE_KNL-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; PROMOTE_KNL-NEXT:    vpscatterdd %zmm0, (%rdi,%zmm1,4) {%k1}<br>
> @@ -458,9 +438,7 @@ define void @test_scatter_v2i32_data_ind<br>
>  ;<br>
>  ; PROMOTE_AVX2-LABEL: test_scatter_v2i32_data_index:<br>
>  ; PROMOTE_AVX2:       # %bb.0:<br>
> -; PROMOTE_AVX2-NEXT:    vpsllq $32, %xmm1, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpsrad $31, %xmm3, %xmm3<br>
> -; PROMOTE_AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm3[1],xmm1[2],xmm3[3]<br>
> +; PROMOTE_AVX2-NEXT:    vpmovsxdq %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vpsllq $2, %xmm1, %xmm1<br>
>  ; PROMOTE_AVX2-NEXT:    vmovq %rdi, %xmm3<br>
>  ; PROMOTE_AVX2-NEXT:    vpbroadcastq %xmm3, %xmm3<br>
> @@ -481,7 +459,7 @@ define void @test_scatter_v2i32_data_ind<br>
>  ; PROMOTE_AVX2-NEXT:    je .LBB5_4<br>
>  ; PROMOTE_AVX2-NEXT:  .LBB5_3: # %cond.store1<br>
>  ; PROMOTE_AVX2-NEXT:    vpextrq $1, %xmm1, %rax<br>
> -; PROMOTE_AVX2-NEXT:    vextractps $2, %xmm0, (%rax)<br>
> +; PROMOTE_AVX2-NEXT:    vextractps $1, %xmm0, (%rax)<br>
>  ; PROMOTE_AVX2-NEXT:    retq<br>
>    %gep = getelementptr i32, i32 *%base, <2 x i32> %ind<br>
>    call void @llvm.masked.scatter.v2i32.v2p0i32(<2 x i32> %a1, <2 x i32*> %gep, i32 4, <2 x i1> %mask)<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_load.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_load.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_load.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_load.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_load.ll Wed Aug  7 09:24:26 2019<br>
> @@ -458,38 +458,40 @@ define <8 x double> @load_v8f64_v8i16(<8<br>
>  ;<br>
>  ; AVX1-LABEL: load_v8f64_v8i16:<br>
>  ; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]<br>
> -; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm5<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4<br>
> -; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm3<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
> +; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4<br>
> +; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpmovsxwd %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm3, %xmm5<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3<br>
> +; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm4<br>
>  ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
>  ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0<br>
> -; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3<br>
> -; AVX1-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0<br>
> -; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1<br>
> -; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm4, %ymm0<br>
> +; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4<br>
> +; AVX1-NEXT:    vblendvpd %ymm0, %ymm4, %ymm1, %ymm0<br>
> +; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm3, %ymm1<br>
> +; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: load_v8f64_v8i16:<br>
>  ; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]<br>
> -; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4<br>
> -; AVX2-NEXT:    vpmovsxdq %xmm4, %ymm4<br>
> -; AVX2-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
> +; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpmovsxwd %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpmovsxdq %xmm3, %ymm3<br>
> +; AVX2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0<br>
> -; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3<br>
> -; AVX2-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0<br>
> -; AVX2-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1<br>
> -; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1<br>
> +; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4<br>
> +; AVX2-NEXT:    vblendvpd %ymm0, %ymm4, %ymm1, %ymm0<br>
> +; AVX2-NEXT:    vmaskmovpd 32(%rdi), %ymm3, %ymm1<br>
> +; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: load_v8f64_v8i16:<br>
> @@ -723,11 +725,9 @@ define <8 x double> @load_v8f64_v8i64(<8<br>
>  define <2 x float> @load_v2f32_v2i32(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %dst) {<br>
>  ; SSE2-LABEL: load_v2f32_v2i32:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB7_1<br>
> @@ -753,8 +753,8 @@ define <2 x float> @load_v2f32_v2i32(<2<br>
>  ; SSE42-LABEL: load_v2f32_v2i32:<br>
>  ; SSE42:       ## %bb.0:<br>
>  ; SSE42-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; SSE42-NEXT:    pcmpeqq %xmm2, %xmm0<br>
> +; SSE42-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> +; SSE42-NEXT:    pmovsxdq %xmm2, %xmm0<br>
>  ; SSE42-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE42-NEXT:    testb $1, %al<br>
>  ; SSE42-NEXT:    jne LBB7_1<br>
> @@ -774,32 +774,20 @@ define <2 x float> @load_v2f32_v2i32(<2<br>
>  ; SSE42-NEXT:    movaps %xmm1, %xmm0<br>
>  ; SSE42-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: load_v2f32_v2i32:<br>
> -; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: load_v2f32_v2i32:<br>
> -; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2<br>
> -; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX1OR2-LABEL: load_v2f32_v2i32:<br>
> +; AVX1OR2:       ## %bb.0:<br>
> +; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
> +; AVX1OR2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2<br>
> +; AVX1OR2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0<br>
> +; AVX1OR2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: load_v2f32_v2i32:<br>
>  ; AVX512F:       ## %bb.0:<br>
>  ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vblendmps (%rdi), %zmm1, %zmm0 {%k1}<br>
> @@ -807,13 +795,21 @@ define <2 x float> @load_v2f32_v2i32(<2<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: load_v2f32_v2i32:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1<br>
> -; AVX512VL-NEXT:    vblendmps (%rdi), %xmm1, %xmm0 {%k1}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: load_v2f32_v2i32:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vblendmps (%rdi), %xmm1, %xmm0 {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: load_v2f32_v2i32:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vblendmps (%rdi), %xmm1, %xmm0 {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)<br>
>    ret <2 x float> %res<br>
> @@ -822,11 +818,9 @@ define <2 x float> @load_v2f32_v2i32(<2<br>
>  define <2 x float> @load_v2f32_v2i32_undef(<2 x i32> %trigger, <2 x float>* %addr) {<br>
>  ; SSE2-LABEL: load_v2f32_v2i32_undef:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    ## implicit-def: $xmm0<br>
> @@ -850,8 +844,8 @@ define <2 x float> @load_v2f32_v2i32_und<br>
>  ; SSE42-LABEL: load_v2f32_v2i32_undef:<br>
>  ; SSE42:       ## %bb.0:<br>
>  ; SSE42-NEXT:    pxor %xmm1, %xmm1<br>
> -; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]<br>
> -; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0<br>
> +; SSE42-NEXT:    pcmpeqd %xmm0, %xmm1<br>
> +; SSE42-NEXT:    pmovsxdq %xmm1, %xmm0<br>
>  ; SSE42-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE42-NEXT:    testb $1, %al<br>
>  ; SSE42-NEXT:    ## implicit-def: $xmm0<br>
> @@ -869,29 +863,18 @@ define <2 x float> @load_v2f32_v2i32_und<br>
>  ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]<br>
>  ; SSE42-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: load_v2f32_v2i32_undef:<br>
> -; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: load_v2f32_v2i32_undef:<br>
> -; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm0<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX1OR2-LABEL: load_v2f32_v2i32_undef:<br>
> +; AVX1OR2:       ## %bb.0:<br>
> +; AVX1OR2-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> +; AVX1OR2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0<br>
> +; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
> +; AVX1OR2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm0<br>
> +; AVX1OR2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: load_v2f32_v2i32_undef:<br>
>  ; AVX512F:       ## %bb.0:<br>
> -; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1} {z}<br>
> @@ -899,13 +882,21 @@ define <2 x float> @load_v2f32_v2i32_und<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: load_v2f32_v2i32_undef:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1<br>
> -; AVX512VL-NEXT:    vmovups (%rdi), %xmm0 {%k1} {z}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: load_v2f32_v2i32_undef:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vmovups (%rdi), %xmm0 {%k1} {z}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: load_v2f32_v2i32_undef:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vmovups (%rdi), %xmm0 {%k1} {z}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float>undef)<br>
>    ret <2 x float> %res<br>
> @@ -1792,38 +1783,40 @@ define <8 x i64> @load_v8i64_v8i16(<8 x<br>
>  ;<br>
>  ; AVX1-LABEL: load_v8i64_v8i16:<br>
>  ; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> -; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]<br>
> -; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm5<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm4<br>
> -; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4<br>
> -; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm3<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
> +; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4<br>
> +; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpmovsxwd %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm3, %xmm5<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3<br>
> +; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm4<br>
>  ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
>  ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0<br>
> -; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3<br>
> -; AVX1-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0<br>
> -; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1<br>
> -; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm4, %ymm0<br>
> +; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4<br>
> +; AVX1-NEXT:    vblendvpd %ymm0, %ymm4, %ymm1, %ymm0<br>
> +; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm3, %ymm1<br>
> +; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: load_v8i64_v8i16:<br>
>  ; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]<br>
> -; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4<br>
> -; AVX2-NEXT:    vpmovsxdq %xmm4, %ymm4<br>
> -; AVX2-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero<br>
> -; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
> +; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpmovsxwd %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpmovsxdq %xmm3, %ymm3<br>
> +; AVX2-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpmovsxwd %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0<br>
> -; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm3<br>
> -; AVX2-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0<br>
> -; AVX2-NEXT:    vpmaskmovq 32(%rdi), %ymm4, %ymm1<br>
> -; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1<br>
> +; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm4<br>
> +; AVX2-NEXT:    vblendvpd %ymm0, %ymm4, %ymm1, %ymm0<br>
> +; AVX2-NEXT:    vpmaskmovq 32(%rdi), %ymm3, %ymm1<br>
> +; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: load_v8i64_v8i16:<br>
> @@ -2061,11 +2054,9 @@ define <8 x i64> @load_v8i64_v8i64(<8 x<br>
>  define <2 x i32> @load_v2i32_v2i32(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %dst) {<br>
>  ; SSE2-LABEL: load_v2i32_v2i32:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB17_1<br>
> @@ -2073,26 +2064,26 @@ define <2 x i32> @load_v2i32_v2i32(<2 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    jne LBB17_3<br>
>  ; SSE2-NEXT:  LBB17_4: ## %else2<br>
> -; SSE2-NEXT:    movapd %xmm1, %xmm0<br>
> +; SSE2-NEXT:    movaps %xmm1, %xmm0<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  LBB17_1: ## %cond.load<br>
> -; SSE2-NEXT:    movl (%rdi), %ecx<br>
> -; SSE2-NEXT:    movq %rcx, %xmm0<br>
> -; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]<br>
> +; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> +; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je LBB17_4<br>
>  ; SSE2-NEXT:  LBB17_3: ## %cond.load1<br>
> -; SSE2-NEXT:    movl 4(%rdi), %eax<br>
> -; SSE2-NEXT:    movq %rax, %xmm0<br>
> -; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]<br>
> -; SSE2-NEXT:    movapd %xmm1, %xmm0<br>
> +; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero<br>
> +; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]<br>
> +; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]<br>
> +; SSE2-NEXT:    movaps %xmm0, %xmm1<br>
> +; SSE2-NEXT:    movaps %xmm1, %xmm0<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE42-LABEL: load_v2i32_v2i32:<br>
>  ; SSE42:       ## %bb.0:<br>
>  ; SSE42-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; SSE42-NEXT:    pcmpeqq %xmm2, %xmm0<br>
> +; SSE42-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> +; SSE42-NEXT:    pmovsxdq %xmm2, %xmm0<br>
>  ; SSE42-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE42-NEXT:    testb $1, %al<br>
>  ; SSE42-NEXT:    jne LBB17_1<br>
> @@ -2103,62 +2094,59 @@ define <2 x i32> @load_v2i32_v2i32(<2 x<br>
>  ; SSE42-NEXT:    movdqa %xmm1, %xmm0<br>
>  ; SSE42-NEXT:    retq<br>
>  ; SSE42-NEXT:  LBB17_1: ## %cond.load<br>
> -; SSE42-NEXT:    movl (%rdi), %ecx<br>
> -; SSE42-NEXT:    pinsrq $0, %rcx, %xmm1<br>
> +; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm1<br>
>  ; SSE42-NEXT:    testb $2, %al<br>
>  ; SSE42-NEXT:    je LBB17_4<br>
>  ; SSE42-NEXT:  LBB17_3: ## %cond.load1<br>
> -; SSE42-NEXT:    movl 4(%rdi), %eax<br>
> -; SSE42-NEXT:    pinsrq $1, %rax, %xmm1<br>
> +; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm1<br>
>  ; SSE42-NEXT:    movdqa %xmm1, %xmm0<br>
>  ; SSE42-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: load_v2i32_v2i32:<br>
>  ; AVX1:       ## %bb.0:<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> +; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0<br>
> -; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: load_v2i32_v2i32:<br>
>  ; AVX2:       ## %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> +; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; AVX2-NEXT:    vpmaskmovd (%rdi), %xmm0, %xmm2<br>
> -; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
>  ; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0<br>
> -; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: load_v2i32_v2i32:<br>
>  ; AVX512F:       ## %bb.0:<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0<br>
> -; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; AVX512F-NEXT:    vmovdqu32 (%rdi), %zmm0 {%k1}<br>
> -; AVX512F-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
> +; AVX512F-NEXT:    vpblendmd (%rdi), %zmm1, %zmm0 {%k1}<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: load_v2i32_v2i32:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1<br>
> -; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; AVX512VL-NEXT:    vmovdqu32 (%rdi), %xmm0 {%k1}<br>
> -; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: load_v2i32_v2i32:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vpblendmd (%rdi), %xmm1, %xmm0 {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: load_v2i32_v2i32:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vpblendmd (%rdi), %xmm1, %xmm0 {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)<br>
>    ret <2 x i32> %res<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_store.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_store.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_store.ll Wed Aug  7 09:24:26 2019<br>
> @@ -165,11 +165,9 @@ define void @store_v4f64_v4i64(<4 x i64><br>
>  define void @store_v2f32_v2i32(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %val) {<br>
>  ; SSE2-LABEL: store_v2f32_v2i32:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB3_1<br>
> @@ -190,8 +188,8 @@ define void @store_v2f32_v2i32(<2 x i32><br>
>  ; SSE4-LABEL: store_v2f32_v2i32:<br>
>  ; SSE4:       ## %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; SSE4-NEXT:    pcmpeqq %xmm2, %xmm0<br>
> +; SSE4-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> +; SSE4-NEXT:    pmovsxdq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne LBB3_1<br>
> @@ -208,43 +206,40 @@ define void @store_v2f32_v2i32(<2 x i32><br>
>  ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: store_v2f32_v2i32:<br>
> -; AVX1:       ## %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX1-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: store_v2f32_v2i32:<br>
> -; AVX2:       ## %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX2-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX1OR2-LABEL: store_v2f32_v2i32:<br>
> +; AVX1OR2:       ## %bb.0:<br>
> +; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
> +; AVX1OR2-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)<br>
> +; AVX1OR2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: store_v2f32_v2i32:<br>
>  ; AVX512F:       ## %bb.0:<br>
>  ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovups %zmm1, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: store_v2f32_v2i32:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1<br>
> -; AVX512VL-NEXT:    vmovups %xmm1, (%rdi) {%k1}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: store_v2f32_v2i32:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vmovups %xmm1, (%rdi) {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: store_v2f32_v2i32:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vmovups %xmm1, (%rdi) {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    call void @llvm.masked.store.v2f32.p0v2f32(<2 x float> %val, <2 x float>* %addr, i32 4, <2 x i1> %mask)<br>
>    ret void<br>
> @@ -1046,11 +1041,9 @@ define void @store_v1i32_v1i32(<1 x i32><br>
>  define void @store_v2i32_v2i32(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %val) {<br>
>  ; SSE2-LABEL: store_v2i32_v2i32:<br>
>  ; SSE2:       ## %bb.0:<br>
> -; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne LBB10_1<br>
> @@ -1064,15 +1057,15 @@ define void @store_v2i32_v2i32(<2 x i32><br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je LBB10_4<br>
>  ; SSE2-NEXT:  LBB10_3: ## %cond.store1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]<br>
>  ; SSE2-NEXT:    movd %xmm0, 4(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: store_v2i32_v2i32:<br>
>  ; SSE4:       ## %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; SSE4-NEXT:    pcmpeqq %xmm2, %xmm0<br>
> +; SSE4-NEXT:    pcmpeqd %xmm0, %xmm2<br>
> +; SSE4-NEXT:    pmovsxdq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne LBB10_1<br>
> @@ -1086,48 +1079,51 @@ define void @store_v2i32_v2i32(<2 x i32><br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je LBB10_4<br>
>  ; SSE4-NEXT:  LBB10_3: ## %cond.store1<br>
> -; SSE4-NEXT:    extractps $2, %xmm1, 4(%rdi)<br>
> +; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: store_v2i32_v2i32:<br>
>  ; AVX1:       ## %bb.0:<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]<br>
> -; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; AVX1-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: store_v2i32_v2i32:<br>
>  ; AVX2:       ## %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero<br>
> -; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero<br>
>  ; AVX2-NEXT:    vpmaskmovd %xmm1, %xmm0, (%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: store_v2i32_v2i32:<br>
>  ; AVX512F:       ## %bb.0:<br>
> -; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0<br>
> -; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1<br>
> +; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0<br>
> +; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
> -; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
> +; AVX512F-NEXT:    vmovdqu32 %zmm1, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> -; AVX512VL-LABEL: store_v2i32_v2i32:<br>
> -; AVX512VL:       ## %bb.0:<br>
> -; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]<br>
> -; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1<br>
> -; AVX512VL-NEXT:    vpmovqd %xmm1, (%rdi) {%k1}<br>
> -; AVX512VL-NEXT:    retq<br>
> +; AVX512VLDQ-LABEL: store_v2i32_v2i32:<br>
> +; AVX512VLDQ:       ## %bb.0:<br>
> +; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0<br>
> +; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1<br>
> +; AVX512VLDQ-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}<br>
> +; AVX512VLDQ-NEXT:    retq<br>
> +;<br>
> +; AVX512VLBW-LABEL: store_v2i32_v2i32:<br>
> +; AVX512VLBW:       ## %bb.0:<br>
> +; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512VLBW-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}<br>
> +; AVX512VLBW-NEXT:    retq<br>
>    %mask = icmp eq <2 x i32> %trigger, zeroinitializer<br>
>    call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)<br>
>    ret void<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll Wed Aug  7 09:24:26 2019<br>
> @@ -615,17 +615,15 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i64_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm6, %xmm6<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm7 = xmm0[0,2,2,3,4,5,6,7]<br>
> -; SSE2-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,1,0,2,4,5,6,7]<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]<br>
> -; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]<br>
> -; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> -; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm7[0],xmm0[1]<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE2-NEXT:    pand %xmm7, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm7, %xmm2<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm2<br>
> +; SSE2-NEXT:    pand %xmm7, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm7, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm2, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm1, %xmm5<br>
> @@ -645,17 +643,26 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB2_5<br>
>  ; SSE2-NEXT:  .LBB2_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    je .LBB2_8<br>
> +; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB2_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB2_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB2_11<br>
> +; SSE2-NEXT:    je .LBB2_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB2_13<br>
> -; SSE2-NEXT:  .LBB2_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB2_15<br>
>  ; SSE2-NEXT:  .LBB2_16: # %else14<br>
> @@ -665,50 +672,36 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB2_4<br>
>  ; SSE2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB2_6<br>
>  ; SSE2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB2_8<br>
> -; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB2_10<br>
> -; SSE2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB2_12<br>
> -; SSE2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB2_14<br>
> +; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    jmp .LBB2_8<br>
>  ; SSE2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB2_16<br>
>  ; SSE2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i64_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm6, %xmm6<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm6[1,2,3],xmm3[4],xmm6[5,6,7]<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0],xmm6[1,2,3],xmm2[4],xmm6[5,6,7]<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE4-NEXT:    pand %xmm7, %xmm3<br>
> +; SSE4-NEXT:    pand %xmm7, %xmm2<br>
>  ; SSE4-NEXT:    packusdw %xmm3, %xmm2<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm6[1,2,3],xmm1[4],xmm6[5,6,7]<br>
> -; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm6[1,2,3],xmm0[4],xmm6[5,6,7]<br>
> +; SSE4-NEXT:    pand %xmm7, %xmm1<br>
> +; SSE4-NEXT:    pand %xmm7, %xmm0<br>
>  ; SSE4-NEXT:    packusdw %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    packusdw %xmm2, %xmm0<br>
> +; SSE4-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm6, %xmm5<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm1, %xmm5<br>
> @@ -747,36 +740,36 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB2_4<br>
>  ; SSE4-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB2_6<br>
>  ; SSE4-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB2_8<br>
>  ; SSE4-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB2_10<br>
>  ; SSE4-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB2_12<br>
>  ; SSE4-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB2_14<br>
>  ; SSE4-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB2_16<br>
>  ; SSE4-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i64_v8i8:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [65535,65535,65535,65535]<br>
> +; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [255,255,255,255]<br>
>  ; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4<br>
>  ; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1<br>
> @@ -784,6 +777,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
>  ; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1<br>
> @@ -822,44 +816,48 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB2_4<br>
>  ; AVX1-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB2_6<br>
>  ; AVX1-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB2_8<br>
>  ; AVX1-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB2_10<br>
>  ; AVX1-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB2_12<br>
>  ; AVX1-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB2_14<br>
>  ; AVX1-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB2_16<br>
>  ; AVX1-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v8i64_v8i8:<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
> -; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4<br>
> -; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm4[0,2]<br>
> -; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4<br>
> -; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm4[0,2]<br>
> -; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]<br>
> -; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -894,31 +892,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB2_4<br>
>  ; AVX2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB2_6<br>
>  ; AVX2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB2_8<br>
>  ; AVX2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB2_10<br>
>  ; AVX2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB2_12<br>
>  ; AVX2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB2_14<br>
>  ; AVX2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB2_16<br>
>  ; AVX2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -926,7 +924,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB2_1<br>
> @@ -959,31 +957,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_4<br>
>  ; AVX512F-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_6<br>
>  ; AVX512F-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_8<br>
>  ; AVX512F-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_10<br>
>  ; AVX512F-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_12<br>
>  ; AVX512F-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_14<br>
>  ; AVX512F-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_16<br>
>  ; AVX512F-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1147,7 +1145,11 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-LABEL: truncstore_v4i64_v4i16:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3<br>
>  ; SSE2-NEXT:    movmskps %xmm3, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
> @@ -1170,24 +1172,28 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB4_4<br>
>  ; SSE2-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB4_6<br>
>  ; SSE2-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB4_8<br>
>  ; SSE2-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i64_v4i16:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE4-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm3<br>
>  ; SSE4-NEXT:    movmskps %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -1209,62 +1215,109 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB4_4<br>
>  ; SSE4-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB4_6<br>
>  ; SSE4-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB4_8<br>
>  ; SSE4-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
> -; AVX-LABEL: truncstore_v4i64_v4i16:<br>
> -; AVX:       # %bb.0:<br>
> -; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]<br>
> -; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> -; AVX-NEXT:    vmovmskps %xmm1, %eax<br>
> -; AVX-NEXT:    xorl $15, %eax<br>
> -; AVX-NEXT:    testb $1, %al<br>
> -; AVX-NEXT:    jne .LBB4_1<br>
> -; AVX-NEXT:  # %bb.2: # %else<br>
> -; AVX-NEXT:    testb $2, %al<br>
> -; AVX-NEXT:    jne .LBB4_3<br>
> -; AVX-NEXT:  .LBB4_4: # %else2<br>
> -; AVX-NEXT:    testb $4, %al<br>
> -; AVX-NEXT:    jne .LBB4_5<br>
> -; AVX-NEXT:  .LBB4_6: # %else4<br>
> -; AVX-NEXT:    testb $8, %al<br>
> -; AVX-NEXT:    jne .LBB4_7<br>
> -; AVX-NEXT:  .LBB4_8: # %else6<br>
> -; AVX-NEXT:    vzeroupper<br>
> -; AVX-NEXT:    retq<br>
> -; AVX-NEXT:  .LBB4_1: # %cond.store<br>
> -; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> -; AVX-NEXT:    testb $2, %al<br>
> -; AVX-NEXT:    je .LBB4_4<br>
> -; AVX-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> -; AVX-NEXT:    testb $4, %al<br>
> -; AVX-NEXT:    je .LBB4_6<br>
> -; AVX-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> -; AVX-NEXT:    testb $8, %al<br>
> -; AVX-NEXT:    je .LBB4_8<br>
> -; AVX-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> -; AVX-NEXT:    vzeroupper<br>
> -; AVX-NEXT:    retq<br>
> +; AVX1-LABEL: truncstore_v4i64_v4i16:<br>
> +; AVX1:       # %bb.0:<br>
> +; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
> +; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
> +; AVX1-NEXT:    xorl $15, %eax<br>
> +; AVX1-NEXT:    testb $1, %al<br>
> +; AVX1-NEXT:    jne .LBB4_1<br>
> +; AVX1-NEXT:  # %bb.2: # %else<br>
> +; AVX1-NEXT:    testb $2, %al<br>
> +; AVX1-NEXT:    jne .LBB4_3<br>
> +; AVX1-NEXT:  .LBB4_4: # %else2<br>
> +; AVX1-NEXT:    testb $4, %al<br>
> +; AVX1-NEXT:    jne .LBB4_5<br>
> +; AVX1-NEXT:  .LBB4_6: # %else4<br>
> +; AVX1-NEXT:    testb $8, %al<br>
> +; AVX1-NEXT:    jne .LBB4_7<br>
> +; AVX1-NEXT:  .LBB4_8: # %else6<br>
> +; AVX1-NEXT:    vzeroupper<br>
> +; AVX1-NEXT:    retq<br>
> +; AVX1-NEXT:  .LBB4_1: # %cond.store<br>
> +; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> +; AVX1-NEXT:    testb $2, %al<br>
> +; AVX1-NEXT:    je .LBB4_4<br>
> +; AVX1-NEXT:  .LBB4_3: # %cond.store1<br>
> +; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    testb $4, %al<br>
> +; AVX1-NEXT:    je .LBB4_6<br>
> +; AVX1-NEXT:  .LBB4_5: # %cond.store3<br>
> +; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    testb $8, %al<br>
> +; AVX1-NEXT:    je .LBB4_8<br>
> +; AVX1-NEXT:  .LBB4_7: # %cond.store5<br>
> +; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vzeroupper<br>
> +; AVX1-NEXT:    retq<br>
> +;<br>
> +; AVX2-LABEL: truncstore_v4i64_v4i16:<br>
> +; AVX2:       # %bb.0:<br>
> +; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
> +; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
> +; AVX2-NEXT:    xorl $15, %eax<br>
> +; AVX2-NEXT:    testb $1, %al<br>
> +; AVX2-NEXT:    jne .LBB4_1<br>
> +; AVX2-NEXT:  # %bb.2: # %else<br>
> +; AVX2-NEXT:    testb $2, %al<br>
> +; AVX2-NEXT:    jne .LBB4_3<br>
> +; AVX2-NEXT:  .LBB4_4: # %else2<br>
> +; AVX2-NEXT:    testb $4, %al<br>
> +; AVX2-NEXT:    jne .LBB4_5<br>
> +; AVX2-NEXT:  .LBB4_6: # %else4<br>
> +; AVX2-NEXT:    testb $8, %al<br>
> +; AVX2-NEXT:    jne .LBB4_7<br>
> +; AVX2-NEXT:  .LBB4_8: # %else6<br>
> +; AVX2-NEXT:    vzeroupper<br>
> +; AVX2-NEXT:    retq<br>
> +; AVX2-NEXT:  .LBB4_1: # %cond.store<br>
> +; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> +; AVX2-NEXT:    testb $2, %al<br>
> +; AVX2-NEXT:    je .LBB4_4<br>
> +; AVX2-NEXT:  .LBB4_3: # %cond.store1<br>
> +; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    testb $4, %al<br>
> +; AVX2-NEXT:    je .LBB4_6<br>
> +; AVX2-NEXT:  .LBB4_5: # %cond.store3<br>
> +; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    testb $8, %al<br>
> +; AVX2-NEXT:    je .LBB4_8<br>
> +; AVX2-NEXT:  .LBB4_7: # %cond.store5<br>
> +; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vzeroupper<br>
> +; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i64_v4i16:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB4_1<br>
> @@ -1285,15 +1338,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_4<br>
>  ; AVX512F-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_6<br>
>  ; AVX512F-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_8<br>
>  ; AVX512F-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1302,10 +1355,9 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -1326,47 +1378,55 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE2-LABEL: truncstore_v4i64_v4i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3<br>
> -; SSE2-NEXT:    movmskps %xmm3, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movmskps %xmm3, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-NEXT:    jne .LBB5_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_3<br>
>  ; SSE2-NEXT:  .LBB5_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_5<br>
>  ; SSE2-NEXT:  .LBB5_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_7<br>
>  ; SSE2-NEXT:  .LBB5_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB5_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_4<br>
>  ; SSE2-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_6<br>
>  ; SSE2-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_8<br>
>  ; SSE2-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i64_v4i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE4-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; SSE4-NEXT:    pshufb %xmm4, %xmm1<br>
> +; SSE4-NEXT:    pshufb %xmm4, %xmm0<br>
> +; SSE4-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm3<br>
>  ; SSE4-NEXT:    movmskps %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -1388,62 +1448,107 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB5_4<br>
>  ; SSE4-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB5_6<br>
>  ; SSE4-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB5_8<br>
>  ; SSE4-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
> -; AVX-LABEL: truncstore_v4i64_v4i8:<br>
> -; AVX:       # %bb.0:<br>
> -; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]<br>
> -; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> -; AVX-NEXT:    vmovmskps %xmm1, %eax<br>
> -; AVX-NEXT:    xorl $15, %eax<br>
> -; AVX-NEXT:    testb $1, %al<br>
> -; AVX-NEXT:    jne .LBB5_1<br>
> -; AVX-NEXT:  # %bb.2: # %else<br>
> -; AVX-NEXT:    testb $2, %al<br>
> -; AVX-NEXT:    jne .LBB5_3<br>
> -; AVX-NEXT:  .LBB5_4: # %else2<br>
> -; AVX-NEXT:    testb $4, %al<br>
> -; AVX-NEXT:    jne .LBB5_5<br>
> -; AVX-NEXT:  .LBB5_6: # %else4<br>
> -; AVX-NEXT:    testb $8, %al<br>
> -; AVX-NEXT:    jne .LBB5_7<br>
> -; AVX-NEXT:  .LBB5_8: # %else6<br>
> -; AVX-NEXT:    vzeroupper<br>
> -; AVX-NEXT:    retq<br>
> -; AVX-NEXT:  .LBB5_1: # %cond.store<br>
> -; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)<br>
> -; AVX-NEXT:    testb $2, %al<br>
> -; AVX-NEXT:    je .LBB5_4<br>
> -; AVX-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> -; AVX-NEXT:    testb $4, %al<br>
> -; AVX-NEXT:    je .LBB5_6<br>
> -; AVX-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> -; AVX-NEXT:    testb $8, %al<br>
> -; AVX-NEXT:    je .LBB5_8<br>
> -; AVX-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> -; AVX-NEXT:    vzeroupper<br>
> -; AVX-NEXT:    retq<br>
> +; AVX1-LABEL: truncstore_v4i64_v4i8:<br>
> +; AVX1:       # %bb.0:<br>
> +; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
> +; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
> +; AVX1-NEXT:    xorl $15, %eax<br>
> +; AVX1-NEXT:    testb $1, %al<br>
> +; AVX1-NEXT:    jne .LBB5_1<br>
> +; AVX1-NEXT:  # %bb.2: # %else<br>
> +; AVX1-NEXT:    testb $2, %al<br>
> +; AVX1-NEXT:    jne .LBB5_3<br>
> +; AVX1-NEXT:  .LBB5_4: # %else2<br>
> +; AVX1-NEXT:    testb $4, %al<br>
> +; AVX1-NEXT:    jne .LBB5_5<br>
> +; AVX1-NEXT:  .LBB5_6: # %else4<br>
> +; AVX1-NEXT:    testb $8, %al<br>
> +; AVX1-NEXT:    jne .LBB5_7<br>
> +; AVX1-NEXT:  .LBB5_8: # %else6<br>
> +; AVX1-NEXT:    vzeroupper<br>
> +; AVX1-NEXT:    retq<br>
> +; AVX1-NEXT:  .LBB5_1: # %cond.store<br>
> +; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)<br>
> +; AVX1-NEXT:    testb $2, %al<br>
> +; AVX1-NEXT:    je .LBB5_4<br>
> +; AVX1-NEXT:  .LBB5_3: # %cond.store1<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    testb $4, %al<br>
> +; AVX1-NEXT:    je .LBB5_6<br>
> +; AVX1-NEXT:  .LBB5_5: # %cond.store3<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    testb $8, %al<br>
> +; AVX1-NEXT:    je .LBB5_8<br>
> +; AVX1-NEXT:  .LBB5_7: # %cond.store5<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vzeroupper<br>
> +; AVX1-NEXT:    retq<br>
> +;<br>
> +; AVX2-LABEL: truncstore_v4i64_v4i8:<br>
> +; AVX2:       # %bb.0:<br>
> +; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
> +; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
> +; AVX2-NEXT:    xorl $15, %eax<br>
> +; AVX2-NEXT:    testb $1, %al<br>
> +; AVX2-NEXT:    jne .LBB5_1<br>
> +; AVX2-NEXT:  # %bb.2: # %else<br>
> +; AVX2-NEXT:    testb $2, %al<br>
> +; AVX2-NEXT:    jne .LBB5_3<br>
> +; AVX2-NEXT:  .LBB5_4: # %else2<br>
> +; AVX2-NEXT:    testb $4, %al<br>
> +; AVX2-NEXT:    jne .LBB5_5<br>
> +; AVX2-NEXT:  .LBB5_6: # %else4<br>
> +; AVX2-NEXT:    testb $8, %al<br>
> +; AVX2-NEXT:    jne .LBB5_7<br>
> +; AVX2-NEXT:  .LBB5_8: # %else6<br>
> +; AVX2-NEXT:    vzeroupper<br>
> +; AVX2-NEXT:    retq<br>
> +; AVX2-NEXT:  .LBB5_1: # %cond.store<br>
> +; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)<br>
> +; AVX2-NEXT:    testb $2, %al<br>
> +; AVX2-NEXT:    je .LBB5_4<br>
> +; AVX2-NEXT:  .LBB5_3: # %cond.store1<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    testb $4, %al<br>
> +; AVX2-NEXT:    je .LBB5_6<br>
> +; AVX2-NEXT:  .LBB5_5: # %cond.store3<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    testb $8, %al<br>
> +; AVX2-NEXT:    je .LBB5_8<br>
> +; AVX2-NEXT:  .LBB5_7: # %cond.store5<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vzeroupper<br>
> +; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i64_v4i8:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB5_1<br>
> @@ -1464,15 +1569,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_4<br>
>  ; AVX512F-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_6<br>
>  ; AVX512F-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_8<br>
>  ; AVX512F-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1481,10 +1586,9 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -1505,6 +1609,7 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i32:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> @@ -1522,13 +1627,14 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB6_4<br>
>  ; SSE2-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
>  ; SSE2-NEXT:    movd %xmm0, 4(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i32:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskpd %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -1540,11 +1646,11 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE4-NEXT:  .LBB6_4: # %else2<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB6_1: # %cond.store<br>
> -; SSE4-NEXT:    movss %xmm0, (%rdi)<br>
> +; SSE4-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB6_4<br>
>  ; SSE4-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE4-NEXT:    extractps $2, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v2i64_v2i32:<br>
> @@ -1573,9 +1679,9 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
> @@ -1590,9 +1696,9 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -1606,6 +1712,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i16:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> @@ -1624,13 +1732,15 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB7_4<br>
>  ; SSE2-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 2(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i16:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskpd %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -1646,12 +1756,14 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB7_4<br>
>  ; SSE4-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i16:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -1667,13 +1779,15 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB7_4<br>
>  ; AVX-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i16:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX512F-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB7_1<br>
> @@ -1688,7 +1802,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB7_4<br>
>  ; AVX512F-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1696,10 +1810,10 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX512BW-NEXT:    kshiftld $30, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -1719,12 +1833,17 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm1<br>
>  ; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-NEXT:    xorl $3, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB8_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
> @@ -1732,18 +1851,17 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE2-NEXT:  .LBB8_4: # %else2<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB8_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB8_4<br>
>  ; SSE2-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskpd %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -1759,12 +1877,13 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB8_4<br>
>  ; SSE4-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i8:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -1780,13 +1899,14 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB8_4<br>
>  ; AVX-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i8:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB8_1<br>
> @@ -1801,7 +1921,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB8_4<br>
>  ; AVX512F-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1809,9 +1929,9 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -3593,11 +3713,11 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i32_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE2-NEXT:    pslld $16, %xmm1<br>
> -; SSE2-NEXT:    psrad $16, %xmm1<br>
> -; SSE2-NEXT:    pslld $16, %xmm0<br>
> -; SSE2-NEXT:    psrad $16, %xmm0<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]<br>
> +; SSE2-NEXT:    pand %xmm5, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm5, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm1, %xmm3<br>
> @@ -3617,17 +3737,26 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB12_5<br>
>  ; SSE2-NEXT:  .LBB12_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    je .LBB12_8<br>
> +; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB12_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB12_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB12_11<br>
> +; SSE2-NEXT:    je .LBB12_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB12_13<br>
> -; SSE2-NEXT:  .LBB12_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB12_15<br>
>  ; SSE2-NEXT:  .LBB12_16: # %else14<br>
> @@ -3637,47 +3766,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB12_4<br>
>  ; SSE2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB12_6<br>
>  ; SSE2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB12_8<br>
> -; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB12_10<br>
> -; SSE2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB12_12<br>
> -; SSE2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB12_14<br>
> +; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    jmp .LBB12_8<br>
>  ; SSE2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB12_16<br>
>  ; SSE2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i32_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
>  ; SSE4-NEXT:    pshufb %xmm5, %xmm1<br>
>  ; SSE4-NEXT:    pshufb %xmm5, %xmm0<br>
> -; SSE4-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]<br>
> +; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm1, %xmm3<br>
> @@ -3716,40 +3829,40 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB12_4<br>
>  ; SSE4-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB12_6<br>
>  ; SSE4-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB12_8<br>
>  ; SSE4-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB12_10<br>
>  ; SSE4-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB12_12<br>
>  ; SSE4-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB12_14<br>
>  ; SSE4-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB12_16<br>
>  ; SSE4-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i32_v8i8:<br>
>  ; AVX1:       # %bb.0:<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
>  ; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]<br>
> +; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2<br>
> @@ -3788,39 +3901,42 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB12_4<br>
>  ; AVX1-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB12_6<br>
>  ; AVX1-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB12_8<br>
>  ; AVX1-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB12_10<br>
>  ; AVX1-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB12_12<br>
>  ; AVX1-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB12_14<br>
>  ; AVX1-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB12_16<br>
>  ; AVX1-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v8i32_v8i8:<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]<br>
> -; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]<br>
> +; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -3855,31 +3971,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB12_4<br>
>  ; AVX2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB12_6<br>
>  ; AVX2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB12_8<br>
>  ; AVX2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB12_10<br>
>  ; AVX2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB12_12<br>
>  ; AVX2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB12_14<br>
>  ; AVX2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB12_16<br>
>  ; AVX2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -3888,7 +4004,7 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB12_1<br>
> @@ -3921,31 +4037,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_4<br>
>  ; AVX512F-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_6<br>
>  ; AVX512F-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_8<br>
>  ; AVX512F-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_10<br>
>  ; AVX512F-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_12<br>
>  ; AVX512F-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_14<br>
>  ; AVX512F-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_16<br>
>  ; AVX512F-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -3954,10 +4070,9 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -3978,6 +4093,9 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE2-LABEL: truncstore_v4i32_v4i16:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
> @@ -4000,23 +4118,24 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB13_4<br>
>  ; SSE2-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB13_6<br>
>  ; SSE2-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB13_8<br>
>  ; SSE2-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i32_v4i16:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -4038,20 +4157,21 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB13_4<br>
>  ; SSE4-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB13_6<br>
>  ; SSE4-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB13_8<br>
>  ; SSE4-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v4i32_v4i16:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $15, %eax<br>
> @@ -4073,21 +4193,22 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB13_4<br>
>  ; AVX-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    testb $4, %al<br>
>  ; AVX-NEXT:    je .LBB13_6<br>
>  ; AVX-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX-NEXT:    testb $8, %al<br>
>  ; AVX-NEXT:    je .LBB13_8<br>
>  ; AVX-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i16:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB13_1<br>
> @@ -4108,15 +4229,15 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_4<br>
>  ; AVX512F-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_6<br>
>  ; AVX512F-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_8<br>
>  ; AVX512F-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -4124,9 +4245,9 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -4146,45 +4267,49 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE2-LABEL: truncstore_v4i32_v4i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-NEXT:    movmskps %xmm2, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movmskps %xmm2, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-NEXT:    jne .LBB14_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_3<br>
>  ; SSE2-NEXT:  .LBB14_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_5<br>
>  ; SSE2-NEXT:  .LBB14_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_7<br>
>  ; SSE2-NEXT:  .LBB14_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB14_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_4<br>
>  ; SSE2-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_6<br>
>  ; SSE2-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_8<br>
>  ; SSE2-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i32_v4i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -4206,20 +4331,21 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB14_4<br>
>  ; SSE4-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB14_6<br>
>  ; SSE4-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB14_8<br>
>  ; SSE4-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v4i32_v4i8:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $15, %eax<br>
> @@ -4241,21 +4367,22 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB14_4<br>
>  ; AVX-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    testb $4, %al<br>
>  ; AVX-NEXT:    je .LBB14_6<br>
>  ; AVX-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    testb $8, %al<br>
>  ; AVX-NEXT:    je .LBB14_8<br>
>  ; AVX-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i8:<br>
>  ; AVX512F:       # %bb.0:<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB14_1<br>
> @@ -4276,15 +4403,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_4<br>
>  ; AVX512F-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_6<br>
>  ; AVX512F-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_8<br>
>  ; AVX512F-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -4292,9 +4419,9 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -6147,6 +6274,8 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -6163,17 +6292,26 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB17_5<br>
>  ; SSE2-NEXT:  .LBB17_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    je .LBB17_8<br>
> +; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB17_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB17_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB17_11<br>
> +; SSE2-NEXT:    je .LBB17_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB17_13<br>
> -; SSE2-NEXT:  .LBB17_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB17_15<br>
>  ; SSE2-NEXT:  .LBB17_16: # %else14<br>
> @@ -6183,43 +6321,28 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB17_4<br>
>  ; SSE2-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB17_6<br>
>  ; SSE2-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB17_8<br>
> -; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB17_10<br>
> -; SSE2-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB17_12<br>
> -; SSE2-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB17_14<br>
> +; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    jmp .LBB17_8<br>
>  ; SSE2-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB17_16<br>
>  ; SSE2-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -6255,36 +6378,37 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB17_4<br>
>  ; SSE4-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB17_6<br>
>  ; SSE4-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB17_8<br>
>  ; SSE4-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB17_10<br>
>  ; SSE4-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB17_12<br>
>  ; SSE4-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB17_14<br>
>  ; SSE4-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB17_16<br>
>  ; SSE4-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v8i16_v8i8:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> @@ -6320,31 +6444,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB17_4<br>
>  ; AVX-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    testb $4, %al<br>
>  ; AVX-NEXT:    je .LBB17_6<br>
>  ; AVX-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    testb $8, %al<br>
>  ; AVX-NEXT:    je .LBB17_8<br>
>  ; AVX-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX-NEXT:    testb $16, %al<br>
>  ; AVX-NEXT:    je .LBB17_10<br>
>  ; AVX-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX-NEXT:    testb $32, %al<br>
>  ; AVX-NEXT:    je .LBB17_12<br>
>  ; AVX-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX-NEXT:    testb $64, %al<br>
>  ; AVX-NEXT:    je .LBB17_14<br>
>  ; AVX-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX-NEXT:    testb $-128, %al<br>
>  ; AVX-NEXT:    je .LBB17_16<br>
>  ; AVX-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v8i16_v8i8:<br>
> @@ -6354,6 +6478,7 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1<br>
>  ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB17_1<br>
> @@ -6386,31 +6511,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_4<br>
>  ; AVX512F-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_6<br>
>  ; AVX512F-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_8<br>
>  ; AVX512F-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_10<br>
>  ; AVX512F-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_12<br>
>  ; AVX512F-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_14<br>
>  ; AVX512F-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_16<br>
>  ; AVX512F-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -6418,9 +6543,9 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll Wed Aug  7 09:24:26 2019<br>
> @@ -948,7 +948,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    pxor %xmm8, %xmm8<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [127,127]<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648]<br>
> -; SSE2-NEXT:    movdqa %xmm2, %xmm6<br>
> +; SSE2-NEXT:    movdqa %xmm3, %xmm6<br>
>  ; SSE2-NEXT:    pxor %xmm11, %xmm6<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483775,2147483775]<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm7<br>
> @@ -959,23 +959,10 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    pand %xmm12, %xmm6<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm6, %xmm13<br>
> -; SSE2-NEXT:    pand %xmm13, %xmm2<br>
> +; SSE2-NEXT:    pand %xmm13, %xmm3<br>
>  ; SSE2-NEXT:    pandn %xmm9, %xmm13<br>
> -; SSE2-NEXT:    por %xmm2, %xmm13<br>
> -; SSE2-NEXT:    movdqa %xmm3, %xmm2<br>
> -; SSE2-NEXT:    pxor %xmm11, %xmm2<br>
> -; SSE2-NEXT:    movdqa %xmm10, %xmm6<br>
> -; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm12, %xmm7<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm7, %xmm2<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm3<br>
> -; SSE2-NEXT:    pandn %xmm9, %xmm2<br>
> -; SSE2-NEXT:    por %xmm3, %xmm2<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm3<br>
> +; SSE2-NEXT:    por %xmm3, %xmm13<br>
> +; SSE2-NEXT:    movdqa %xmm2, %xmm3<br>
>  ; SSE2-NEXT:    pxor %xmm11, %xmm3<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm6<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6<br>
> @@ -985,78 +972,97 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    pand %xmm12, %xmm7<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm7, %xmm3<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm2<br>
>  ; SSE2-NEXT:    pandn %xmm9, %xmm3<br>
> -; SSE2-NEXT:    por %xmm0, %xmm3<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm11, %xmm0<br>
> +; SSE2-NEXT:    por %xmm2, %xmm3<br>
> +; SSE2-NEXT:    movdqa %xmm1, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm11, %xmm2<br>
> +; SSE2-NEXT:    movdqa %xmm10, %xmm6<br>
> +; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm12, %xmm7<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm7, %xmm2<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> +; SSE2-NEXT:    pandn %xmm9, %xmm2<br>
> +; SSE2-NEXT:    por %xmm1, %xmm2<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pxor %xmm11, %xmm1<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm6<br>
> -; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6<br>
> +; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm7, %xmm0<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm7, %xmm1<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm6<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm1<br>
> -; SSE2-NEXT:    pandn %xmm9, %xmm6<br>
>  ; SSE2-NEXT:    por %xmm1, %xmm6<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pandn %xmm9, %xmm6<br>
> +; SSE2-NEXT:    por %xmm0, %xmm6<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [18446744073709551488,18446744073709551488]<br>
>  ; SSE2-NEXT:    movdqa %xmm6, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm11, %xmm0<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm7<br>
> -; SSE2-NEXT:    pcmpgtd %xmm10, %xmm7<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm6<br>
> -; SSE2-NEXT:    pandn %xmm9, %xmm1<br>
> -; SSE2-NEXT:    por %xmm6, %xmm1<br>
> -; SSE2-NEXT:    movdqa %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm11, %xmm0<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm6<br>
> -; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm1[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]<br>
>  ; SSE2-NEXT:    pand %xmm12, %xmm7<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm7, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm6<br>
>  ; SSE2-NEXT:    pandn %xmm9, %xmm0<br>
> -; SSE2-NEXT:    por %xmm3, %xmm0<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    por %xmm6, %xmm0<br>
>  ; SSE2-NEXT:    movdqa %xmm2, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm11, %xmm1<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm3<br>
> +; SSE2-NEXT:    movdqa %xmm1, %xmm6<br>
> +; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm12, %xmm7<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm7, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm1, %xmm2<br>
> +; SSE2-NEXT:    pandn %xmm9, %xmm1<br>
> +; SSE2-NEXT:    por %xmm2, %xmm1<br>
> +; SSE2-NEXT:    movdqa %xmm3, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm11, %xmm2<br>
> +; SSE2-NEXT:    movdqa %xmm2, %xmm6<br>
> +; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm12, %xmm7<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm7, %xmm2<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm3<br>
> +; SSE2-NEXT:    pandn %xmm9, %xmm2<br>
> +; SSE2-NEXT:    por %xmm3, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm13, %xmm11<br>
> +; SSE2-NEXT:    movdqa %xmm11, %xmm3<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm1<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm11[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm7<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm2<br>
> +; SSE2-NEXT:    por %xmm7, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm13<br>
>  ; SSE2-NEXT:    pandn %xmm9, %xmm3<br>
> -; SSE2-NEXT:    por %xmm2, %xmm3<br>
> -; SSE2-NEXT:    pxor %xmm13, %xmm11<br>
> -; SSE2-NEXT:    movdqa %xmm11, %xmm1<br>
> -; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm11[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm6<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm6, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm13<br>
> -; SSE2-NEXT:    pandn %xmm9, %xmm1<br>
> -; SSE2-NEXT:    por %xmm13, %xmm1<br>
> -; SSE2-NEXT:    packssdw %xmm3, %xmm1<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    por %xmm13, %xmm3<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm2<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm2<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm2, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm1, %xmm5<br>
> @@ -1076,17 +1082,26 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB2_5<br>
>  ; SSE2-NEXT:  .LBB2_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    je .LBB2_8<br>
> +; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB2_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB2_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB2_11<br>
> +; SSE2-NEXT:    je .LBB2_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB2_13<br>
> -; SSE2-NEXT:  .LBB2_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB2_15<br>
>  ; SSE2-NEXT:  .LBB2_16: # %else14<br>
> @@ -1096,38 +1111,22 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB2_4<br>
>  ; SSE2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB2_6<br>
>  ; SSE2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB2_8<br>
> -; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB2_10<br>
> -; SSE2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB2_12<br>
> -; SSE2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB2_14<br>
> +; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    jmp .LBB2_8<br>
>  ; SSE2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB2_16<br>
>  ; SSE2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i64_v8i8:<br>
> @@ -1136,39 +1135,45 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE4-NEXT:    pxor %xmm8, %xmm8<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [127,127]<br>
>  ; SSE4-NEXT:    movdqa %xmm7, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0<br>
> -; SSE4-NEXT:    movdqa %xmm7, %xmm10<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm10<br>
> -; SSE4-NEXT:    movdqa %xmm7, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> -; SSE4-NEXT:    movdqa %xmm7, %xmm2<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm2<br>
> +; SSE4-NEXT:    movdqa %xmm7, %xmm10<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm10<br>
>  ; SSE4-NEXT:    movdqa %xmm7, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0<br>
> +; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    movdqa %xmm7, %xmm3<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm3<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3<br>
>  ; SSE4-NEXT:    movdqa %xmm7, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm7<br>
> +; SSE4-NEXT:    movdqa %xmm7, %xmm2<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm2<br>
> +; SSE4-NEXT:    movdqa %xmm7, %xmm0<br>
> +; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm7<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]<br>
>  ; SSE4-NEXT:    movapd %xmm7, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    movdqa %xmm1, %xmm6<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm6<br>
> -; SSE4-NEXT:    movapd %xmm3, %xmm0<br>
> +; SSE4-NEXT:    movapd %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    movdqa %xmm1, %xmm7<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7<br>
> -; SSE4-NEXT:    packssdw %xmm6, %xmm7<br>
> -; SSE4-NEXT:    movapd %xmm2, %xmm0<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm7<br>
> +; SSE4-NEXT:    movapd %xmm3, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    movdqa %xmm1, %xmm3<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3<br>
> +; SSE4-NEXT:    movdqa %xmm1, %xmm2<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm2<br>
>  ; SSE4-NEXT:    movapd %xmm10, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm10, %xmm1<br>
> -; SSE4-NEXT:    packssdw %xmm3, %xmm1<br>
> -; SSE4-NEXT:    packssdw %xmm1, %xmm7<br>
> +; SSE4-NEXT:    movapd {{.*#+}} xmm0 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE4-NEXT:    andpd %xmm0, %xmm1<br>
> +; SSE4-NEXT:    andpd %xmm0, %xmm2<br>
> +; SSE4-NEXT:    packusdw %xmm1, %xmm2<br>
> +; SSE4-NEXT:    andpd %xmm0, %xmm7<br>
> +; SSE4-NEXT:    andpd %xmm0, %xmm6<br>
> +; SSE4-NEXT:    packusdw %xmm7, %xmm6<br>
> +; SSE4-NEXT:    packusdw %xmm2, %xmm6<br>
> +; SSE4-NEXT:    packuswb %xmm6, %xmm6<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pxor %xmm0, %xmm5<br>
> @@ -1203,62 +1208,74 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE4-NEXT:  .LBB2_16: # %else14<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB2_1: # %cond.store<br>
> -; SSE4-NEXT:    pextrb $0, %xmm7, (%rdi)<br>
> +; SSE4-NEXT:    pextrb $0, %xmm6, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB2_4<br>
>  ; SSE4-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm7, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm6, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB2_6<br>
>  ; SSE4-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm7, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm6, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB2_8<br>
>  ; SSE4-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm7, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm6, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB2_10<br>
>  ; SSE4-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm7, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm6, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB2_12<br>
>  ; SSE4-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm7, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm6, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB2_14<br>
>  ; SSE4-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm7, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm6, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB2_16<br>
>  ; SSE4-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm7, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm6, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i64_v8i8:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [127,127]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm8<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm9<br>
> -; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm4, %xmm5<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6<br>
> -; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488]<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm10<br>
> -; AVX1-NEXT:    vblendvpd %xmm5, %xmm7, %xmm4, %xmm5<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm5, %xmm11<br>
> -; AVX1-NEXT:    vblendvpd %xmm9, %xmm1, %xmm4, %xmm1<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm7<br>
> -; AVX1-NEXT:    vblendvpd %xmm8, %xmm3, %xmm4, %xmm3<br>
> -; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4<br>
> -; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3<br>
> -; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm1<br>
> -; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vblendvpd %xmm11, %xmm5, %xmm6, %xmm3<br>
> -; AVX1-NEXT:    vblendvpd %xmm10, %xmm0, %xmm6, %xmm0<br>
> -; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vmovapd {{.*#+}} ymm9 = [127,127,127,127]<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm10<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [127,127]<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm5, %xmm6<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm5, %xmm7<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm7, %ymm8<br>
> +; AVX1-NEXT:    vblendvpd %ymm8, %ymm1, %ymm9, %ymm8<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm4<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm5, %xmm11<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm11, %ymm12<br>
> +; AVX1-NEXT:    vblendvpd %ymm12, %ymm0, %ymm9, %ymm9<br>
> +; AVX1-NEXT:    vmovapd {{.*#+}} ymm12 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]<br>
> +; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm5, %xmm3<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488]<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vblendvpd %xmm11, %xmm0, %xmm5, %xmm0<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> +; AVX1-NEXT:    vblendvpd %ymm0, %ymm9, %ymm12, %ymm0<br>
> +; AVX1-NEXT:    vblendvpd %xmm6, %xmm10, %xmm5, %xmm3<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm5, %xmm1<br>
> +; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1<br>
> +; AVX1-NEXT:    vblendvpd %ymm1, %ymm8, %ymm12, %ymm1<br>
> +; AVX1-NEXT:    vmovapd {{.*#+}} ymm3 = [255,255,255,255]<br>
> +; AVX1-NEXT:    vandpd %ymm3, %ymm1, %ymm1<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4<br>
> +; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vandpd %ymm3, %ymm0, %ymm0<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1<br>
> @@ -1297,31 +1314,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB2_4<br>
>  ; AVX1-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB2_6<br>
>  ; AVX1-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB2_8<br>
>  ; AVX1-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB2_10<br>
>  ; AVX1-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB2_12<br>
>  ; AVX1-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB2_14<br>
>  ; AVX1-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB2_16<br>
>  ; AVX1-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -1329,19 +1346,26 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [127,127,127,127]<br>
> -; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5<br>
> -; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5<br>
>  ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1<br>
> +; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5<br>
> +; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0<br>
>  ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]<br>
> -; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5<br>
> -; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm5<br>
>  ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0<br>
> -; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> -; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5<br>
> +; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1<br>
> +; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]<br>
> +; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -1376,31 +1400,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB2_4<br>
>  ; AVX2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB2_6<br>
>  ; AVX2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB2_8<br>
>  ; AVX2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB2_10<br>
>  ; AVX2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB2_12<br>
>  ; AVX2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB2_14<br>
>  ; AVX2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB2_16<br>
>  ; AVX2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -1410,7 +1434,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB2_1<br>
> @@ -1443,31 +1467,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_4<br>
>  ; AVX512F-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_6<br>
>  ; AVX512F-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_8<br>
>  ; AVX512F-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_10<br>
>  ; AVX512F-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_12<br>
>  ; AVX512F-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_14<br>
>  ; AVX512F-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_16<br>
>  ; AVX512F-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1744,7 +1768,7 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    pxor %xmm9, %xmm9<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32767,32767]<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm5<br>
> +; SSE2-NEXT:    movdqa %xmm1, %xmm5<br>
>  ; SSE2-NEXT:    pxor %xmm4, %xmm5<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147516415,2147516415]<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm7<br>
> @@ -1755,50 +1779,54 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    pand %xmm3, %xmm6<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm6, %xmm5<br>
> -; SSE2-NEXT:    pand %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm5, %xmm1<br>
>  ; SSE2-NEXT:    pandn %xmm8, %xmm5<br>
> -; SSE2-NEXT:    por %xmm0, %xmm5<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm4, %xmm0<br>
> +; SSE2-NEXT:    por %xmm1, %xmm5<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pxor %xmm4, %xmm1<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm3<br>
> -; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm1<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm3<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm1<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm3<br>
>  ; SSE2-NEXT:    por %xmm1, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm3<br>
> +; SSE2-NEXT:    por %xmm0, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709518848,18446744073709518848]<br>
> -; SSE2-NEXT:    movdqa %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm4, %xmm0<br>
> +; SSE2-NEXT:    movdqa %xmm3, %xmm1<br>
> +; SSE2-NEXT:    pxor %xmm4, %xmm1<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744071562035200,18446744071562035200]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm7<br>
> +; SSE2-NEXT:    movdqa %xmm1, %xmm7<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> -; SSE2-NEXT:    por %xmm3, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm6, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> +; SSE2-NEXT:    por %xmm3, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm5, %xmm4<br>
> -; SSE2-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,2,2]<br>
> +; SSE2-NEXT:    movdqa %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pcmpgtd %xmm6, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]<br>
>  ; SSE2-NEXT:    pand %xmm3, %xmm4<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> -; SSE2-NEXT:    por %xmm5, %xmm0<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm1, %xmm5<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> +; SSE2-NEXT:    por %xmm5, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9<br>
>  ; SSE2-NEXT:    movmskps %xmm9, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
> @@ -1821,17 +1849,17 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB4_4<br>
>  ; SSE2-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB4_6<br>
>  ; SSE2-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB4_8<br>
>  ; SSE2-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -1841,12 +1869,12 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [32767,32767]<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm6<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm6<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5<br>
> +; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]<br>
>  ; SSE4-NEXT:    movapd %xmm5, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> @@ -1855,7 +1883,11 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE4-NEXT:    movapd %xmm6, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1<br>
> -; SSE4-NEXT:    packssdw %xmm3, %xmm1<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4<br>
>  ; SSE4-NEXT:    movmskps %xmm4, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -1873,19 +1905,19 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE4-NEXT:  .LBB4_8: # %else6<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB4_1: # %cond.store<br>
> -; SSE4-NEXT:    pextrw $0, %xmm1, (%rdi)<br>
> +; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB4_4<br>
>  ; SSE4-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm1, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB4_6<br>
>  ; SSE4-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm1, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB4_8<br>
>  ; SSE4-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm1, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i64_v4i16:<br>
> @@ -1901,8 +1933,12 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4<br>
>  ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3<br>
> +; AVX1-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
>  ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0<br>
> -; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -1925,15 +1961,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB4_4<br>
>  ; AVX1-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB4_6<br>
>  ; AVX1-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB4_8<br>
>  ; AVX1-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -1947,7 +1983,11 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4<br>
>  ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0<br>
>  ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -1970,15 +2010,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB4_4<br>
>  ; AVX2-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB4_6<br>
>  ; AVX2-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB4_8<br>
>  ; AVX2-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -1991,7 +2031,7 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]<br>
>  ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB4_1<br>
> @@ -2012,15 +2052,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_4<br>
>  ; AVX512F-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_6<br>
>  ; AVX512F-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_8<br>
>  ; AVX512F-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2029,14 +2069,13 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32767,32767,32767,32767]<br>
>  ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]<br>
>  ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2065,7 +2104,7 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE2-NEXT:    pxor %xmm9, %xmm9<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [127,127]<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm5<br>
> +; SSE2-NEXT:    movdqa %xmm1, %xmm5<br>
>  ; SSE2-NEXT:    pxor %xmm4, %xmm5<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483775,2147483775]<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm7<br>
> @@ -2076,83 +2115,88 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE2-NEXT:    pand %xmm3, %xmm6<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm6, %xmm5<br>
> -; SSE2-NEXT:    pand %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm5, %xmm1<br>
>  ; SSE2-NEXT:    pandn %xmm8, %xmm5<br>
> -; SSE2-NEXT:    por %xmm0, %xmm5<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm4, %xmm0<br>
> +; SSE2-NEXT:    por %xmm1, %xmm5<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pxor %xmm4, %xmm1<br>
>  ; SSE2-NEXT:    movdqa %xmm10, %xmm3<br>
> -; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm1<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm3<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm1<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm3<br>
>  ; SSE2-NEXT:    por %xmm1, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm3<br>
> +; SSE2-NEXT:    por %xmm0, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]<br>
>  ; SSE2-NEXT:    movdqa %xmm3, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm4, %xmm0<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744071562067840,18446744071562067840]<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840]<br>
>  ; SSE2-NEXT:    movdqa %xmm0, %xmm7<br>
> -; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7<br>
> +; SSE2-NEXT:    pcmpgtd %xmm10, %xmm7<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> -; SSE2-NEXT:    por %xmm3, %xmm1<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm1, %xmm6<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> +; SSE2-NEXT:    por %xmm3, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm5, %xmm4<br>
> -; SSE2-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4<br>
> +; SSE2-NEXT:    movdqa %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]<br>
>  ; SSE2-NEXT:    pand %xmm3, %xmm4<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> -; SSE2-NEXT:    por %xmm5, %xmm0<br>
> -; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm1, %xmm5<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> +; SSE2-NEXT:    por %xmm5, %xmm1<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9<br>
> -; SSE2-NEXT:    movmskps %xmm9, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movmskps %xmm9, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm0, %eax<br>
>  ; SSE2-NEXT:    jne .LBB5_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_3<br>
>  ; SSE2-NEXT:  .LBB5_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_5<br>
>  ; SSE2-NEXT:  .LBB5_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_7<br>
>  ; SSE2-NEXT:  .LBB5_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB5_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_4<br>
>  ; SSE2-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_6<br>
>  ; SSE2-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_8<br>
>  ; SSE2-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -2162,21 +2206,24 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [127,127]<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm6<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm6<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6<br>
>  ; SSE4-NEXT:    movdqa %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5<br>
> -; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]<br>
> +; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]<br>
>  ; SSE4-NEXT:    movapd %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    movdqa %xmm1, %xmm3<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3<br>
> +; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    movdqa %xmm3, %xmm1<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm1<br>
>  ; SSE4-NEXT:    movapd %xmm6, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1<br>
> -; SSE4-NEXT:    packssdw %xmm3, %xmm1<br>
> +; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm3<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; SSE4-NEXT:    pshufb %xmm0, %xmm3<br>
> +; SSE4-NEXT:    pshufb %xmm0, %xmm1<br>
> +; SSE4-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4<br>
>  ; SSE4-NEXT:    movmskps %xmm4, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -2198,15 +2245,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB5_4<br>
>  ; SSE4-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm1, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm1, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB5_6<br>
>  ; SSE4-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm1, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm1, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB5_8<br>
>  ; SSE4-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm1, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm1, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i64_v4i8:<br>
> @@ -2222,8 +2269,11 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4<br>
>  ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0<br>
> -; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -2246,15 +2296,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB5_4<br>
>  ; AVX1-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB5_6<br>
>  ; AVX1-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB5_8<br>
>  ; AVX1-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -2268,7 +2318,10 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4<br>
>  ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0<br>
>  ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -2291,15 +2344,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB5_4<br>
>  ; AVX2-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB5_6<br>
>  ; AVX2-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB5_8<br>
>  ; AVX2-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -2312,7 +2365,7 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]<br>
>  ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB5_1<br>
> @@ -2333,15 +2386,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_4<br>
>  ; AVX512F-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_6<br>
>  ; AVX512F-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_8<br>
>  ; AVX512F-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2350,14 +2403,13 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [127,127,127,127]<br>
>  ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]<br>
>  ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> -; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2405,13 +2457,14 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    por %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm5<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3<br>
> +; SSE2-NEXT:    por %xmm5, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> @@ -2429,7 +2482,7 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB6_4<br>
>  ; SSE2-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
>  ; SSE2-NEXT:    movd %xmm0, 4(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -2445,6 +2498,7 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE4-NEXT:    movapd %xmm4, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3<br>
>  ; SSE4-NEXT:    movmskpd %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -2456,11 +2510,11 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE4-NEXT:  .LBB6_4: # %else2<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB6_1: # %cond.store<br>
> -; SSE4-NEXT:    movss %xmm2, (%rdi)<br>
> +; SSE4-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB6_4<br>
>  ; SSE4-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE4-NEXT:    extractps $2, %xmm2, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v2i64_v2i32:<br>
> @@ -2469,6 +2523,7 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3<br>
>  ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
> @@ -2476,7 +2531,6 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3<br>
>  ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
>  ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -2486,6 +2540,7 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]<br>
>  ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3<br>
>  ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
> @@ -2493,7 +2548,6 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3<br>
>  ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
>  ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -2502,13 +2556,13 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [2147483647,2147483647]<br>
>  ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]<br>
>  ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
> -; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
> @@ -2526,13 +2580,13 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [2147483647,2147483647]<br>
>  ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]<br>
>  ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2571,13 +2625,15 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    por %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm5<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3<br>
> +; SSE2-NEXT:    por %xmm5, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> @@ -2596,7 +2652,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB7_4<br>
>  ; SSE2-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 2(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -2612,6 +2668,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE4-NEXT:    movapd %xmm4, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3<br>
>  ; SSE4-NEXT:    movmskpd %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -2623,11 +2681,11 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE4-NEXT:  .LBB7_4: # %else2<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB7_1: # %cond.store<br>
> -; SSE4-NEXT:    pextrw $0, %xmm2, (%rdi)<br>
> +; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB7_4<br>
>  ; SSE4-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $4, %xmm2, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i16:<br>
> @@ -2639,6 +2697,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709518848,18446744073709518848]<br>
>  ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4<br>
>  ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0<br>
> +; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -2654,7 +2714,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB7_4<br>
>  ; AVX-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i16:<br>
> @@ -2666,6 +2726,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]<br>
>  ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> +; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX512F-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB7_1<br>
> @@ -2680,7 +2742,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB7_4<br>
>  ; AVX512F-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2689,14 +2751,14 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftld $30, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [32767,32767]<br>
>  ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]<br>
>  ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> -; AVX512BW-NEXT:    kshiftld $30, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2743,19 +2805,24 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    por %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm5<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3<br>
> +; SSE2-NEXT:    por %xmm5, %xmm3<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm3<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm3<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm3<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> -; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> +; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    xorl $3, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movd %xmm3, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB8_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
> @@ -2763,13 +2830,11 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE2-NEXT:  .LBB8_4: # %else2<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB8_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB8_4<br>
>  ; SSE2-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2784,6 +2849,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE4-NEXT:    movapd %xmm4, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3<br>
>  ; SSE4-NEXT:    movmskpd %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -2799,7 +2865,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB8_4<br>
>  ; SSE4-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $8, %xmm2, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm2, 1(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2811,6 +2877,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]<br>
>  ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4<br>
>  ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -2826,7 +2893,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB8_4<br>
>  ; AVX-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2838,6 +2905,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]<br>
>  ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB8_1<br>
> @@ -2852,7 +2920,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB8_4<br>
>  ; AVX512F-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2861,13 +2929,13 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [127,127]<br>
>  ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]<br>
>  ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> -; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -4642,29 +4710,8 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i32_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [127,127,127,127]<br>
> -; SSE2-NEXT:    movdqa %xmm5, %xmm6<br>
> -; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pandn %xmm5, %xmm6<br>
> -; SSE2-NEXT:    por %xmm0, %xmm6<br>
> -; SSE2-NEXT:    movdqa %xmm5, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> -; SSE2-NEXT:    pandn %xmm5, %xmm0<br>
> -; SSE2-NEXT:    por %xmm1, %xmm0<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168]<br>
> -; SSE2-NEXT:    movdqa %xmm0, %xmm5<br>
> -; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5<br>
> -; SSE2-NEXT:    pand %xmm5, %xmm0<br>
> -; SSE2-NEXT:    pandn %xmm1, %xmm5<br>
> -; SSE2-NEXT:    por %xmm0, %xmm5<br>
> -; SSE2-NEXT:    movdqa %xmm6, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm6<br>
> -; SSE2-NEXT:    pandn %xmm1, %xmm0<br>
> -; SSE2-NEXT:    por %xmm6, %xmm0<br>
> -; SSE2-NEXT:    packssdw %xmm5, %xmm0<br>
> +; SSE2-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE2-NEXT:    packsswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm1, %xmm3<br>
> @@ -4684,17 +4731,26 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB12_5<br>
>  ; SSE2-NEXT:  .LBB12_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    je .LBB12_8<br>
> +; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB12_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB12_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB12_11<br>
> +; SSE2-NEXT:    je .LBB12_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB12_13<br>
> -; SSE2-NEXT:  .LBB12_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB12_15<br>
>  ; SSE2-NEXT:  .LBB12_16: # %else14<br>
> @@ -4704,50 +4760,29 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB12_4<br>
>  ; SSE2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB12_6<br>
>  ; SSE2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB12_8<br>
> -; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB12_10<br>
> -; SSE2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB12_12<br>
> -; SSE2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB12_14<br>
> +; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    jmp .LBB12_8<br>
>  ; SSE2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB12_16<br>
>  ; SSE2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i32_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [127,127,127,127]<br>
> -; SSE4-NEXT:    pminsd %xmm5, %xmm0<br>
> -; SSE4-NEXT:    pminsd %xmm5, %xmm1<br>
> -; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [4294967168,4294967168,4294967168,4294967168]<br>
> -; SSE4-NEXT:    pmaxsd %xmm5, %xmm1<br>
> -; SSE4-NEXT:    pmaxsd %xmm5, %xmm0<br>
>  ; SSE4-NEXT:    packssdw %xmm1, %xmm0<br>
> +; SSE4-NEXT:    packsswb %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm1, %xmm3<br>
> @@ -4786,43 +4821,38 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB12_4<br>
>  ; SSE4-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB12_6<br>
>  ; SSE4-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB12_8<br>
>  ; SSE4-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB12_10<br>
>  ; SSE4-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB12_12<br>
>  ; SSE4-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB12_14<br>
>  ; SSE4-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB12_16<br>
>  ; SSE4-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i32_v8i8:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [127,127,127,127]<br>
> -; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm3<br>
> -; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0<br>
> -; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4294967168,4294967168,4294967168,4294967168]<br>
> -; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2<br>
> -; AVX1-NEXT:    vpackssdw %xmm0, %xmm2, %xmm0<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2<br>
> +; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2<br>
> @@ -4861,43 +4891,40 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB12_4<br>
>  ; AVX1-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB12_6<br>
>  ; AVX1-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB12_8<br>
>  ; AVX1-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB12_10<br>
>  ; AVX1-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB12_12<br>
>  ; AVX1-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB12_14<br>
>  ; AVX1-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB12_16<br>
>  ; AVX1-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v8i32_v8i8:<br>
>  ; AVX2:       # %bb.0:<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [127,127,127,127,127,127,127,127]<br>
> -; AVX2-NEXT:    vpminsd %ymm3, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]<br>
> -; AVX2-NEXT:    vpmaxsd %ymm3, %ymm0, %ymm0<br>
>  ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3<br>
>  ; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -4932,31 +4959,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB12_4<br>
>  ; AVX2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB12_6<br>
>  ; AVX2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB12_8<br>
>  ; AVX2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB12_10<br>
>  ; AVX2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB12_12<br>
>  ; AVX2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB12_14<br>
>  ; AVX2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB12_16<br>
>  ; AVX2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -4968,7 +4995,7 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]<br>
>  ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB12_1<br>
> @@ -5001,31 +5028,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_4<br>
>  ; AVX512F-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_6<br>
>  ; AVX512F-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_8<br>
>  ; AVX512F-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_10<br>
>  ; AVX512F-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_12<br>
>  ; AVX512F-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_14<br>
>  ; AVX512F-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_16<br>
>  ; AVX512F-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -5033,14 +5060,13 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]<br>
>  ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]<br>
>  ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -5067,18 +5093,7 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE2-LABEL: truncstore_v4i32_v4i16:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [32767,32767,32767,32767]<br>
> -; SSE2-NEXT:    movdqa %xmm3, %xmm4<br>
> -; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4<br>
> -; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pandn %xmm3, %xmm4<br>
> -; SSE2-NEXT:    por %xmm0, %xmm4<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [4294934528,4294934528,4294934528,4294934528]<br>
> -; SSE2-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm4<br>
> -; SSE2-NEXT:    pandn %xmm3, %xmm0<br>
> -; SSE2-NEXT:    por %xmm4, %xmm0<br>
> +; SSE2-NEXT:    packssdw %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
> @@ -5101,25 +5116,24 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB13_4<br>
>  ; SSE2-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB13_6<br>
>  ; SSE2-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB13_8<br>
>  ; SSE2-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i32_v4i16:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE4-NEXT:    pminsd {{.*}}(%rip), %xmm0<br>
> -; SSE4-NEXT:    pmaxsd {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    packssdw %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -5141,92 +5155,52 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB13_4<br>
>  ; SSE4-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB13_6<br>
>  ; SSE4-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB13_8<br>
>  ; SSE4-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
> -; AVX1-LABEL: truncstore_v4i32_v4i16:<br>
> -; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpminsd {{.*}}(%rip), %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpmaxsd {{.*}}(%rip), %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
> -; AVX1-NEXT:    xorl $15, %eax<br>
> -; AVX1-NEXT:    testb $1, %al<br>
> -; AVX1-NEXT:    jne .LBB13_1<br>
> -; AVX1-NEXT:  # %bb.2: # %else<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    jne .LBB13_3<br>
> -; AVX1-NEXT:  .LBB13_4: # %else2<br>
> -; AVX1-NEXT:    testb $4, %al<br>
> -; AVX1-NEXT:    jne .LBB13_5<br>
> -; AVX1-NEXT:  .LBB13_6: # %else4<br>
> -; AVX1-NEXT:    testb $8, %al<br>
> -; AVX1-NEXT:    jne .LBB13_7<br>
> -; AVX1-NEXT:  .LBB13_8: # %else6<br>
> -; AVX1-NEXT:    retq<br>
> -; AVX1-NEXT:  .LBB13_1: # %cond.store<br>
> -; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> -; AVX1-NEXT:    testb $2, %al<br>
> -; AVX1-NEXT:    je .LBB13_4<br>
> -; AVX1-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> -; AVX1-NEXT:    testb $4, %al<br>
> -; AVX1-NEXT:    je .LBB13_6<br>
> -; AVX1-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> -; AVX1-NEXT:    testb $8, %al<br>
> -; AVX1-NEXT:    je .LBB13_8<br>
> -; AVX1-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> -; AVX1-NEXT:    retq<br>
> -;<br>
> -; AVX2-LABEL: truncstore_v4i32_v4i16:<br>
> -; AVX2:       # %bb.0:<br>
> -; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [32767,32767,32767,32767]<br>
> -; AVX2-NEXT:    vpminsd %xmm3, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [4294934528,4294934528,4294934528,4294934528]<br>
> -; AVX2-NEXT:    vpmaxsd %xmm3, %xmm0, %xmm0<br>
> -; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> -; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
> -; AVX2-NEXT:    xorl $15, %eax<br>
> -; AVX2-NEXT:    testb $1, %al<br>
> -; AVX2-NEXT:    jne .LBB13_1<br>
> -; AVX2-NEXT:  # %bb.2: # %else<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    jne .LBB13_3<br>
> -; AVX2-NEXT:  .LBB13_4: # %else2<br>
> -; AVX2-NEXT:    testb $4, %al<br>
> -; AVX2-NEXT:    jne .LBB13_5<br>
> -; AVX2-NEXT:  .LBB13_6: # %else4<br>
> -; AVX2-NEXT:    testb $8, %al<br>
> -; AVX2-NEXT:    jne .LBB13_7<br>
> -; AVX2-NEXT:  .LBB13_8: # %else6<br>
> -; AVX2-NEXT:    retq<br>
> -; AVX2-NEXT:  .LBB13_1: # %cond.store<br>
> -; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> -; AVX2-NEXT:    testb $2, %al<br>
> -; AVX2-NEXT:    je .LBB13_4<br>
> -; AVX2-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> -; AVX2-NEXT:    testb $4, %al<br>
> -; AVX2-NEXT:    je .LBB13_6<br>
> -; AVX2-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> -; AVX2-NEXT:    testb $8, %al<br>
> -; AVX2-NEXT:    je .LBB13_8<br>
> -; AVX2-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> -; AVX2-NEXT:    retq<br>
> +; AVX-LABEL: truncstore_v4i32_v4i16:<br>
> +; AVX:       # %bb.0:<br>
> +; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> +; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0<br>
> +; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
> +; AVX-NEXT:    vmovmskps %xmm1, %eax<br>
> +; AVX-NEXT:    xorl $15, %eax<br>
> +; AVX-NEXT:    testb $1, %al<br>
> +; AVX-NEXT:    jne .LBB13_1<br>
> +; AVX-NEXT:  # %bb.2: # %else<br>
> +; AVX-NEXT:    testb $2, %al<br>
> +; AVX-NEXT:    jne .LBB13_3<br>
> +; AVX-NEXT:  .LBB13_4: # %else2<br>
> +; AVX-NEXT:    testb $4, %al<br>
> +; AVX-NEXT:    jne .LBB13_5<br>
> +; AVX-NEXT:  .LBB13_6: # %else4<br>
> +; AVX-NEXT:    testb $8, %al<br>
> +; AVX-NEXT:    jne .LBB13_7<br>
> +; AVX-NEXT:  .LBB13_8: # %else6<br>
> +; AVX-NEXT:    retq<br>
> +; AVX-NEXT:  .LBB13_1: # %cond.store<br>
> +; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> +; AVX-NEXT:    testb $2, %al<br>
> +; AVX-NEXT:    je .LBB13_4<br>
> +; AVX-NEXT:  .LBB13_3: # %cond.store1<br>
> +; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    testb $4, %al<br>
> +; AVX-NEXT:    je .LBB13_6<br>
> +; AVX-NEXT:  .LBB13_5: # %cond.store3<br>
> +; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
> +; AVX-NEXT:    testb $8, %al<br>
> +; AVX-NEXT:    je .LBB13_8<br>
> +; AVX-NEXT:  .LBB13_7: # %cond.store5<br>
> +; AVX-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
> +; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i16:<br>
>  ; AVX512F:       # %bb.0:<br>
> @@ -5236,6 +5210,7 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294934528,4294934528,4294934528,4294934528]<br>
>  ; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB13_1<br>
> @@ -5256,15 +5231,15 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_4<br>
>  ; AVX512F-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_6<br>
>  ; AVX512F-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_8<br>
>  ; AVX512F-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -5272,13 +5247,13 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]<br>
>  ; AVX512BW-NEXT:    vpminsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294934528,4294934528,4294934528,4294934528]<br>
>  ; AVX512BW-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -5310,45 +5285,48 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE2-NEXT:    pand %xmm4, %xmm0<br>
>  ; SSE2-NEXT:    pandn %xmm3, %xmm4<br>
>  ; SSE2-NEXT:    por %xmm0, %xmm4<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [4294967168,4294967168,4294967168,4294967168]<br>
> -; SSE2-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE2-NEXT:    pcmpgtd %xmm3, %xmm0<br>
> -; SSE2-NEXT:    pand %xmm0, %xmm4<br>
> -; SSE2-NEXT:    pandn %xmm3, %xmm0<br>
> -; SSE2-NEXT:    por %xmm4, %xmm0<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4294967168,4294967168,4294967168,4294967168]<br>
> +; SSE2-NEXT:    movdqa %xmm4, %xmm3<br>
> +; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pandn %xmm0, %xmm3<br>
> +; SSE2-NEXT:    por %xmm4, %xmm3<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm3<br>
> +; SSE2-NEXT:    packuswb %xmm3, %xmm3<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> -; SSE2-NEXT:    movmskps %xmm2, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movmskps %xmm2, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm3, %eax<br>
>  ; SSE2-NEXT:    jne .LBB14_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_3<br>
>  ; SSE2-NEXT:  .LBB14_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_5<br>
>  ; SSE2-NEXT:  .LBB14_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_7<br>
>  ; SSE2-NEXT:  .LBB14_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB14_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_4<br>
>  ; SSE2-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_6<br>
>  ; SSE2-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_8<br>
>  ; SSE2-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -5357,6 +5335,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE4-NEXT:    pminsd {{.*}}(%rip), %xmm0<br>
>  ; SSE4-NEXT:    pmaxsd {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -5378,15 +5357,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB14_4<br>
>  ; SSE4-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB14_6<br>
>  ; SSE4-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB14_8<br>
>  ; SSE4-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i32_v4i8:<br>
> @@ -5394,6 +5373,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpminsd {{.*}}(%rip), %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vpmaxsd {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -5415,15 +5395,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB14_4<br>
>  ; AVX1-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB14_6<br>
>  ; AVX1-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB14_8<br>
>  ; AVX1-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v4i32_v4i8:<br>
> @@ -5433,6 +5413,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX2-NEXT:    vpminsd %xmm3, %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [4294967168,4294967168,4294967168,4294967168]<br>
>  ; AVX2-NEXT:    vpmaxsd %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -5454,15 +5435,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB14_4<br>
>  ; AVX2-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB14_6<br>
>  ; AVX2-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB14_8<br>
>  ; AVX2-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i8:<br>
> @@ -5473,6 +5454,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168]<br>
>  ; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB14_1<br>
> @@ -5493,15 +5475,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_4<br>
>  ; AVX512F-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_6<br>
>  ; AVX512F-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_8<br>
>  ; AVX512F-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -5509,13 +5491,13 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [127,127,127,127]<br>
>  ; AVX512BW-NEXT:    vpminsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168]<br>
>  ; AVX512BW-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> -; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -7373,8 +7355,7 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE2-NEXT:    pminsw {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    pmaxsw {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    packsswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -7391,17 +7372,26 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB17_5<br>
>  ; SSE2-NEXT:  .LBB17_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    je .LBB17_8<br>
> +; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB17_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB17_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB17_11<br>
> +; SSE2-NEXT:    je .LBB17_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB17_13<br>
> -; SSE2-NEXT:  .LBB17_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB17_15<br>
>  ; SSE2-NEXT:  .LBB17_16: # %else14<br>
> @@ -7411,45 +7401,28 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB17_4<br>
>  ; SSE2-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB17_6<br>
>  ; SSE2-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB17_8<br>
> -; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB17_10<br>
> -; SSE2-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB17_12<br>
> -; SSE2-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB17_14<br>
> +; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    jmp .LBB17_8<br>
>  ; SSE2-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB17_16<br>
>  ; SSE2-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE4-NEXT:    pminsw {{.*}}(%rip), %xmm0<br>
> -; SSE4-NEXT:    pmaxsw {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    packsswb %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -7485,38 +7458,37 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB17_4<br>
>  ; SSE4-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB17_6<br>
>  ; SSE4-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB17_8<br>
>  ; SSE4-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB17_10<br>
>  ; SSE4-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB17_12<br>
>  ; SSE4-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB17_14<br>
>  ; SSE4-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB17_16<br>
>  ; SSE4-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v8i16_v8i8:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
> -; AVX-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0<br>
> -; AVX-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> @@ -7552,31 +7524,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB17_4<br>
>  ; AVX-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    testb $4, %al<br>
>  ; AVX-NEXT:    je .LBB17_6<br>
>  ; AVX-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    testb $8, %al<br>
>  ; AVX-NEXT:    je .LBB17_8<br>
>  ; AVX-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX-NEXT:    testb $16, %al<br>
>  ; AVX-NEXT:    je .LBB17_10<br>
>  ; AVX-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX-NEXT:    testb $32, %al<br>
>  ; AVX-NEXT:    je .LBB17_12<br>
>  ; AVX-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX-NEXT:    testb $64, %al<br>
>  ; AVX-NEXT:    je .LBB17_14<br>
>  ; AVX-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX-NEXT:    testb $-128, %al<br>
>  ; AVX-NEXT:    je .LBB17_16<br>
>  ; AVX-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v8i16_v8i8:<br>
> @@ -7588,6 +7560,7 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB17_1<br>
> @@ -7620,31 +7593,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_4<br>
>  ; AVX512F-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_6<br>
>  ; AVX512F-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_8<br>
>  ; AVX512F-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_10<br>
>  ; AVX512F-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_12<br>
>  ; AVX512F-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_14<br>
>  ; AVX512F-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_16<br>
>  ; AVX512F-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -7652,11 +7625,11 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll Wed Aug  7 09:24:26 2019<br>
> @@ -872,6 +872,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    por %xmm2, %xmm0<br>
>  ; SSE2-NEXT:    packuswb %xmm1, %xmm0<br>
>  ; SSE2-NEXT:    packuswb %xmm0, %xmm7<br>
> +; SSE2-NEXT:    packuswb %xmm7, %xmm7<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm0, %xmm5<br>
> @@ -891,17 +892,26 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB2_5<br>
>  ; SSE2-NEXT:  .LBB2_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    je .LBB2_8<br>
> +; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB2_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm7, %ecx<br>
> +; SSE2-NEXT:    je .LBB2_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB2_11<br>
> +; SSE2-NEXT:    je .LBB2_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB2_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm7, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB2_13<br>
> -; SSE2-NEXT:  .LBB2_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB2_15<br>
>  ; SSE2-NEXT:  .LBB2_16: # %else14<br>
> @@ -911,38 +921,22 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB2_4<br>
>  ; SSE2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB2_6<br>
>  ; SSE2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm7, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB2_8<br>
> -; SSE2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm7, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB2_10<br>
> -; SSE2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm7, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB2_12<br>
> -; SSE2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm7, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB2_14<br>
> +; SSE2-NEXT:    jne .LBB2_7<br>
> +; SSE2-NEXT:    jmp .LBB2_8<br>
>  ; SSE2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm7, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB2_16<br>
>  ; SSE2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm7, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i64_v8i8:<br>
> @@ -977,6 +971,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6<br>
>  ; SSE4-NEXT:    packusdw %xmm7, %xmm6<br>
>  ; SSE4-NEXT:    packusdw %xmm6, %xmm1<br>
> +; SSE4-NEXT:    packuswb %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pxor %xmm0, %xmm5<br>
> @@ -1015,31 +1010,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB2_4<br>
>  ; SSE4-NEXT:  .LBB2_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm1, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm1, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB2_6<br>
>  ; SSE4-NEXT:  .LBB2_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm1, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm1, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB2_8<br>
>  ; SSE4-NEXT:  .LBB2_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm1, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm1, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB2_10<br>
>  ; SSE4-NEXT:  .LBB2_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm1, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm1, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB2_12<br>
>  ; SSE4-NEXT:  .LBB2_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm1, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm1, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB2_14<br>
>  ; SSE4-NEXT:  .LBB2_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm1, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm1, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB2_16<br>
>  ; SSE4-NEXT:  .LBB2_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm1, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm1, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i64_v8i8:<br>
> @@ -1064,6 +1059,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX1-NEXT:    vblendvpd %xmm8, %xmm0, %xmm5, %xmm0<br>
>  ; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1<br>
> @@ -1102,31 +1098,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB2_4<br>
>  ; AVX1-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB2_6<br>
>  ; AVX1-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB2_8<br>
>  ; AVX1-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB2_10<br>
>  ; AVX1-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB2_12<br>
>  ; AVX1-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB2_14<br>
>  ; AVX1-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB2_16<br>
>  ; AVX1-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -1135,17 +1131,24 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [255,255,255,255]<br>
>  ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm5 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]<br>
> -; AVX2-NEXT:    vpxor %ymm5, %ymm1, %ymm6<br>
> +; AVX2-NEXT:    vpxor %ymm5, %ymm0, %ymm6<br>
>  ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [9223372036854776063,9223372036854776063,9223372036854776063,9223372036854776063]<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm7, %ymm6<br>
> -; AVX2-NEXT:    vblendvpd %ymm6, %ymm1, %ymm4, %ymm1<br>
> -; AVX2-NEXT:    vpxor %ymm5, %ymm0, %ymm5<br>
> +; AVX2-NEXT:    vblendvpd %ymm6, %ymm0, %ymm4, %ymm0<br>
> +; AVX2-NEXT:    vpxor %ymm5, %ymm1, %ymm5<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm7, %ymm5<br>
> -; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0<br>
> -; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]<br>
> -; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1<br>
> -; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1<br>
> +; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]<br>
> +; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4<br>
> +; AVX2-NEXT:    vpshufb %xmm5, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]<br>
> +; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -1180,31 +1183,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB2_4<br>
>  ; AVX2-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB2_6<br>
>  ; AVX2-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB2_8<br>
>  ; AVX2-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB2_10<br>
>  ; AVX2-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB2_12<br>
>  ; AVX2-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB2_14<br>
>  ; AVX2-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB2_16<br>
>  ; AVX2-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -1213,7 +1216,7 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpminuq {{.*}}(%rip){1to8}, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB2_1<br>
> @@ -1246,31 +1249,31 @@ define void @truncstore_v8i64_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_4<br>
>  ; AVX512F-NEXT:  .LBB2_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_6<br>
>  ; AVX512F-NEXT:  .LBB2_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_8<br>
>  ; AVX512F-NEXT:  .LBB2_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_10<br>
>  ; AVX512F-NEXT:  .LBB2_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_12<br>
>  ; AVX512F-NEXT:  .LBB2_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_14<br>
>  ; AVX512F-NEXT:  .LBB2_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB2_16<br>
>  ; AVX512F-NEXT:  .LBB2_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1504,7 +1507,7 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [65535,65535]<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm6<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm6<br>
>  ; SSE2-NEXT:    pxor %xmm5, %xmm6<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [9223372039002324991,9223372039002324991]<br>
>  ; SSE2-NEXT:    movdqa %xmm9, %xmm7<br>
> @@ -1515,22 +1518,26 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:    pand %xmm4, %xmm6<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]<br>
>  ; SSE2-NEXT:    por %xmm6, %xmm4<br>
> -; SSE2-NEXT:    pand %xmm4, %xmm1<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
>  ; SSE2-NEXT:    pandn %xmm8, %xmm4<br>
> -; SSE2-NEXT:    por %xmm1, %xmm4<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm5<br>
> -; SSE2-NEXT:    movdqa %xmm9, %xmm1<br>
> -; SSE2-NEXT:    pcmpgtd %xmm5, %xmm1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pxor %xmm1, %xmm5<br>
> +; SSE2-NEXT:    movdqa %xmm9, %xmm0<br>
> +; SSE2-NEXT:    pcmpgtd %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,0,2,2]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]<br>
>  ; SSE2-NEXT:    pand %xmm6, %xmm5<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm5, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> -; SSE2-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm4[0,2]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> +; SSE2-NEXT:    por %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3<br>
>  ; SSE2-NEXT:    movmskps %xmm3, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
> @@ -1548,45 +1555,49 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE2-NEXT:  .LBB4_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB4_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm1, %ecx<br>
> +; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB4_4<br>
>  ; SSE2-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm1, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB4_6<br>
>  ; SSE2-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm1, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB4_8<br>
>  ; SSE2-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm1, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i64_v4i16:<br>
>  ; SSE4:       # %bb.0:<br>
> -; SSE4-NEXT:    movdqa %xmm0, %xmm8<br>
> -; SSE4-NEXT:    pxor %xmm6, %xmm6<br>
> -; SSE4-NEXT:    movapd {{.*#+}} xmm5 = [65535,65535]<br>
> +; SSE4-NEXT:    movdqa %xmm0, %xmm5<br>
> +; SSE4-NEXT:    pxor %xmm8, %xmm8<br>
> +; SSE4-NEXT:    movapd {{.*#+}} xmm6 = [65535,65535]<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]<br>
> -; SSE4-NEXT:    movdqa %xmm1, %xmm3<br>
> +; SSE4-NEXT:    movdqa %xmm0, %xmm3<br>
>  ; SSE4-NEXT:    pxor %xmm7, %xmm3<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [9223372036854841343,9223372036854841343]<br>
>  ; SSE4-NEXT:    movdqa %xmm4, %xmm0<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> -; SSE4-NEXT:    movapd %xmm5, %xmm3<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3<br>
> -; SSE4-NEXT:    pxor %xmm8, %xmm7<br>
> +; SSE4-NEXT:    movapd %xmm6, %xmm3<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3<br>
> +; SSE4-NEXT:    pxor %xmm1, %xmm7<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm4<br>
>  ; SSE4-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm5<br>
> -; SSE4-NEXT:    packusdw %xmm3, %xmm5<br>
> -; SSE4-NEXT:    pcmpeqd %xmm2, %xmm6<br>
> -; SSE4-NEXT:    movmskps %xmm6, %eax<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> +; SSE4-NEXT:    pcmpeqd %xmm2, %xmm8<br>
> +; SSE4-NEXT:    movmskps %xmm8, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne .LBB4_1<br>
> @@ -1602,19 +1613,19 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; SSE4-NEXT:  .LBB4_8: # %else6<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB4_1: # %cond.store<br>
> -; SSE4-NEXT:    pextrw $0, %xmm5, (%rdi)<br>
> +; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB4_4<br>
>  ; SSE4-NEXT:  .LBB4_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm5, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB4_6<br>
>  ; SSE4-NEXT:  .LBB4_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm5, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB4_8<br>
>  ; SSE4-NEXT:  .LBB4_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm5, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i64_v4i16:<br>
> @@ -1629,8 +1640,12 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3<br>
>  ; AVX1-NEXT:    vmovapd {{.*#+}} xmm5 = [65535,65535]<br>
>  ; AVX1-NEXT:    vblendvpd %xmm3, %xmm6, %xmm5, %xmm3<br>
> +; AVX1-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
>  ; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm5, %xmm0<br>
> -; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -1653,15 +1668,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB4_4<br>
>  ; AVX1-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB4_6<br>
>  ; AVX1-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB4_8<br>
>  ; AVX1-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -1675,7 +1690,11 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm4<br>
>  ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0<br>
>  ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -1698,15 +1717,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB4_4<br>
>  ; AVX2-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB4_6<br>
>  ; AVX2-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB4_8<br>
>  ; AVX2-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -1717,7 +1736,7 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [65535,65535,65535,65535]<br>
>  ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB4_1<br>
> @@ -1738,15 +1757,15 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_4<br>
>  ; AVX512F-NEXT:  .LBB4_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_6<br>
>  ; AVX512F-NEXT:  .LBB4_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB4_8<br>
>  ; AVX512F-NEXT:  .LBB4_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -1755,12 +1774,11 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [65535,65535,65535,65535]<br>
> -; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [65535,65535,65535,65535]<br>
> +; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> +; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -1783,92 +1801,99 @@ define void @truncstore_v4i64_v4i16(<4 x<br>
>  define void @truncstore_v4i64_v4i8(<4 x i64> %x, <4 x i8>* %p, <4 x i32> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v4i64_v4i8:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> +; SSE2-NEXT:    pxor %xmm9, %xmm9<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [9223372039002259456,9223372039002259456]<br>
> -; SSE2-NEXT:    movdqa %xmm1, %xmm6<br>
> -; SSE2-NEXT:    pxor %xmm5, %xmm6<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [9223372039002259711,9223372039002259711]<br>
> -; SSE2-NEXT:    movdqa %xmm9, %xmm7<br>
> -; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm9, %xmm6<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm4, %xmm6<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [9223372039002259456,9223372039002259456]<br>
> +; SSE2-NEXT:    movdqa %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pxor %xmm6, %xmm4<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [9223372039002259711,9223372039002259711]<br>
> +; SSE2-NEXT:    movdqa %xmm10, %xmm7<br>
> +; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm5<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm6, %xmm4<br>
> -; SSE2-NEXT:    pand %xmm4, %xmm1<br>
> +; SSE2-NEXT:    por %xmm5, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
>  ; SSE2-NEXT:    pandn %xmm8, %xmm4<br>
> -; SSE2-NEXT:    por %xmm1, %xmm4<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm5<br>
> -; SSE2-NEXT:    movdqa %xmm9, %xmm1<br>
> -; SSE2-NEXT:    pcmpgtd %xmm5, %xmm1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm5<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm5, %xmm1<br>
> -; SSE2-NEXT:    pand %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pandn %xmm8, %xmm1<br>
> -; SSE2-NEXT:    por %xmm0, %xmm1<br>
> -; SSE2-NEXT:    packuswb %xmm4, %xmm1<br>
> -; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3<br>
> -; SSE2-NEXT:    movmskps %xmm3, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pxor %xmm1, %xmm6<br>
> +; SSE2-NEXT:    movdqa %xmm10, %xmm0<br>
> +; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,2,2]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm10, %xmm6<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm3, %xmm5<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm5, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm0, %xmm1<br>
> +; SSE2-NEXT:    pandn %xmm8, %xmm0<br>
> +; SSE2-NEXT:    por %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm8, %xmm0<br>
> +; SSE2-NEXT:    pand %xmm8, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9<br>
> +; SSE2-NEXT:    movmskps %xmm9, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm4, %eax<br>
>  ; SSE2-NEXT:    jne .LBB5_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_3<br>
>  ; SSE2-NEXT:  .LBB5_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_5<br>
>  ; SSE2-NEXT:  .LBB5_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB5_7<br>
>  ; SSE2-NEXT:  .LBB5_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB5_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm1, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_4<br>
>  ; SSE2-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm1, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_6<br>
>  ; SSE2-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm1, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB5_8<br>
>  ; SSE2-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm1, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v4i64_v4i8:<br>
>  ; SSE4:       # %bb.0:<br>
> -; SSE4-NEXT:    movdqa %xmm0, %xmm8<br>
> -; SSE4-NEXT:    pxor %xmm6, %xmm6<br>
> -; SSE4-NEXT:    movapd {{.*#+}} xmm5 = [255,255]<br>
> -; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]<br>
> -; SSE4-NEXT:    movdqa %xmm1, %xmm3<br>
> -; SSE4-NEXT:    pxor %xmm7, %xmm3<br>
> +; SSE4-NEXT:    movdqa %xmm0, %xmm3<br>
> +; SSE4-NEXT:    pxor %xmm8, %xmm8<br>
> +; SSE4-NEXT:    movapd {{.*#+}} xmm7 = [255,255]<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm6 = [9223372036854775808,9223372036854775808]<br>
> +; SSE4-NEXT:    movdqa %xmm0, %xmm5<br>
> +; SSE4-NEXT:    pxor %xmm6, %xmm5<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [9223372036854776063,9223372036854776063]<br>
>  ; SSE4-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0<br>
> -; SSE4-NEXT:    movapd %xmm5, %xmm3<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3<br>
> -; SSE4-NEXT:    pxor %xmm8, %xmm7<br>
> -; SSE4-NEXT:    pcmpgtq %xmm7, %xmm4<br>
> +; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0<br>
> +; SSE4-NEXT:    movapd %xmm7, %xmm5<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5<br>
> +; SSE4-NEXT:    pxor %xmm1, %xmm6<br>
> +; SSE4-NEXT:    pcmpgtq %xmm6, %xmm4<br>
>  ; SSE4-NEXT:    movdqa %xmm4, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm5<br>
> -; SSE4-NEXT:    packusdw %xmm3, %xmm5<br>
> -; SSE4-NEXT:    pcmpeqd %xmm2, %xmm6<br>
> -; SSE4-NEXT:    movmskps %xmm6, %eax<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm7<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; SSE4-NEXT:    pshufb %xmm0, %xmm7<br>
> +; SSE4-NEXT:    pshufb %xmm0, %xmm5<br>
> +; SSE4-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1],xmm5[2],xmm7[2],xmm5[3],xmm7[3]<br>
> +; SSE4-NEXT:    pcmpeqd %xmm2, %xmm8<br>
> +; SSE4-NEXT:    movmskps %xmm8, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne .LBB5_1<br>
> @@ -1888,15 +1913,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB5_4<br>
>  ; SSE4-NEXT:  .LBB5_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm5, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm5, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB5_6<br>
>  ; SSE4-NEXT:  .LBB5_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm5, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm5, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB5_8<br>
>  ; SSE4-NEXT:  .LBB5_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm5, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm5, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i64_v4i8:<br>
> @@ -1911,8 +1936,11 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm3<br>
>  ; AVX1-NEXT:    vmovapd {{.*#+}} xmm5 = [255,255]<br>
>  ; AVX1-NEXT:    vblendvpd %xmm3, %xmm6, %xmm5, %xmm3<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX1-NEXT:    vpshufb %xmm6, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm5, %xmm0<br>
> -; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpshufb %xmm6, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -1935,15 +1963,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB5_4<br>
>  ; AVX1-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB5_6<br>
>  ; AVX1-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB5_8<br>
>  ; AVX1-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -1957,7 +1985,10 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm5, %ymm4<br>
>  ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0<br>
>  ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -1980,15 +2011,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB5_4<br>
>  ; AVX2-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB5_6<br>
>  ; AVX2-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB5_8<br>
>  ; AVX2-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -1999,7 +2030,7 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [255,255,255,255]<br>
>  ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> -; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB5_1<br>
> @@ -2020,15 +2051,15 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_4<br>
>  ; AVX512F-NEXT:  .LBB5_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_6<br>
>  ; AVX512F-NEXT:  .LBB5_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB5_8<br>
>  ; AVX512F-NEXT:  .LBB5_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2037,12 +2068,11 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [255,255,255,255]<br>
> -; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> -; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [255,255,255,255]<br>
> +; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> +; AVX512BW-NEXT:    vpmovqb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2065,25 +2095,26 @@ define void @truncstore_v4i64_v4i8(<4 x<br>
>  define void @truncstore_v2i64_v2i32(<2 x i64> %x, <2 x i32>* %p, <2 x i64> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i32:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]<br>
> +; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259455,9223372039002259455]<br>
>  ; SSE2-NEXT:    movdqa %xmm4, %xmm5<br>
> -; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5<br>
> +; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm4<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2<br>
> -; SSE2-NEXT:    por %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> -; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
> +; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,2,2,3]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> +; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-NEXT:    xorl $3, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne .LBB6_1<br>
> @@ -2093,26 +2124,27 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE2-NEXT:  .LBB6_4: # %else2<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB6_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm2, (%rdi)<br>
> +; SSE2-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB6_4<br>
>  ; SSE2-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
>  ; SSE2-NEXT:    movd %xmm0, 4(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i32:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE4-NEXT:    movapd {{.*#+}} xmm3 = [4294967295,4294967295]<br>
> +; SSE4-NEXT:    pxor %xmm3, %xmm3<br>
> +; SSE4-NEXT:    movapd {{.*#+}} xmm4 = [4294967295,4294967295]<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]<br>
>  ; SSE4-NEXT:    pxor %xmm0, %xmm5<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372041149743103,9223372041149743103]<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3<br>
> -; SSE4-NEXT:    pcmpeqq %xmm1, %xmm4<br>
> -; SSE4-NEXT:    movmskpd %xmm4, %eax<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,2,2,3]<br>
> +; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3<br>
> +; SSE4-NEXT:    movmskpd %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne .LBB6_1<br>
> @@ -2122,11 +2154,11 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; SSE4-NEXT:  .LBB6_4: # %else2<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB6_1: # %cond.store<br>
> -; SSE4-NEXT:    movss %xmm3, (%rdi)<br>
> +; SSE4-NEXT:    movd %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB6_4<br>
>  ; SSE4-NEXT:  .LBB6_3: # %cond.store1<br>
> -; SSE4-NEXT:    extractps $2, %xmm3, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v2i64_v2i32:<br>
> @@ -2135,12 +2167,12 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX1-NEXT:    vmovapd {{.*#+}} xmm2 = [4294967295,4294967295]<br>
>  ; AVX1-NEXT:    vpxor {{.*}}(%rip), %xmm0, %xmm3<br>
>  ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [9223372041149743103,9223372041149743103]<br>
>  ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3<br>
>  ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
> -; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
> @@ -2151,12 +2183,12 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> +; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX2-NEXT:    vmovapd {{.*#+}} xmm2 = [4294967295,4294967295]<br>
>  ; AVX2-NEXT:    vpxor {{.*}}(%rip), %xmm0, %xmm3<br>
>  ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [9223372041149743103,9223372041149743103]<br>
>  ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3<br>
>  ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0<br>
> -; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero<br>
>  ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
> @@ -2166,11 +2198,11 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [4294967295,4294967295]<br>
>  ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX512F-NEXT:    kshiftlw $14, %k0, %k0<br>
> -; AVX512F-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
> @@ -2187,11 +2219,11 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [4294967295,4294967295]<br>
>  ; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2206,25 +2238,27 @@ define void @truncstore_v2i64_v2i32(<2 x<br>
>  define void @truncstore_v2i64_v2i16(<2 x i64> %x, <2 x i16>* %p, <2 x i64> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i16:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]<br>
> +; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002324991,9223372039002324991]<br>
>  ; SSE2-NEXT:    movdqa %xmm4, %xmm5<br>
> -; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5<br>
> +; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm4<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2<br>
> -; SSE2-NEXT:    por %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm0<br>
> -; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
> +; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,2,2,3]<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]<br>
> +; SSE2-NEXT:    pand %xmm2, %xmm1<br>
> +; SSE2-NEXT:    movmskpd %xmm1, %eax<br>
>  ; SSE2-NEXT:    xorl $3, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne .LBB7_1<br>
> @@ -2234,27 +2268,29 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE2-NEXT:  .LBB7_4: # %else2<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB7_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm2, %ecx<br>
> +; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB7_4<br>
>  ; SSE2-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm2, %eax<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 2(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i16:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    movdqa %xmm0, %xmm2<br>
> -; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
> -; SSE4-NEXT:    movapd {{.*#+}} xmm3 = [65535,65535]<br>
> +; SSE4-NEXT:    pxor %xmm3, %xmm3<br>
> +; SSE4-NEXT:    movapd {{.*#+}} xmm4 = [65535,65535]<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]<br>
>  ; SSE4-NEXT:    pxor %xmm0, %xmm5<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854841343,9223372036854841343]<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0<br>
> -; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3<br>
> -; SSE4-NEXT:    pcmpeqq %xmm1, %xmm4<br>
> -; SSE4-NEXT:    movmskpd %xmm4, %eax<br>
> +; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4<br>
> +; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,2,2,3]<br>
> +; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> +; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3<br>
> +; SSE4-NEXT:    movmskpd %xmm3, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
>  ; SSE4-NEXT:    testb $1, %al<br>
>  ; SSE4-NEXT:    jne .LBB7_1<br>
> @@ -2264,11 +2300,11 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; SSE4-NEXT:  .LBB7_4: # %else2<br>
>  ; SSE4-NEXT:    retq<br>
>  ; SSE4-NEXT:  .LBB7_1: # %cond.store<br>
> -; SSE4-NEXT:    pextrw $0, %xmm3, (%rdi)<br>
> +; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB7_4<br>
>  ; SSE4-NEXT:  .LBB7_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $4, %xmm3, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i16:<br>
> @@ -2279,6 +2315,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854841343,9223372036854841343]<br>
>  ; AVX-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4<br>
>  ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0<br>
> +; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -2294,7 +2332,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB7_4<br>
>  ; AVX-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i16:<br>
> @@ -2304,6 +2342,8 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [65535,65535]<br>
>  ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> +; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; AVX512F-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB7_1<br>
> @@ -2318,7 +2358,7 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB7_4<br>
>  ; AVX512F-NEXT:  .LBB7_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2327,12 +2367,12 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftld $30, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [65535,65535]<br>
>  ; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
>  ; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]<br>
> -; AVX512BW-NEXT:    kshiftld $30, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -2354,27 +2394,32 @@ define void @truncstore_v2i64_v2i16(<2 x<br>
>  define void @truncstore_v2i64_v2i8(<2 x i64> %x, <2 x i8>* %p, <2 x i64> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v2i64_v2i8:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm2<br>
> +; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [9223372039002259456,9223372039002259456]<br>
> +; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
>  ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259711,9223372039002259711]<br>
>  ; SSE2-NEXT:    movdqa %xmm4, %xmm5<br>
> -; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5<br>
> +; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5<br>
>  ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]<br>
> -; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]<br>
> -; SSE2-NEXT:    pand %xmm6, %xmm4<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[1,1,3,3]<br>
> -; SSE2-NEXT:    por %xmm4, %xmm2<br>
> +; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]<br>
> +; SSE2-NEXT:    pand %xmm6, %xmm3<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]<br>
> +; SSE2-NEXT:    por %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]<br>
>  ; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2<br>
> -; SSE2-NEXT:    por %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,0,3,2]<br>
> -; SSE2-NEXT:    pand %xmm3, %xmm0<br>
>  ; SSE2-NEXT:    movmskpd %xmm0, %eax<br>
>  ; SSE2-NEXT:    xorl $3, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    movd %xmm4, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB8_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
> @@ -2382,13 +2427,11 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE2-NEXT:  .LBB8_4: # %else2<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB8_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm2, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB8_4<br>
>  ; SSE2-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $4, %xmm2, %eax<br>
> -; SSE2-NEXT:    movb %al, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2401,6 +2444,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854776063,9223372036854776063]<br>
>  ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0<br>
>  ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm3 = xmm3[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm4<br>
>  ; SSE4-NEXT:    movmskpd %xmm4, %eax<br>
>  ; SSE4-NEXT:    xorl $3, %eax<br>
> @@ -2416,7 +2460,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB8_4<br>
>  ; SSE4-NEXT:  .LBB8_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $8, %xmm3, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm3, 1(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2427,6 +2471,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854776063,9223372036854776063]<br>
>  ; AVX-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4<br>
>  ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0<br>
> +; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vmovmskpd %xmm1, %eax<br>
>  ; AVX-NEXT:    xorl $3, %eax<br>
> @@ -2442,7 +2487,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB8_4<br>
>  ; AVX-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v2i64_v2i8:<br>
> @@ -2452,6 +2497,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [255,255]<br>
>  ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB8_1<br>
> @@ -2466,7 +2512,7 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB8_4<br>
>  ; AVX512F-NEXT:  .LBB8_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -2475,11 +2521,11 @@ define void @truncstore_v2i64_v2i8(<2 x<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0<br>
>  ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [255,255]<br>
>  ; AVX512BW-NEXT:    vpminuq %zmm1, %zmm0, %zmm0<br>
>  ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> -; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -4352,6 +4398,7 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    pandn %xmm9, %xmm6<br>
>  ; SSE2-NEXT:    por %xmm0, %xmm6<br>
>  ; SSE2-NEXT:    packuswb %xmm4, %xmm6<br>
> +; SSE2-NEXT:    packuswb %xmm6, %xmm6<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm3<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
> @@ -4371,17 +4418,26 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB12_5<br>
>  ; SSE2-NEXT:  .LBB12_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    je .LBB12_8<br>
> +; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB12_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm6, %ecx<br>
> +; SSE2-NEXT:    je .LBB12_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB12_11<br>
> +; SSE2-NEXT:    je .LBB12_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB12_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm6, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB12_13<br>
> -; SSE2-NEXT:  .LBB12_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB12_15<br>
>  ; SSE2-NEXT:  .LBB12_16: # %else14<br>
> @@ -4391,47 +4447,34 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB12_4<br>
>  ; SSE2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB12_6<br>
>  ; SSE2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm6, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB12_8<br>
> -; SSE2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm6, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB12_10<br>
> -; SSE2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm6, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB12_12<br>
> -; SSE2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm6, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB12_14<br>
> +; SSE2-NEXT:    jne .LBB12_7<br>
> +; SSE2-NEXT:    jmp .LBB12_8<br>
>  ; SSE2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm6, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB12_16<br>
>  ; SSE2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm6, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i32_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm4, %xmm4<br>
>  ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255]<br>
> -; SSE4-NEXT:    pminud %xmm5, %xmm1<br>
>  ; SSE4-NEXT:    pminud %xmm5, %xmm0<br>
> -; SSE4-NEXT:    packusdw %xmm1, %xmm0<br>
> +; SSE4-NEXT:    pminud %xmm5, %xmm1<br>
> +; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; SSE4-NEXT:    pshufb %xmm5, %xmm1<br>
> +; SSE4-NEXT:    pshufb %xmm5, %xmm0<br>
> +; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm1, %xmm3<br>
> @@ -4470,40 +4513,43 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB12_4<br>
>  ; SSE4-NEXT:  .LBB12_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB12_6<br>
>  ; SSE4-NEXT:  .LBB12_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB12_8<br>
>  ; SSE4-NEXT:  .LBB12_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB12_10<br>
>  ; SSE4-NEXT:  .LBB12_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB12_12<br>
>  ; SSE4-NEXT:  .LBB12_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB12_14<br>
>  ; SSE4-NEXT:  .LBB12_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB12_16<br>
>  ; SSE4-NEXT:  .LBB12_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v8i32_v8i8:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,255,255,255]<br>
> -; AVX1-NEXT:    vpminud %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:    vpminud %xmm3, %xmm0, %xmm0<br>
> -; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [255,255,255,255]<br>
> +; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm3<br>
> +; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0<br>
> +; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2<br>
> +; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]<br>
>  ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2<br>
>  ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2<br>
> @@ -4542,31 +4588,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB12_4<br>
>  ; AVX1-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB12_6<br>
>  ; AVX1-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB12_8<br>
>  ; AVX1-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    testb $16, %al<br>
>  ; AVX1-NEXT:    je .LBB12_10<br>
>  ; AVX1-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $32, %al<br>
>  ; AVX1-NEXT:    je .LBB12_12<br>
>  ; AVX1-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX1-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX1-NEXT:    testb $64, %al<br>
>  ; AVX1-NEXT:    je .LBB12_14<br>
>  ; AVX1-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    testb $-128, %al<br>
>  ; AVX1-NEXT:    je .LBB12_16<br>
>  ; AVX1-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX1-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX1-NEXT:    vzeroupper<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
> @@ -4576,7 +4622,10 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255]<br>
>  ; AVX2-NEXT:    vpminud %ymm3, %ymm0, %ymm0<br>
>  ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3<br>
> -; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u><br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3<br>
> +; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]<br>
>  ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1<br>
>  ; AVX2-NEXT:    vmovmskps %ymm1, %eax<br>
>  ; AVX2-NEXT:    notl %eax<br>
> @@ -4611,31 +4660,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB12_4<br>
>  ; AVX2-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB12_6<br>
>  ; AVX2-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB12_8<br>
>  ; AVX2-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    testb $16, %al<br>
>  ; AVX2-NEXT:    je .LBB12_10<br>
>  ; AVX2-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $32, %al<br>
>  ; AVX2-NEXT:    je .LBB12_12<br>
>  ; AVX2-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX2-NEXT:    testb $64, %al<br>
>  ; AVX2-NEXT:    je .LBB12_14<br>
>  ; AVX2-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    testb $-128, %al<br>
>  ; AVX2-NEXT:    je .LBB12_16<br>
>  ; AVX2-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX2-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX2-NEXT:    vzeroupper<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
> @@ -4645,7 +4694,7 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]<br>
>  ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0<br>
> +; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB12_1<br>
> @@ -4678,31 +4727,31 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_4<br>
>  ; AVX512F-NEXT:  .LBB12_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_6<br>
>  ; AVX512F-NEXT:  .LBB12_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_8<br>
>  ; AVX512F-NEXT:  .LBB12_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_10<br>
>  ; AVX512F-NEXT:  .LBB12_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_12<br>
>  ; AVX512F-NEXT:  .LBB12_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_14<br>
>  ; AVX512F-NEXT:  .LBB12_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB12_16<br>
>  ; AVX512F-NEXT:  .LBB12_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -4710,12 +4759,11 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]<br>
> -; AVX512BW-NEXT:    vpminud %ymm1, %ymm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0<br>
> -; AVX512BW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]<br>
> +; AVX512BW-NEXT:    vpminud %ymm1, %ymm0, %ymm0<br>
> +; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -4738,16 +4786,19 @@ define void @truncstore_v8i32_v8i8(<8 x<br>
>  define void @truncstore_v4i32_v4i16(<4 x i32> %x, <4 x i16>* %p, <4 x i32> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v4i32_v4i16:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm4<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147549183,2147549183,2147549183,2147549183]<br>
> -; SSE2-NEXT:    pcmpgtd %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2<br>
> -; SSE2-NEXT:    por %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3<br>
> -; SSE2-NEXT:    movmskps %xmm3, %eax<br>
> +; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]<br>
> +; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]<br>
> +; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[0,2,2,3,4,5,6,7]<br>
> +; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE2-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE2-NEXT:    xorl $15, %eax<br>
>  ; SSE2-NEXT:    testb $1, %al<br>
>  ; SSE2-NEXT:    jne .LBB13_1<br>
> @@ -4763,22 +4814,22 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE2-NEXT:  .LBB13_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB13_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm2, %ecx<br>
> +; SSE2-NEXT:    movd %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, (%rdi)<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB13_4<br>
>  ; SSE2-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm2, %ecx<br>
> +; SSE2-NEXT:    pextrw $1, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB13_6<br>
>  ; SSE2-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm2, %ecx<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movw %cx, 4(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
>  ; SSE2-NEXT:    je .LBB13_8<br>
>  ; SSE2-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm2, %eax<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %eax<br>
>  ; SSE2-NEXT:    movw %ax, 6(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -4786,6 +4837,7 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE4-NEXT:    pminud {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    packusdw %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -4807,21 +4859,22 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB13_4<br>
>  ; SSE4-NEXT:  .LBB13_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrw $2, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB13_6<br>
>  ; SSE4-NEXT:  .LBB13_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrw $4, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB13_8<br>
>  ; SSE4-NEXT:  .LBB13_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrw $6, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i32_v4i16:<br>
>  ; AVX1:       # %bb.0:<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpminud {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -4843,15 +4896,15 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB13_4<br>
>  ; AVX1-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB13_6<br>
>  ; AVX1-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB13_8<br>
>  ; AVX1-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v4i32_v4i16:<br>
> @@ -4859,6 +4912,7 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [65535,65535,65535,65535]<br>
>  ; AVX2-NEXT:    vpminud %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -4880,15 +4934,15 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB13_4<br>
>  ; AVX2-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB13_6<br>
>  ; AVX2-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB13_8<br>
>  ; AVX2-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i16:<br>
> @@ -4897,6 +4951,7 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]<br>
>  ; AVX512F-NEXT:    vpminud %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB13_1<br>
> @@ -4917,15 +4972,15 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_4<br>
>  ; AVX512F-NEXT:  .LBB13_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrw $2, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_6<br>
>  ; AVX512F-NEXT:  .LBB13_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrw $4, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB13_8<br>
>  ; AVX512F-NEXT:  .LBB13_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrw $6, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -4933,11 +4988,11 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]<br>
>  ; AVX512BW-NEXT:    vpminud %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    kshiftld $28, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -4959,47 +5014,50 @@ define void @truncstore_v4i32_v4i16(<4 x<br>
>  define void @truncstore_v4i32_v4i8(<4 x i32> %x, <4 x i8>* %p, <4 x i32> %mask) {<br>
>  ; SSE2-LABEL: truncstore_v4i32_v4i8:<br>
>  ; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm3<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]<br>
> -; SSE2-NEXT:    pxor %xmm0, %xmm4<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483903,2147483903,2147483903,2147483903]<br>
> -; SSE2-NEXT:    pcmpgtd %xmm4, %xmm2<br>
> -; SSE2-NEXT:    pand %xmm2, %xmm0<br>
> -; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2<br>
> -; SSE2-NEXT:    por %xmm0, %xmm2<br>
> -; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3<br>
> -; SSE2-NEXT:    movmskps %xmm3, %eax<br>
> -; SSE2-NEXT:    xorl $15, %eax<br>
> -; SSE2-NEXT:    testb $1, %al<br>
> +; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]<br>
> +; SSE2-NEXT:    pxor %xmm0, %xmm3<br>
> +; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483903,2147483903,2147483903,2147483903]<br>
> +; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4<br>
> +; SSE2-NEXT:    pand %xmm4, %xmm0<br>
> +; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    por %xmm0, %xmm4<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    packuswb %xmm4, %xmm4<br>
> +; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2<br>
> +; SSE2-NEXT:    movmskps %xmm2, %ecx<br>
> +; SSE2-NEXT:    xorl $15, %ecx<br>
> +; SSE2-NEXT:    testb $1, %cl<br>
> +; SSE2-NEXT:    movd %xmm4, %eax<br>
>  ; SSE2-NEXT:    jne .LBB14_1<br>
>  ; SSE2-NEXT:  # %bb.2: # %else<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_3<br>
>  ; SSE2-NEXT:  .LBB14_4: # %else2<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_5<br>
>  ; SSE2-NEXT:  .LBB14_6: # %else4<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    jne .LBB14_7<br>
>  ; SSE2-NEXT:  .LBB14_8: # %else6<br>
>  ; SSE2-NEXT:    retq<br>
>  ; SSE2-NEXT:  .LBB14_1: # %cond.store<br>
> -; SSE2-NEXT:    movd %xmm2, %ecx<br>
> -; SSE2-NEXT:    movb %cl, (%rdi)<br>
> -; SSE2-NEXT:    testb $2, %al<br>
> +; SSE2-NEXT:    movb %al, (%rdi)<br>
> +; SSE2-NEXT:    testb $2, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_4<br>
>  ; SSE2-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE2-NEXT:    pextrw $2, %xmm2, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> -; SSE2-NEXT:    testb $4, %al<br>
> +; SSE2-NEXT:    movb %ah, 1(%rdi)<br>
> +; SSE2-NEXT:    testb $4, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_6<br>
>  ; SSE2-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $4, %xmm2, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> -; SSE2-NEXT:    testb $8, %al<br>
> +; SSE2-NEXT:    movl %eax, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
> +; SSE2-NEXT:    testb $8, %cl<br>
>  ; SSE2-NEXT:    je .LBB14_8<br>
>  ; SSE2-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $6, %xmm2, %eax<br>
> +; SSE2-NEXT:    shrl $24, %eax<br>
>  ; SSE2-NEXT:    movb %al, 3(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
> @@ -5007,6 +5065,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE4-NEXT:    pminud {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    movmskps %xmm2, %eax<br>
>  ; SSE4-NEXT:    xorl $15, %eax<br>
> @@ -5028,21 +5087,22 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB14_4<br>
>  ; SSE4-NEXT:  .LBB14_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB14_6<br>
>  ; SSE4-NEXT:  .LBB14_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB14_8<br>
>  ; SSE4-NEXT:  .LBB14_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX1-LABEL: truncstore_v4i32_v4i8:<br>
>  ; AVX1:       # %bb.0:<br>
>  ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX1-NEXT:    vpminud {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX1-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX1-NEXT:    xorl $15, %eax<br>
> @@ -5064,15 +5124,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX1-NEXT:    testb $2, %al<br>
>  ; AVX1-NEXT:    je .LBB14_4<br>
>  ; AVX1-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX1-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX1-NEXT:    testb $4, %al<br>
>  ; AVX1-NEXT:    je .LBB14_6<br>
>  ; AVX1-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX1-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX1-NEXT:    testb $8, %al<br>
>  ; AVX1-NEXT:    je .LBB14_8<br>
>  ; AVX1-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX1-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX1-NEXT:    retq<br>
>  ;<br>
>  ; AVX2-LABEL: truncstore_v4i32_v4i8:<br>
> @@ -5080,6 +5140,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [255,255,255,255]<br>
>  ; AVX2-NEXT:    vpminud %xmm3, %xmm0, %xmm0<br>
> +; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1<br>
>  ; AVX2-NEXT:    vmovmskps %xmm1, %eax<br>
>  ; AVX2-NEXT:    xorl $15, %eax<br>
> @@ -5101,15 +5162,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX2-NEXT:    testb $2, %al<br>
>  ; AVX2-NEXT:    je .LBB14_4<br>
>  ; AVX2-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX2-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX2-NEXT:    testb $4, %al<br>
>  ; AVX2-NEXT:    je .LBB14_6<br>
>  ; AVX2-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX2-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX2-NEXT:    testb $8, %al<br>
>  ; AVX2-NEXT:    je .LBB14_8<br>
>  ; AVX2-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX2-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX2-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v4i32_v4i8:<br>
> @@ -5118,6 +5179,7 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]<br>
>  ; AVX512F-NEXT:    vpminud %xmm1, %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB14_1<br>
> @@ -5138,15 +5200,15 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_4<br>
>  ; AVX512F-NEXT:  .LBB14_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_6<br>
>  ; AVX512F-NEXT:  .LBB14_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB14_8<br>
>  ; AVX512F-NEXT:  .LBB14_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -5154,11 +5216,11 @@ define void @truncstore_v4i32_v4i8(<4 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0<br>
> +; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> +; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]<br>
>  ; AVX512BW-NEXT:    vpminud %xmm1, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]<br>
> -; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0<br>
> -; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
> @@ -7041,10 +7103,10 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE2:       # %bb.0:<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm2<br>
> -; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm0<br>
> +; SSE2-NEXT:    pxor {{.*}}(%rip), %xmm0<br>
>  ; SSE2-NEXT:    pminsw {{.*}}(%rip), %xmm0<br>
> -; SSE2-NEXT:    pxor %xmm3, %xmm0<br>
> +; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; SSE2-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE2-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -7061,17 +7123,26 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    jne .LBB17_5<br>
>  ; SSE2-NEXT:  .LBB17_6: # %else4<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    je .LBB17_8<br>
> +; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> +; SSE2-NEXT:    shrl $24, %ecx<br>
> +; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_8: # %else6<br>
>  ; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    jne .LBB17_9<br>
> +; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> +; SSE2-NEXT:    je .LBB17_10<br>
> +; SSE2-NEXT:  # %bb.9: # %cond.store7<br>
> +; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_10: # %else8<br>
>  ; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    jne .LBB17_11<br>
> +; SSE2-NEXT:    je .LBB17_12<br>
> +; SSE2-NEXT:  # %bb.11: # %cond.store9<br>
> +; SSE2-NEXT:    movb %ch, 5(%rdi)<br>
>  ; SSE2-NEXT:  .LBB17_12: # %else10<br>
>  ; SSE2-NEXT:    testb $64, %al<br>
> +; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    jne .LBB17_13<br>
> -; SSE2-NEXT:  .LBB17_14: # %else12<br>
> +; SSE2-NEXT:  # %bb.14: # %else12<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    jne .LBB17_15<br>
>  ; SSE2-NEXT:  .LBB17_16: # %else14<br>
> @@ -7081,44 +7152,29 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE2-NEXT:    testb $2, %al<br>
>  ; SSE2-NEXT:    je .LBB17_4<br>
>  ; SSE2-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE2-NEXT:    shrl $16, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 1(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 1(%rdi)<br>
>  ; SSE2-NEXT:    testb $4, %al<br>
>  ; SSE2-NEXT:    je .LBB17_6<br>
>  ; SSE2-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE2-NEXT:    pextrw $2, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 2(%rdi)<br>
> +; SSE2-NEXT:    movl %ecx, %edx<br>
> +; SSE2-NEXT:    shrl $16, %edx<br>
> +; SSE2-NEXT:    movb %dl, 2(%rdi)<br>
>  ; SSE2-NEXT:    testb $8, %al<br>
> -; SSE2-NEXT:    je .LBB17_8<br>
> -; SSE2-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE2-NEXT:    pextrw $3, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 3(%rdi)<br>
> -; SSE2-NEXT:    testb $16, %al<br>
> -; SSE2-NEXT:    je .LBB17_10<br>
> -; SSE2-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE2-NEXT:    pextrw $4, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 4(%rdi)<br>
> -; SSE2-NEXT:    testb $32, %al<br>
> -; SSE2-NEXT:    je .LBB17_12<br>
> -; SSE2-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE2-NEXT:    pextrw $5, %xmm0, %ecx<br>
> -; SSE2-NEXT:    movb %cl, 5(%rdi)<br>
> -; SSE2-NEXT:    testb $64, %al<br>
> -; SSE2-NEXT:    je .LBB17_14<br>
> +; SSE2-NEXT:    jne .LBB17_7<br>
> +; SSE2-NEXT:    jmp .LBB17_8<br>
>  ; SSE2-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE2-NEXT:    pextrw $6, %xmm0, %ecx<br>
>  ; SSE2-NEXT:    movb %cl, 6(%rdi)<br>
>  ; SSE2-NEXT:    testb $-128, %al<br>
>  ; SSE2-NEXT:    je .LBB17_16<br>
>  ; SSE2-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE2-NEXT:    pextrw $7, %xmm0, %eax<br>
> -; SSE2-NEXT:    movb %al, 7(%rdi)<br>
> +; SSE2-NEXT:    movb %ch, 7(%rdi)<br>
>  ; SSE2-NEXT:    retq<br>
>  ;<br>
>  ; SSE4-LABEL: truncstore_v8i16_v8i8:<br>
>  ; SSE4:       # %bb.0:<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm2<br>
>  ; SSE4-NEXT:    pminuw {{.*}}(%rip), %xmm0<br>
> +; SSE4-NEXT:    packuswb %xmm0, %xmm0<br>
>  ; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2<br>
>  ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1<br>
>  ; SSE4-NEXT:    pxor %xmm2, %xmm1<br>
> @@ -7154,37 +7210,38 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; SSE4-NEXT:    testb $2, %al<br>
>  ; SSE4-NEXT:    je .LBB17_4<br>
>  ; SSE4-NEXT:  .LBB17_3: # %cond.store1<br>
> -; SSE4-NEXT:    pextrb $2, %xmm0, 1(%rdi)<br>
> +; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)<br>
>  ; SSE4-NEXT:    testb $4, %al<br>
>  ; SSE4-NEXT:    je .LBB17_6<br>
>  ; SSE4-NEXT:  .LBB17_5: # %cond.store3<br>
> -; SSE4-NEXT:    pextrb $4, %xmm0, 2(%rdi)<br>
> +; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)<br>
>  ; SSE4-NEXT:    testb $8, %al<br>
>  ; SSE4-NEXT:    je .LBB17_8<br>
>  ; SSE4-NEXT:  .LBB17_7: # %cond.store5<br>
> -; SSE4-NEXT:    pextrb $6, %xmm0, 3(%rdi)<br>
> +; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)<br>
>  ; SSE4-NEXT:    testb $16, %al<br>
>  ; SSE4-NEXT:    je .LBB17_10<br>
>  ; SSE4-NEXT:  .LBB17_9: # %cond.store7<br>
> -; SSE4-NEXT:    pextrb $8, %xmm0, 4(%rdi)<br>
> +; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)<br>
>  ; SSE4-NEXT:    testb $32, %al<br>
>  ; SSE4-NEXT:    je .LBB17_12<br>
>  ; SSE4-NEXT:  .LBB17_11: # %cond.store9<br>
> -; SSE4-NEXT:    pextrb $10, %xmm0, 5(%rdi)<br>
> +; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)<br>
>  ; SSE4-NEXT:    testb $64, %al<br>
>  ; SSE4-NEXT:    je .LBB17_14<br>
>  ; SSE4-NEXT:  .LBB17_13: # %cond.store11<br>
> -; SSE4-NEXT:    pextrb $12, %xmm0, 6(%rdi)<br>
> +; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)<br>
>  ; SSE4-NEXT:    testb $-128, %al<br>
>  ; SSE4-NEXT:    je .LBB17_16<br>
>  ; SSE4-NEXT:  .LBB17_15: # %cond.store13<br>
> -; SSE4-NEXT:    pextrb $14, %xmm0, 7(%rdi)<br>
> +; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)<br>
>  ; SSE4-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: truncstore_v8i16_v8i8:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2<br>
>  ; AVX-NEXT:    vpminuw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1<br>
>  ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2<br>
>  ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1<br>
> @@ -7220,31 +7277,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX-NEXT:    testb $2, %al<br>
>  ; AVX-NEXT:    je .LBB17_4<br>
>  ; AVX-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX-NEXT:    testb $4, %al<br>
>  ; AVX-NEXT:    je .LBB17_6<br>
>  ; AVX-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX-NEXT:    testb $8, %al<br>
>  ; AVX-NEXT:    je .LBB17_8<br>
>  ; AVX-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX-NEXT:    testb $16, %al<br>
>  ; AVX-NEXT:    je .LBB17_10<br>
>  ; AVX-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX-NEXT:    testb $32, %al<br>
>  ; AVX-NEXT:    je .LBB17_12<br>
>  ; AVX-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX-NEXT:    testb $64, %al<br>
>  ; AVX-NEXT:    je .LBB17_14<br>
>  ; AVX-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX-NEXT:    testb $-128, %al<br>
>  ; AVX-NEXT:    je .LBB17_16<br>
>  ; AVX-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; AVX512F-LABEL: truncstore_v8i16_v8i8:<br>
> @@ -7255,6 +7312,7 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1<br>
>  ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0<br>
>  ; AVX512F-NEXT:    vpminuw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX512F-NEXT:    kmovw %k0, %eax<br>
>  ; AVX512F-NEXT:    testb $1, %al<br>
>  ; AVX512F-NEXT:    jne .LBB17_1<br>
> @@ -7287,31 +7345,31 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512F-NEXT:    testb $2, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_4<br>
>  ; AVX512F-NEXT:  .LBB17_3: # %cond.store1<br>
> -; AVX512F-NEXT:    vpextrb $2, %xmm0, 1(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)<br>
>  ; AVX512F-NEXT:    testb $4, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_6<br>
>  ; AVX512F-NEXT:  .LBB17_5: # %cond.store3<br>
> -; AVX512F-NEXT:    vpextrb $4, %xmm0, 2(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)<br>
>  ; AVX512F-NEXT:    testb $8, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_8<br>
>  ; AVX512F-NEXT:  .LBB17_7: # %cond.store5<br>
> -; AVX512F-NEXT:    vpextrb $6, %xmm0, 3(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)<br>
>  ; AVX512F-NEXT:    testb $16, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_10<br>
>  ; AVX512F-NEXT:  .LBB17_9: # %cond.store7<br>
> -; AVX512F-NEXT:    vpextrb $8, %xmm0, 4(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)<br>
>  ; AVX512F-NEXT:    testb $32, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_12<br>
>  ; AVX512F-NEXT:  .LBB17_11: # %cond.store9<br>
> -; AVX512F-NEXT:    vpextrb $10, %xmm0, 5(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)<br>
>  ; AVX512F-NEXT:    testb $64, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_14<br>
>  ; AVX512F-NEXT:  .LBB17_13: # %cond.store11<br>
> -; AVX512F-NEXT:    vpextrb $12, %xmm0, 6(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)<br>
>  ; AVX512F-NEXT:    testb $-128, %al<br>
>  ; AVX512F-NEXT:    je .LBB17_16<br>
>  ; AVX512F-NEXT:  .LBB17_15: # %cond.store13<br>
> -; AVX512F-NEXT:    vpextrb $14, %xmm0, 7(%rdi)<br>
> +; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)<br>
>  ; AVX512F-NEXT:    vzeroupper<br>
>  ; AVX512F-NEXT:    retq<br>
>  ;<br>
> @@ -7319,10 +7377,10 @@ define void @truncstore_v8i16_v8i8(<8 x<br>
>  ; AVX512BW:       # %bb.0:<br>
>  ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1<br>
>  ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0<br>
> -; AVX512BW-NEXT:    vpminuw {{.*}}(%rip), %xmm0, %xmm0<br>
> -; AVX512BW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0<br>
>  ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1<br>
> +; AVX512BW-NEXT:    vpminuw {{.*}}(%rip), %xmm0, %xmm0<br>
> +; AVX512BW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0<br>
>  ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}<br>
>  ; AVX512BW-NEXT:    vzeroupper<br>
>  ; AVX512BW-NEXT:    retq<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/merge-consecutive-loads-256.ll Wed Aug  7 09:24:26 2019<br>
> @@ -676,18 +676,18 @@ define <16 x i16> @merge_16i16_i16_0uu3z<br>
>  define <2 x i8> @PR42846(<2 x i8>* %j, <2 x i8> %k) {<br>
>  ; AVX-LABEL: PR42846:<br>
>  ; AVX:       # %bb.0:<br>
> -; AVX-NEXT:    vmovdqa {{.*}}(%rip), %ymm1<br>
> -; AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero<br>
> -; AVX-NEXT:    vpextrw $0, %xmm1, (%rdi)<br>
> +; AVX-NEXT:    vmovdqa {{.*}}(%rip), %ymm0<br>
> +; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)<br>
> +; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; AVX-NEXT:    vzeroupper<br>
>  ; AVX-NEXT:    retq<br>
>  ;<br>
>  ; X32-AVX-LABEL: PR42846:<br>
>  ; X32-AVX:       # %bb.0:<br>
>  ; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X32-AVX-NEXT:    vmovdqa l, %ymm1<br>
> -; X32-AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero<br>
> -; X32-AVX-NEXT:    vpextrw $0, %xmm1, (%eax)<br>
> +; X32-AVX-NEXT:    vmovdqa l, %ymm0<br>
> +; X32-AVX-NEXT:    vpextrw $0, %xmm0, (%eax)<br>
> +; X32-AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0<br>
>  ; X32-AVX-NEXT:    vzeroupper<br>
>  ; X32-AVX-NEXT:    retl<br>
>    %t0 = load volatile <32 x i8>, <32 x i8>* @l, align 32<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/mmx-arg-passing-x86-64.ll Wed Aug  7 09:24:26 2019<br>
> @@ -22,13 +22,12 @@ define void @t3() nounwind  {<br>
>  define void @t4(x86_mmx %v1, x86_mmx %v2) nounwind  {<br>
>  ; X86-64-LABEL: t4:<br>
>  ; X86-64:       ## %bb.0:<br>
> -; X86-64-NEXT:    movdq2q %xmm1, %mm0<br>
> -; X86-64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
>  ; X86-64-NEXT:    movdq2q %xmm0, %mm0<br>
>  ; X86-64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X86-64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X86-64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X86-64-NEXT:    paddb %xmm1, %xmm0<br>
> +; X86-64-NEXT:    movdq2q %xmm1, %mm0<br>
> +; X86-64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> +; X86-64-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0<br>
> +; X86-64-NEXT:    paddb -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X86-64-NEXT:    movb $1, %al<br>
>  ; X86-64-NEXT:    jmp _pass_v8qi ## TAILCALL<br>
>    %v1a = bitcast x86_mmx %v1 to <8 x i8><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/mmx-arith.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-arith.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-arith.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/mmx-arith.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/mmx-arith.ll Wed Aug  7 09:24:26 2019<br>
> @@ -13,8 +13,8 @@ define void @test0(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    .cfi_offset %ebp, -8<br>
>  ; X32-NEXT:    movl %esp, %ebp<br>
>  ; X32-NEXT:    .cfi_def_cfa_register %ebp<br>
> -; X32-NEXT:    andl $-8, %esp<br>
> -; X32-NEXT:    subl $16, %esp<br>
> +; X32-NEXT:    andl $-16, %esp<br>
> +; X32-NEXT:    subl $48, %esp<br>
>  ; X32-NEXT:    movl 12(%ebp), %ecx<br>
>  ; X32-NEXT:    movl 8(%ebp), %eax<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> @@ -26,7 +26,7 @@ define void @test0(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    paddusb (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, {{[0-9]+}}(%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    movdqa {{[0-9]+}}(%esp), %xmm0<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X32-NEXT:    psubb %xmm1, %xmm0<br>
> @@ -36,37 +36,24 @@ define void @test0(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    psubusb (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, (%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; X32-NEXT:    movdqa (%esp), %xmm0<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X32-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; X32-NEXT:    pmullw %xmm0, %xmm1<br>
> -; X32-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]<br>
> -; X32-NEXT:    movdqa %xmm1, %xmm2<br>
> -; X32-NEXT:    pand %xmm0, %xmm2<br>
> -; X32-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X32-NEXT:    movq %xmm2, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X32-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]<br>
> -; X32-NEXT:    pand %xmm1, %xmm2<br>
> -; X32-NEXT:    movdqa %xmm2, %xmm1<br>
> +; X32-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; X32-NEXT:    pmullw %xmm1, %xmm0<br>
> +; X32-NEXT:    pand {{\.LCPI.*}}, %xmm0<br>
> +; X32-NEXT:    packuswb %xmm0, %xmm0<br>
> +; X32-NEXT:    movq %xmm0, (%eax)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X32-NEXT:    pand %xmm0, %xmm1<br>
> -; X32-NEXT:    packuswb %xmm0, %xmm1<br>
>  ; X32-NEXT:    movq %xmm1, (%eax)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    por %xmm1, %xmm0<br>
> +; X32-NEXT:    movq %xmm0, (%eax)<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; X32-NEXT:    por %xmm2, %xmm1<br>
> -; X32-NEXT:    movdqa %xmm1, %xmm2<br>
> -; X32-NEXT:    pand %xmm0, %xmm2<br>
> -; X32-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X32-NEXT:    movq %xmm2, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X32-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]<br>
> -; X32-NEXT:    pxor %xmm1, %xmm2<br>
> -; X32-NEXT:    pand %xmm0, %xmm2<br>
> -; X32-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X32-NEXT:    movq %xmm2, (%eax)<br>
> +; X32-NEXT:    pxor %xmm0, %xmm1<br>
> +; X32-NEXT:    movq %xmm1, (%eax)<br>
>  ; X32-NEXT:    emms<br>
>  ; X32-NEXT:    movl %ebp, %esp<br>
>  ; X32-NEXT:    popl %ebp<br>
> @@ -84,7 +71,7 @@ define void @test0(x86_mmx* %A, x86_mmx*<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    paddusb (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X64-NEXT:    psubb %xmm1, %xmm0<br>
> @@ -94,37 +81,24 @@ define void @test0(x86_mmx* %A, x86_mmx*<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    psubusb (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; X64-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X64-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; X64-NEXT:    pmullw %xmm0, %xmm1<br>
> -; X64-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]<br>
> -; X64-NEXT:    movdqa %xmm1, %xmm2<br>
> -; X64-NEXT:    pand %xmm0, %xmm2<br>
> -; X64-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X64-NEXT:    movq %xmm2, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X64-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]<br>
> -; X64-NEXT:    pand %xmm1, %xmm2<br>
> -; X64-NEXT:    movdqa %xmm2, %xmm1<br>
> +; X64-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]<br>
> +; X64-NEXT:    pmullw %xmm1, %xmm0<br>
> +; X64-NEXT:    pand {{.*}}(%rip), %xmm0<br>
> +; X64-NEXT:    packuswb %xmm0, %xmm0<br>
> +; X64-NEXT:    movq %xmm0, (%rdi)<br>
> +; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X64-NEXT:    pand %xmm0, %xmm1<br>
> -; X64-NEXT:    packuswb %xmm0, %xmm1<br>
>  ; X64-NEXT:    movq %xmm1, (%rdi)<br>
> +; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    por %xmm1, %xmm0<br>
> +; X64-NEXT:    movq %xmm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]<br>
> -; X64-NEXT:    por %xmm2, %xmm1<br>
> -; X64-NEXT:    movdqa %xmm1, %xmm2<br>
> -; X64-NEXT:    pand %xmm0, %xmm2<br>
> -; X64-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X64-NEXT:    movq %xmm2, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero<br>
> -; X64-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]<br>
> -; X64-NEXT:    pxor %xmm1, %xmm2<br>
> -; X64-NEXT:    pand %xmm0, %xmm2<br>
> -; X64-NEXT:    packuswb %xmm0, %xmm2<br>
> -; X64-NEXT:    movq %xmm2, (%rdi)<br>
> +; X64-NEXT:    pxor %xmm0, %xmm1<br>
> +; X64-NEXT:    movq %xmm1, (%rdi)<br>
>  ; X64-NEXT:    emms<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
> @@ -182,66 +156,56 @@ entry:<br>
>  define void @test1(x86_mmx* %A, x86_mmx* %B) {<br>
>  ; X32-LABEL: test1:<br>
>  ; X32:       # %bb.0: # %entry<br>
> -; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
>  ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X32-NEXT:    paddq %xmm0, %xmm1<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm0, (%eax)<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; X32-NEXT:    pmuludq %xmm1, %xmm0<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm1, (%eax)<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X32-NEXT:    andps %xmm0, %xmm1<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm0, (%eax)<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; X32-NEXT:    orps %xmm1, %xmm0<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm1, (%eax)<br>
> -; X32-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X32-NEXT:    xorps %xmm0, %xmm1<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm0, (%eax)<br>
> +; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> +; X32-NEXT:    paddd %xmm0, %xmm1<br>
> +; X32-NEXT:    movq %xmm1, (%ecx)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]<br>
> +; X32-NEXT:    pmuludq %xmm0, %xmm1<br>
> +; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,2,3]<br>
> +; X32-NEXT:    pmuludq %xmm0, %xmm2<br>
> +; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]<br>
> +; X32-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; X32-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]<br>
> +; X32-NEXT:    movq %xmm1, (%ecx)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    pand %xmm1, %xmm0<br>
> +; X32-NEXT:    movq %xmm0, (%ecx)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> +; X32-NEXT:    por %xmm0, %xmm1<br>
> +; X32-NEXT:    movq %xmm1, (%ecx)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    pxor %xmm1, %xmm0<br>
> +; X32-NEXT:    movq %xmm0, (%ecx)<br>
>  ; X32-NEXT:    emms<br>
>  ; X32-NEXT:    retl<br>
>  ;<br>
>  ; X64-LABEL: test1:<br>
>  ; X64:       # %bb.0: # %entry<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X64-NEXT:    paddq %xmm0, %xmm1<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; X64-NEXT:    movq %xmm0, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; X64-NEXT:    pmuludq %xmm1, %xmm0<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> +; X64-NEXT:    paddd %xmm0, %xmm1<br>
>  ; X64-NEXT:    movq %xmm1, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X64-NEXT:    pand %xmm0, %xmm1<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> -; X64-NEXT:    movq %xmm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; X64-NEXT:    por %xmm1, %xmm0<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]<br>
> +; X64-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]<br>
> +; X64-NEXT:    pmuludq %xmm0, %xmm1<br>
> +; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]<br>
> +; X64-NEXT:    pmuludq %xmm2, %xmm0<br>
> +; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; X64-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]<br>
>  ; X64-NEXT:    movq %xmm1, (%rdi)<br>
> +; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    pand %xmm1, %xmm0<br>
> +; X64-NEXT:    movq %xmm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,1,3]<br>
> -; X64-NEXT:    pxor %xmm0, %xmm1<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]<br>
> +; X64-NEXT:    por %xmm0, %xmm1<br>
> +; X64-NEXT:    movq %xmm1, (%rdi)<br>
> +; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    pxor %xmm1, %xmm0<br>
>  ; X64-NEXT:    movq %xmm0, (%rdi)<br>
>  ; X64-NEXT:    emms<br>
>  ; X64-NEXT:    retq<br>
> @@ -294,8 +258,8 @@ define void @test2(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    .cfi_offset %ebp, -8<br>
>  ; X32-NEXT:    movl %esp, %ebp<br>
>  ; X32-NEXT:    .cfi_def_cfa_register %ebp<br>
> -; X32-NEXT:    andl $-8, %esp<br>
> -; X32-NEXT:    subl $24, %esp<br>
> +; X32-NEXT:    andl $-16, %esp<br>
> +; X32-NEXT:    subl $64, %esp<br>
>  ; X32-NEXT:    movl 12(%ebp), %ecx<br>
>  ; X32-NEXT:    movl 8(%ebp), %eax<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> @@ -307,7 +271,7 @@ define void @test2(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    paddusw (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, {{[0-9]+}}(%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    movdqa {{[0-9]+}}(%esp), %xmm0<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X32-NEXT:    psubw %xmm1, %xmm0<br>
> @@ -317,40 +281,25 @@ define void @test2(x86_mmx* %A, x86_mmx*<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    psubusw (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, {{[0-9]+}}(%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    pmullw %xmm0, %xmm1<br>
> -; X32-NEXT:    movdq2q %xmm1, %mm0<br>
> -; X32-NEXT:    movq %xmm1, (%eax)<br>
> +; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    pmullw {{[0-9]+}}(%esp), %xmm0<br>
> +; X32-NEXT:    movdq2q %xmm0, %mm0<br>
> +; X32-NEXT:    movq %xmm0, (%eax)<br>
>  ; X32-NEXT:    pmulhw (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
>  ; X32-NEXT:    pmaddwd (%ecx), %mm0<br>
>  ; X32-NEXT:    movq %mm0, (%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
>  ; X32-NEXT:    movq %mm0, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]<br>
> -; X32-NEXT:    pand %xmm0, %xmm1<br>
> -; X32-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; X32-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm0, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> -; X32-NEXT:    por %xmm1, %xmm0<br>
> -; X32-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]<br>
> -; X32-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm1, (%eax)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X32-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]<br>
> -; X32-NEXT:    pxor %xmm0, %xmm1<br>
> -; X32-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; X32-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> -; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; X32-NEXT:    movq %xmm0, (%eax)<br>
> +; X32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    andps (%esp), %xmm0<br>
> +; X32-NEXT:    movlps %xmm0, (%eax)<br>
> +; X32-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero<br>
> +; X32-NEXT:    orps %xmm0, %xmm1<br>
> +; X32-NEXT:    movlps %xmm1, (%eax)<br>
> +; X32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> +; X32-NEXT:    xorps %xmm1, %xmm0<br>
> +; X32-NEXT:    movlps %xmm0, (%eax)<br>
>  ; X32-NEXT:    emms<br>
>  ; X32-NEXT:    movl %ebp, %esp<br>
>  ; X32-NEXT:    popl %ebp<br>
> @@ -368,7 +317,7 @@ define void @test2(x86_mmx* %A, x86_mmx*<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    paddusw (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
>  ; X64-NEXT:    psubw %xmm1, %xmm0<br>
> @@ -378,40 +327,25 @@ define void @test2(x86_mmx* %A, x86_mmx*<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    psubusw (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    pmullw %xmm0, %xmm1<br>
> -; X64-NEXT:    movdq2q %xmm1, %mm0<br>
> -; X64-NEXT:    movq %xmm1, (%rdi)<br>
> +; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    pmullw -{{[0-9]+}}(%rsp), %xmm0<br>
> +; X64-NEXT:    movdq2q %xmm0, %mm0<br>
> +; X64-NEXT:    movq %xmm0, (%rdi)<br>
>  ; X64-NEXT:    pmulhw (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
>  ; X64-NEXT:    pmaddwd (%rsi), %mm0<br>
>  ; X64-NEXT:    movq %mm0, -{{[0-9]+}}(%rsp)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
>  ; X64-NEXT:    movq %mm0, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]<br>
> -; X64-NEXT:    pand %xmm0, %xmm1<br>
> -; X64-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; X64-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; X64-NEXT:    movq %xmm0, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]<br>
> -; X64-NEXT:    por %xmm1, %xmm0<br>
> -; X64-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]<br>
> -; X64-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> -; X64-NEXT:    movq %xmm1, (%rdi)<br>
> -; X64-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero<br>
> -; X64-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]<br>
> -; X64-NEXT:    pxor %xmm0, %xmm1<br>
> -; X64-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]<br>
> -; X64-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]<br>
> -; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> -; X64-NEXT:    movq %xmm0, (%rdi)<br>
> +; X64-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    andps -{{[0-9]+}}(%rsp), %xmm0<br>
> +; X64-NEXT:    movlps %xmm0, (%rdi)<br>
> +; X64-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero<br>
> +; X64-NEXT:    orps %xmm0, %xmm1<br>
> +; X64-NEXT:    movlps %xmm1, (%rdi)<br>
> +; X64-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero<br>
> +; X64-NEXT:    xorps %xmm1, %xmm0<br>
> +; X64-NEXT:    movlps %xmm0, (%rdi)<br>
>  ; X64-NEXT:    emms<br>
>  ; X64-NEXT:    retq<br>
>  entry:<br>
> @@ -479,45 +413,34 @@ define <1 x i64> @test3(<1 x i64>* %a, <<br>
>  ; X32-LABEL: test3:<br>
>  ; X32:       # %bb.0: # %entry<br>
>  ; X32-NEXT:    pushl %ebp<br>
> -; X32-NEXT:    movl %esp, %ebp<br>
>  ; X32-NEXT:    pushl %ebx<br>
>  ; X32-NEXT:    pushl %edi<br>
>  ; X32-NEXT:    pushl %esi<br>
> -; X32-NEXT:    andl $-8, %esp<br>
> -; X32-NEXT:    subl $16, %esp<br>
> -; X32-NEXT:    cmpl $0, 16(%ebp)<br>
> +; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)<br>
>  ; X32-NEXT:    je .LBB3_1<br>
>  ; X32-NEXT:  # %bb.2: # %bb26.preheader<br>
> +; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
> +; X32-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
>  ; X32-NEXT:    xorl %ebx, %ebx<br>
>  ; X32-NEXT:    xorl %eax, %eax<br>
>  ; X32-NEXT:    xorl %edx, %edx<br>
>  ; X32-NEXT:    .p2align 4, 0x90<br>
>  ; X32-NEXT:  .LBB3_3: # %bb26<br>
>  ; X32-NEXT:    # =>This Inner Loop Header: Depth=1<br>
> -; X32-NEXT:    movl 8(%ebp), %ecx<br>
> -; X32-NEXT:    movl %ecx, %esi<br>
> -; X32-NEXT:    movl (%ecx,%ebx,8), %ecx<br>
> -; X32-NEXT:    movl 4(%esi,%ebx,8), %esi<br>
> -; X32-NEXT:    movl 12(%ebp), %edi<br>
> -; X32-NEXT:    addl (%edi,%ebx,8), %ecx<br>
> -; X32-NEXT:    adcl 4(%edi,%ebx,8), %esi<br>
> -; X32-NEXT:    addl %eax, %ecx<br>
> -; X32-NEXT:    movl %ecx, (%esp)<br>
> -; X32-NEXT:    adcl %edx, %esi<br>
> -; X32-NEXT:    movl %esi, {{[0-9]+}}(%esp)<br>
> -; X32-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero<br>
> -; X32-NEXT:    movd %xmm0, %eax<br>
> -; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,0,1]<br>
> -; X32-NEXT:    movd %xmm0, %edx<br>
> +; X32-NEXT:    movl (%edi,%ebx,8), %ebp<br>
> +; X32-NEXT:    movl 4(%edi,%ebx,8), %ecx<br>
> +; X32-NEXT:    addl (%esi,%ebx,8), %ebp<br>
> +; X32-NEXT:    adcl 4(%esi,%ebx,8), %ecx<br>
> +; X32-NEXT:    addl %ebp, %eax<br>
> +; X32-NEXT:    adcl %ecx, %edx<br>
>  ; X32-NEXT:    incl %ebx<br>
> -; X32-NEXT:    cmpl 16(%ebp), %ebx<br>
> +; X32-NEXT:    cmpl {{[0-9]+}}(%esp), %ebx<br>
>  ; X32-NEXT:    jb .LBB3_3<br>
>  ; X32-NEXT:    jmp .LBB3_4<br>
>  ; X32-NEXT:  .LBB3_1:<br>
>  ; X32-NEXT:    xorl %eax, %eax<br>
>  ; X32-NEXT:    xorl %edx, %edx<br>
>  ; X32-NEXT:  .LBB3_4: # %bb31<br>
> -; X32-NEXT:    leal -12(%ebp), %esp<br>
>  ; X32-NEXT:    popl %esi<br>
>  ; X32-NEXT:    popl %edi<br>
>  ; X32-NEXT:    popl %ebx<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/mmx-cvt.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-cvt.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mmx-cvt.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/mmx-cvt.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/mmx-cvt.ll Wed Aug  7 09:24:26 2019<br>
> @@ -296,8 +296,8 @@ define <4 x float> @sitofp_v2i32_v2f32(<<br>
>  ; X86:       # %bb.0:<br>
>  ; X86-NEXT:    pushl %ebp<br>
>  ; X86-NEXT:    movl %esp, %ebp<br>
> -; X86-NEXT:    andl $-8, %esp<br>
> -; X86-NEXT:    subl $8, %esp<br>
> +; X86-NEXT:    andl $-16, %esp<br>
> +; X86-NEXT:    subl $32, %esp<br>
>  ; X86-NEXT:    movl 8(%ebp), %eax<br>
>  ; X86-NEXT:    movq (%eax), %mm0<br>
>  ; X86-NEXT:    paddd %mm0, %mm0<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/mulvi32.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mulvi32.ll?rev=368183&r1=368182&r2=368183&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mulvi32.ll?rev=368183&r1=368182&r2=368183&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/mulvi32.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/mulvi32.ll Wed Aug  7 09:24:26 2019<br>
> @@ -7,36 +7,39 @@<br>
>  ; PR6399<br>
><br>
>  define <2 x i32> @_mul2xi32a(<2 x i32>, <2 x i32>) {<br>
> -; SSE-LABEL: _mul2xi32a:<br>
> -; SSE:       # %bb.0:<br>
> -; SSE-NEXT:    pmuludq %xmm1, %xmm0<br>
> -; SSE-NEXT:    retq<br>
> +; SSE2-LABEL: _mul2xi32a:<br>
> +; SSE2:       # %bb.0:<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]<br>
> +; SSE2-NEXT:    pmuludq %xmm1, %xmm0<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]<br>
> +; SSE2-NEXT:    pmuludq %xmm2, %xmm1<br>
> +; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]<br>
> +; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]<br>
> +; SSE2-NEXT:    retq<br>
> +;<br>
> +; SSE42-LABEL: _mul2xi32a:<br>
> +; SSE42:       # %bb.0:<br>
> +; SSE42-NEXT:    pmulld %xmm1, %xmm0<br>
> +; SSE42-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: _mul2xi32a:<br>
>  ; AVX:       # %bb.0:<br>
> -; AVX-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0<br>
> +; AVX-NEXT:    vpmulld %xmm1, %xmm0, %xmm0<br>
>  ; AVX-NEXT:    retq<br>
>    %r = mul <2 x i32> %0, %1<br>
>    ret <2 x i32> %r<br>
>  }<br>
><br>
>  define <2 x i32> @_mul2xi32b(<2 x i32>, <2 x i32>) {<br>
> -; SSE2-LABEL: _mul2xi32b:<br>
> -; SSE2:       # %bb.0:<br>
> -; SSE2-NEXT:    pmuludq %xmm1, %xmm0<br>
> -; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]<br>
> -; SSE2-NEXT:    retq<br>
> -;<br>
> -; SSE42-LABEL: _mul2xi32b:<br>
> -; SSE42:       # %bb.0:<br>
> -; SSE42-NEXT:    pmuludq %xmm1, %xmm0<br>
> -; SSE42-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
> -; SSE42-NEXT:    retq<br>
> +; SSE-LABEL: _mul2xi32b:<br>
> +; SSE:       # %bb.0:<br>
> +; SSE-NEXT:    pmuludq %xmm1, %xmm0<br>
> +; SSE-NEXT:    retq<br>
>  ;<br>
>  ; AVX-LABEL: _mul2xi32b:<br>
>  ; AVX:       # %bb.0:<br>
>  ; AVX-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0<br>
> -; AVX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
>  ; AVX-NEXT:    retq<br>
>    %factor0 = shufflevector <2 x i32> %0, <2 x i32> undef, <4 x i32> <i32 0, i32 undef, i32 2, i32 undef><br>
>    %factor1 = shufflevector <2 x i32> %1, <2 x i32> undef, <4 x i32> <i32 0, i32 undef, i32 2, i32 undef><br>
> @@ -153,8 +156,8 @@ define <4 x i64> @_mul4xi32toi64a(<4 x i<br>
>  ;<br>
>  ; AVX1-LABEL: _mul4xi32toi64a:<br>
>  ; AVX1:       # %bb.0:<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[2,2,3,3]<br>
> -; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,2,3,3]<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[2,1,3,3]<br>
> +; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[2,1,3,3]<br>
>  ; AVX1-NEXT:    vpmuludq %xmm2, %xmm3, %xmm2<br>
>  ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero<br>
>  ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>