<div dir="ltr"><div>I missed that initially, but it was discussed in the review and we addressed that with:</div><div><a href="https://reviews.llvm.org/D62506">https://reviews.llvm.org/D62506</a> / <a href="https://reviews.llvm.org/rL361815">https://reviews.llvm.org/rL361815</a></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 4, 2019 at 10:49 AM Philip Reames <<a href="mailto:listmail@philipreames.com">listmail@philipreames.com</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">I didn't check, but did you consider atomic and volatile stores? I<br>
don't think we can actually have 256 bit versions of either at the<br>
moment, so this is mostly a future proofing thing.<br>
<br>
Philip<br>
<br>
On 6/4/19 9:40 AM, Sanjay Patel via llvm-commits wrote:<br>
> Author: spatel<br>
> Date: Tue Jun 4 09:40:04 2019<br>
> New Revision: 362524<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=362524&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=362524&view=rev</a><br>
> Log:<br>
> [x86] split 256-bit store of concatenated vectors<br>
><br>
> This shows up as a side issue to the main problem for the AVX target example from PR37428:<br>
> <a href="https://bugs.llvm.org/show_bug.cgi?id=37428" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=37428</a> - <a href="https://godbolt.org/z/7tpRa3" rel="noreferrer" target="_blank">https://godbolt.org/z/7tpRa3</a><br>
><br>
> But as we can see in the pile of existing test diffs, it's actually a widespread problem<br>
> that affects any AVX or later target. Apart from a couple of oddballs, I think these are<br>
> all improvements for the reasons stated in the code comment: we do not want to enable YMM<br>
> unnecessarily (avoid vzeroupper and frequency throttling) and some cores split 256-bit<br>
> stores anyway.<br>
><br>
> We could say that MergeConsecutiveStores() is going overboard on some of these examples,<br>
> but that won't solve the problem completely. But that is a reason I'm proposing this as<br>
> a lowering rather than a combine: we will infinite loop fighting the merge code if we try<br>
> this earlier.<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D62498" rel="noreferrer" target="_blank">https://reviews.llvm.org/D62498</a><br>
><br>
> Modified:<br>
>Â Â Â llvm/trunk/lib/Target/X86/X86ISelLowering.cpp<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/avg.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/avx512-trunc.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/nontemporal-2.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/oddsubvector.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/shrink_vmul.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/vec_fptrunc.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-gep.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/vector-trunc.ll<br>
>Â Â Â llvm/trunk/test/CodeGen/X86/x86-interleaved-access.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=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)<br>
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jun 4 09:40:04 2019<br>
> @@ -1283,6 +1283,7 @@ X86TargetLowering::X86TargetLowering(con<br>
>    setOperationAction(ISD::SCALAR_TO_VECTOR,  VT, Custom);<br>
>    setOperationAction(ISD::INSERT_SUBVECTOR,  VT, Legal);<br>
>    setOperationAction(ISD::CONCAT_VECTORS,   VT, Custom);<br>
> +   setOperationAction(ISD::STORE,       VT, Custom);<br>
>Â Â Â }<br>
>Â <br>
>Â Â Â if (HasInt256)<br>
> @@ -21073,7 +21074,17 @@ static SDValue LowerStore(SDValue Op, co<br>
>Â Â if (St->isTruncatingStore())<br>
>Â Â Â return SDValue();<br>
>Â <br>
> +Â // If this is a 256-bit store of concatenated ops, we are better off splitting<br>
> +Â // that store into two 128-bit stores. This avoids spurious use of 256-bit ops<br>
> +Â // and each half can execute independently. Some cores would split the op into<br>
> +Â // halves anyway, so the concat (vinsertf128) is purely an extra op.<br>
>Â Â MVT StoreVT = StoredVal.getSimpleValueType();<br>
> +Â if (StoreVT.is256BitVector()) {<br>
> +Â Â if (StoredVal.getOpcode() != ISD::CONCAT_VECTORS || !StoredVal.hasOneUse())<br>
> +Â Â Â return SDValue();<br>
> +Â Â return split256BitStore(St, DAG);<br>
> +Â }<br>
> +<br>
>Â Â assert(StoreVT.isVector() && StoreVT.getSizeInBits() == 64 &&<br>
>Â Â Â Â Â Â "Unexpected VT");<br>
>Â Â if (DAG.getTargetLoweringInfo().getTypeAction(*DAG.getContext(), StoreVT) !=<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=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avg.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avg.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avg.ll Tue Jun 4 09:40:04 2019<br>
> @@ -102,11 +102,10 @@ define void @avg_v32i8(<32 x i8>* %a, <3<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm0<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i8:<br>
> @@ -267,8 +266,8 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX1-LABEL: avg_v48i8:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 16(%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqa 32(%rdi), %xmm4<br>
> +; AVX1-NEXT:Â Â vmovdqa 16(%rdi), %xmm4<br>
> +; AVX1-NEXT:Â Â vmovdqa 32(%rdi), %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm1[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm5 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm1[3,3,0,1]<br>
> @@ -279,10 +278,10 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm15 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm0[3,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm10 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
> +; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm11 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm0[1,1,2,3]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm14 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm12 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
> +; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm13 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm0 = xmm4[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill<br>
> @@ -297,52 +296,52 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm0<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm4<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 32(%rsi), %xmm3<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm4[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm3[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm5, %xmm13<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm4[3,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm5, %xmm12<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm3[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm5, %xmm6, %xmm11<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm4[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm5, %xmm6, %xmm10<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm3[1,1,2,3]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm6 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpaddd %xmm6, %xmm7, %xmm9<br>
> -; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm4, %xmm1, %xmm8<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm0[2,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm4, %xmm15, %xmm15<br>
> +; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm3, %xmm1, %xmm8<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm3, %xmm15, %xmm15<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm0[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm7, %xmm10, %xmm7<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm7, %xmm11, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm14, %xmm14<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm0, %xmm12, %xmm12<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm3[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm0, %xmm13, %xmm13<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm4[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm5, %xmm5 # 16-byte Folded Reload<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm3[3,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm4[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm6 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm6, %xmm6 # 16-byte Folded Reload<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm3[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm4[1,1,2,3]<br>
>Â ; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero<br>
>Â ; AVX1-NEXT:Â Â vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload<br>
> -; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero<br>
> -; AVX1-NEXT:Â Â vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm3, %xmm3 # 16-byte Folded Reload<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm4, %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm13, %xmm10<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm11, %xmm11<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm9, %xmm9<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm8, %xmm8<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm15, %xmm13<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm14, %xmm0<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm12, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm5, %xmm5<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm6, %xmm6<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero<br>
> +; AVX1-NEXT:Â Â vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4, %xmm4 # 16-byte Folded Reload<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm3, %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm12, %xmm11<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm10, %xmm10<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm9, %xmm9<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm15, %xmm12<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm7, %xmm7<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm14, %xmm0<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm13, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm4, %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm3, %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm1, %xmm3, %xmm1<br>
> @@ -353,13 +352,13 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm0, %xmm2, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm7, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrld $1, %xmm13, %xmm4<br>
> +; AVX1-NEXT:Â Â vpsrld $1, %xmm12, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm4, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm8, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpsrld $1, %xmm9, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm5, %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vpsrld $1, %xmm11, %xmm5<br>
> -; AVX1-NEXT:Â Â vpsrld $1, %xmm10, %xmm6<br>
> +; AVX1-NEXT:Â Â vpsrld $1, %xmm10, %xmm5<br>
> +; AVX1-NEXT:Â Â vpsrld $1, %xmm11, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm5, %xmm6, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]<br>
>Â ; AVX1-NEXT:Â Â vpand %xmm6, %xmm5, %xmm5<br>
> @@ -368,13 +367,12 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX1-NEXT:Â Â vpand %xmm6, %xmm2, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpand %xmm6, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
>Â ; AVX1-NEXT:Â Â vpand %xmm6, %xmm3, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpand %xmm6, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm4, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v48i8:<br>
> @@ -449,13 +447,12 @@ define void @avg_v48i8(<48 x i8>* %a, <4<br>
>Â ; AVX512F-NEXT:Â Â vmovdqa (%rdi), %xmm0<br>
>Â ; AVX512F-NEXT:Â Â vmovdqa 16(%rdi), %xmm1<br>
>Â ; AVX512F-NEXT:Â Â vmovdqa 32(%rdi), %xmm2<br>
> -; AVX512F-NEXT:Â Â vpavgb 16(%rsi), %xmm1, %xmm1<br>
>Â ; AVX512F-NEXT:Â Â vpavgb (%rsi), %xmm0, %xmm0<br>
> -; AVX512F-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:Â Â vpavgb 32(%rsi), %xmm2, %xmm1<br>
> +; AVX512F-NEXT:Â Â vpavgb 16(%rsi), %xmm1, %xmm1<br>
> +; AVX512F-NEXT:Â Â vpavgb 32(%rsi), %xmm2, %xmm2<br>
>Â ; AVX512F-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> -; AVX512F-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> -; AVX512F-NEXT:Â Â vzeroupper<br>
> +; AVX512F-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX512F-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
>Â ; AVX512F-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512BW-LABEL: avg_v48i8:<br>
> @@ -507,15 +504,14 @@ define void @avg_v64i8(<64 x i8>* %a, <6<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 32(%rsi), %xmm2<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 48(%rsi), %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpavgb 48(%rdi), %xmm3, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgb 32(%rdi), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm2, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb 48(%rdi), %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v64i8:<br>
> @@ -628,11 +624,10 @@ define void @avg_v16i16(<16 x i16>* %a,<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm0<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v16i16:<br>
> @@ -685,15 +680,14 @@ define void @avg_v32i16(<32 x i16>* %a,<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 32(%rsi), %xmm2<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 48(%rsi), %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpavgw 48(%rdi), %xmm3, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw 32(%rdi), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm2, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw 48(%rdi), %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i16:<br>
> @@ -834,11 +828,10 @@ define void @avg_v32i8_2(<32 x i8>* %a,<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rdi), %xmm0<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 16(%rsi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgb (%rsi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb 16(%rsi), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i8_2:<br>
> @@ -893,13 +886,12 @@ define void @avg_v64i8_2(<64 x i8>* %a,<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 48(%rsi), %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpavgb %xmm0, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpavgb %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpavgb %xmm2, %xmm2, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb %xmm3, %xmm3, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vpavgb %xmm3, %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v64i8_2:<br>
> @@ -1013,11 +1005,10 @@ define void @avg_v16i16_2(<16 x i16>* %a<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa (%rdi), %xmm0<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rsi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw (%rsi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rsi), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v16i16_2:<br>
> @@ -1070,15 +1061,14 @@ define void @avg_v32i16_2(<32 x i16>* %a<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 16(%rdi), %xmm1<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 32(%rdi), %xmm2<br>
>Â ; AVX1-NEXT:Â Â vmovdqa 48(%rdi), %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rsi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw (%rsi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpavgw 48(%rsi), %xmm3, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rsi), %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpavgw 32(%rsi), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm2, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw 48(%rsi), %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i16_2:<br>
> @@ -1206,11 +1196,10 @@ define void @avg_v32i8_const(<32 x i8>*<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovddup {{.*#+}} xmm0 = [7.9499288951273625E-275,7.9499288951273625E-275]<br>
>Â ; AVX1-NEXT:Â Â # xmm0 = mem[0,0]<br>
> -; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i8_const:<br>
> @@ -1258,15 +1247,14 @@ define void @avg_v64i8_const(<64 x i8>*<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovddup {{.*#+}} xmm0 = [7.9499288951273625E-275,7.9499288951273625E-275]<br>
>Â ; AVX1-NEXT:Â Â # xmm0 = mem[0,0]<br>
> -; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm2, %ymm1<br>
> -; AVX1-NEXT:Â Â vpavgb 48(%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpavgb 32(%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgb (%rdi), %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgb 16(%rdi), %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpavgb 32(%rdi), %xmm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpavgb 48(%rdi), %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v64i8_const:<br>
> @@ -1365,11 +1353,10 @@ define void @avg_v16i16_const(<16 x i16><br>
>Â ; AVX1-LABEL: avg_v16i16_const:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm0 = [0,1,2,3,4,5,6,7]<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v16i16_const:<br>
> @@ -1416,15 +1403,14 @@ define void @avg_v32i16_const(<32 x i16><br>
>Â ; AVX1-LABEL: avg_v32i16_const:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
>Â ; AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm0 = [0,1,2,3,4,5,6,7]<br>
> -; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm2, %ymm1<br>
> -; AVX1-NEXT:Â Â vpavgw 48(%rdi), %xmm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpavgw 32(%rdi), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vpavgw (%rdi), %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgw 16(%rdi), %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpavgw 32(%rdi), %xmm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpavgw 48(%rdi), %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: avg_v32i16_const:<br>
> @@ -1665,100 +1651,96 @@ define <512 x i8> @avg_v512i8_3(<512 x i<br>
>Â ; AVX1-NEXT:Â Â pushq %rbp<br>
>Â ; AVX1-NEXT:Â Â movq %rsp, %rbp<br>
>Â ; AVX1-NEXT:Â Â andq $-32, %rsp<br>
> -; AVX1-NEXT:Â Â subq $96, %rsp<br>
> +; AVX1-NEXT:Â Â subq $32, %rsp<br>
>Â ; AVX1-NEXT:Â Â movq %rdi, %rax<br>
> -; AVX1-NEXT:Â Â vpavgb 272(%rbp), %xmm0, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpavgb 288(%rbp), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm8, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill<br>
> -; AVX1-NEXT:Â Â vpavgb 304(%rbp), %xmm1, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 320(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm8, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, (%rsp) # 32-byte Spill<br>
> -; AVX1-NEXT:Â Â vpavgb 336(%rbp), %xmm2, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpavgb 352(%rbp), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm8, %ymm13<br>
> -; AVX1-NEXT:Â Â vpavgb 368(%rbp), %xmm3, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgb 384(%rbp), %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm8, %ymm14<br>
> -; AVX1-NEXT:Â Â vpavgb 400(%rbp), %xmm4, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vpavgb 416(%rbp), %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm8, %ymm15<br>
> -; AVX1-NEXT:Â Â vpavgb 432(%rbp), %xmm5, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm5, %xmm5<br>
> -; AVX1-NEXT:Â Â vpavgb 448(%rbp), %xmm5, %xmm5<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm8, %ymm12<br>
> -; AVX1-NEXT:Â Â vpavgb 464(%rbp), %xmm6, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm6, %xmm6<br>
> -; AVX1-NEXT:Â Â vpavgb 480(%rbp), %xmm6, %xmm6<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm8, %ymm6<br>
> -; AVX1-NEXT:Â Â vpavgb 496(%rbp), %xmm7, %xmm8<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vpavgb 512(%rbp), %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm8, %ymm7<br>
> -; AVX1-NEXT:Â Â vmovdqa 16(%rbp), %xmm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 32(%rbp), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 528(%rbp), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpavgb 544(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm8<br>
> -; AVX1-NEXT:Â Â vmovdqa 48(%rbp), %xmm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 64(%rbp), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 560(%rbp), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpavgb 576(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm9<br>
> -; AVX1-NEXT:Â Â vmovdqa 80(%rbp), %xmm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 96(%rbp), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 592(%rbp), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpavgb 608(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm10<br>
> -; AVX1-NEXT:Â Â vmovdqa 112(%rbp), %xmm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 128(%rbp), %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 624(%rbp), %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpavgb 640(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovdqa 144(%rbp), %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqa 160(%rbp), %xmm2<br>
> -; AVX1-NEXT:Â Â vpavgb 656(%rbp), %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpavgb 672(%rbp), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovdqa 176(%rbp), %xmm2<br>
> -; AVX1-NEXT:Â Â vmovdqa 192(%rbp), %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgb 688(%rbp), %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpavgb 704(%rbp), %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; AVX1-NEXT:Â Â vmovdqa 208(%rbp), %xmm3<br>
> -; AVX1-NEXT:Â Â vmovdqa 224(%rbp), %xmm4<br>
> -; AVX1-NEXT:Â Â vpavgb 720(%rbp), %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpavgb 736(%rbp), %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm3, %ymm3<br>
> -; AVX1-NEXT:Â Â vmovdqa 240(%rbp), %xmm4<br>
> -; AVX1-NEXT:Â Â vpavgb 752(%rbp), %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vmovdqa 256(%rbp), %xmm11<br>
> -; AVX1-NEXT:Â Â vpavgb 768(%rbp), %xmm11, %xmm5<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm4, %ymm4<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm4, 480(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, 448(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm2, 416(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, 384(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, 352(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm10, 320(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm9, 288(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm8, 256(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm7, 224(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm6, 192(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm12, 160(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm15, 128(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm14, 96(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm13, 64(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps (%rsp), %ymm0 # 32-byte Reload<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 256(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 768(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 496(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 240(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 752(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 480(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 224(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 736(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 464(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 208(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 720(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 448(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 192(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 704(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 432(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 176(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 688(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 416(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 160(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 672(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 400(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 144(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 656(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 384(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 128(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 640(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 368(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 112(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 624(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 352(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 96(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 608(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 336(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 80(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 592(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 320(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 64(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 576(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 304(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 48(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 560(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 288(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 32(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 544(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 272(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa 16(%rbp), %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 528(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 256(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm7, %xmm8<br>
> +; AVX1-NEXT:Â Â vpavgb 512(%rbp), %xmm8, %xmm8<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 240(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 496(%rbp), %xmm7, %xmm7<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm7, 224(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm6, %xmm7<br>
> +; AVX1-NEXT:Â Â vpavgb 480(%rbp), %xmm7, %xmm7<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm7, 208(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 464(%rbp), %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm6, 192(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm5, %xmm6<br>
> +; AVX1-NEXT:Â Â vpavgb 448(%rbp), %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm6, 176(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 432(%rbp), %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm5, 160(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm4, %xmm5<br>
> +; AVX1-NEXT:Â Â vpavgb 416(%rbp), %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm5, 144(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 400(%rbp), %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 128(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm3, %xmm4<br>
> +; AVX1-NEXT:Â Â vpavgb 384(%rbp), %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 112(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 368(%rbp), %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 96(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm3<br>
> +; AVX1-NEXT:Â Â vpavgb 352(%rbp), %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 80(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 336(%rbp), %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 64(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> +; AVX1-NEXT:Â Â vpavgb 320(%rbp), %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 304(%rbp), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpavgb 288(%rbp), %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vpavgb 272(%rbp), %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm0, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â movq %rbp, %rsp<br>
>Â ; AVX1-NEXT:Â Â popq %rbp<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll Tue Jun 4 09:40:04 2019<br>
> @@ -725,12 +725,12 @@ define void @test_x86_avx_storeu_dq_256(<br>
>Â ; X86-AVX-LABEL: test_x86_avx_storeu_dq_256:<br>
>Â ; X86-AVX:Â Â Â Â # %bb.0:<br>
>Â ; X86-AVX-NEXT:Â Â movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
> -; X86-AVX-NEXT:Â Â vextractf128 $1, %ymm0, %xmm1 # encoding: [0xc4,0xe3,0x7d,0x19,0xc1,0x01]<br>
> -; X86-AVX-NEXT:Â Â vpcmpeqd %xmm2, %xmm2, %xmm2 # encoding: [0xc5,0xe9,0x76,0xd2]<br>
> -; X86-AVX-NEXT:Â Â vpsubb %xmm2, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0xf8,0xca]<br>
> -; X86-AVX-NEXT:Â Â vpsubb %xmm2, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xf8,0xc2]<br>
> -; X86-AVX-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0 # encoding: [0xc4,0xe3,0x7d,0x18,0xc1,0x01]<br>
> -; X86-AVX-NEXT:Â Â vmovups %ymm0, (%eax) # encoding: [0xc5,0xfc,0x11,0x00]<br>
> +; X86-AVX-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
> +; X86-AVX-NEXT:Â Â vpsubb %xmm1, %xmm0, %xmm2 # encoding: [0xc5,0xf9,0xf8,0xd1]<br>
> +; X86-AVX-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0 # encoding: [0xc4,0xe3,0x7d,0x19,0xc0,0x01]<br>
> +; X86-AVX-NEXT:Â Â vpsubb %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xf8,0xc1]<br>
> +; X86-AVX-NEXT:Â Â vmovdqu %xmm0, 16(%eax) # encoding: [0xc5,0xfa,0x7f,0x40,0x10]<br>
> +; X86-AVX-NEXT:Â Â vmovdqu %xmm2, (%eax) # encoding: [0xc5,0xfa,0x7f,0x10]<br>
>Â ; X86-AVX-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>Â ; X86-AVX-NEXT:Â Â retl # encoding: [0xc3]<br>
>Â ;<br>
> @@ -745,12 +745,12 @@ define void @test_x86_avx_storeu_dq_256(<br>
>Â ;<br>
>Â ; X64-AVX-LABEL: test_x86_avx_storeu_dq_256:<br>
>Â ; X64-AVX:Â Â Â Â # %bb.0:<br>
> -; X64-AVX-NEXT:Â Â vextractf128 $1, %ymm0, %xmm1 # encoding: [0xc4,0xe3,0x7d,0x19,0xc1,0x01]<br>
> -; X64-AVX-NEXT:Â Â vpcmpeqd %xmm2, %xmm2, %xmm2 # encoding: [0xc5,0xe9,0x76,0xd2]<br>
> -; X64-AVX-NEXT:Â Â vpsubb %xmm2, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0xf8,0xca]<br>
> -; X64-AVX-NEXT:Â Â vpsubb %xmm2, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xf8,0xc2]<br>
> -; X64-AVX-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0 # encoding: [0xc4,0xe3,0x7d,0x18,0xc1,0x01]<br>
> -; X64-AVX-NEXT:Â Â vmovups %ymm0, (%rdi) # encoding: [0xc5,0xfc,0x11,0x07]<br>
> +; X64-AVX-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
> +; X64-AVX-NEXT:Â Â vpsubb %xmm1, %xmm0, %xmm2 # encoding: [0xc5,0xf9,0xf8,0xd1]<br>
> +; X64-AVX-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0 # encoding: [0xc4,0xe3,0x7d,0x19,0xc0,0x01]<br>
> +; X64-AVX-NEXT:Â Â vpsubb %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xf8,0xc1]<br>
> +; X64-AVX-NEXT:Â Â vmovdqu %xmm0, 16(%rdi) # encoding: [0xc5,0xfa,0x7f,0x47,0x10]<br>
> +; X64-AVX-NEXT:Â Â vmovdqu %xmm2, (%rdi) # encoding: [0xc5,0xfa,0x7f,0x17]<br>
>Â ; X64-AVX-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
>Â ; X64-AVX-NEXT:Â Â retq # encoding: [0xc3]<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx-intrinsics-x86.ll Tue Jun 4 09:40:04 2019<br>
> @@ -916,8 +916,7 @@ define void @movnt_dq(i8* %p, <2 x i64><br>
>Â ; X86-AVX-NEXT:Â Â movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>Â ; X86-AVX-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
>Â ; X86-AVX-NEXT:Â Â vpsubq %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xfb,0xc1]<br>
> -; X86-AVX-NEXT:Â Â vmovntdq %ymm0, (%eax) # encoding: [0xc5,0xfd,0xe7,0x00]<br>
> -; X86-AVX-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
> +; X86-AVX-NEXT:Â Â vmovntdq %xmm0, (%eax) # encoding: [0xc5,0xf9,0xe7,0x00]<br>
>Â ; X86-AVX-NEXT:Â Â retl # encoding: [0xc3]<br>
>Â ;<br>
>Â ; X86-AVX512VL-LABEL: movnt_dq:<br>
> @@ -925,24 +924,21 @@ define void @movnt_dq(i8* %p, <2 x i64><br>
>Â ; X86-AVX512VL-NEXT:Â Â movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]<br>
>Â ; X86-AVX512VL-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
>Â ; X86-AVX512VL-NEXT:Â Â vpsubq %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xfb,0xc1]<br>
> -; X86-AVX512VL-NEXT:Â Â vmovntdq %ymm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xfd,0xe7,0x00]<br>
> -; X86-AVX512VL-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
> +; X86-AVX512VL-NEXT:Â Â vmovntdq %xmm0, (%eax) # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xe7,0x00]<br>
>Â ; X86-AVX512VL-NEXT:Â Â retl # encoding: [0xc3]<br>
>Â ;<br>
>Â ; X64-AVX-LABEL: movnt_dq:<br>
>Â ; X64-AVX:Â Â Â Â # %bb.0:<br>
>Â ; X64-AVX-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
>Â ; X64-AVX-NEXT:Â Â vpsubq %xmm1, %xmm0, %xmm0 # encoding: [0xc5,0xf9,0xfb,0xc1]<br>
> -; X64-AVX-NEXT:Â Â vmovntdq %ymm0, (%rdi) # encoding: [0xc5,0xfd,0xe7,0x07]<br>
> -; X64-AVX-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
> +; X64-AVX-NEXT:Â Â vmovntdq %xmm0, (%rdi) # encoding: [0xc5,0xf9,0xe7,0x07]<br>
>Â ; X64-AVX-NEXT:Â Â retq # encoding: [0xc3]<br>
>Â ;<br>
>Â ; X64-AVX512VL-LABEL: movnt_dq:<br>
>Â ; X64-AVX512VL:Â Â Â Â # %bb.0:<br>
>Â ; X64-AVX512VL-NEXT:Â Â vpcmpeqd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x76,0xc9]<br>
>Â ; X64-AVX512VL-NEXT:Â Â vpsubq %xmm1, %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xfb,0xc1]<br>
> -; X64-AVX512VL-NEXT:Â Â vmovntdq %ymm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xfd,0xe7,0x07]<br>
> -; X64-AVX512VL-NEXT:Â Â vzeroupper # encoding: [0xc5,0xf8,0x77]<br>
> +; X64-AVX512VL-NEXT:Â Â vmovntdq %xmm0, (%rdi) # EVEX TO VEX Compression encoding: [0xc5,0xf9,0xe7,0x07]<br>
>Â ; X64-AVX512VL-NEXT:Â Â retq # encoding: [0xc3]<br>
>Â Â %a2 = add <2 x i64> %a1, <i64 1, i64 1><br>
>Â Â %a3 = shufflevector <2 x i64> %a2, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-trunc-widen.ll Tue Jun 4 09:40:04 2019<br>
> @@ -462,12 +462,10 @@ define <32 x i8> @trunc_wb_512(<32 x i16<br>
>Â define void @trunc_wb_512_mem(<32 x i16> %i, <32 x i8>* %res) #0 {<br>
>Â ; KNL-LABEL: trunc_wb_512_mem:<br>
>Â ; KNL:Â Â Â Â ## %bb.0:<br>
> -; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; KNL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; KNL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; KNL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; KNL-NEXT:Â Â vmovdqa %ymm0, (%rdi)<br>
> +; KNL-NEXT:Â Â vpmovdb %zmm1, 16(%rdi)<br>
> +; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; KNL-NEXT:Â Â vpmovdb %zmm0, (%rdi)<br>
>Â ; KNL-NEXT:Â Â vzeroupper<br>
>Â ; KNL-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -672,8 +670,8 @@ define void @usat_trunc_db_1024_mem(<32<br>
>Â ; ALL:Â Â Â Â ## %bb.0:<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm0, %xmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm1, %xmm1<br>
> -; ALL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; ALL-NEXT:Â Â vmovdqu %ymm0, (%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm1, 16(%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm0, (%rdi)<br>
>Â ; ALL-NEXT:Â Â vzeroupper<br>
>Â ; ALL-NEXT:Â Â retq<br>
>Â Â %x3 = icmp ult <32 x i32> %i, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255><br>
> @@ -952,8 +950,8 @@ define void @smax_usat_trunc_db_1024_mem<br>
>Â ; ALL-NEXT:Â Â vpmaxsd %zmm2, %zmm0, %zmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm0, %xmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm1, %xmm1<br>
> -; ALL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; ALL-NEXT:Â Â vmovdqu %ymm0, (%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm1, 16(%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm0, (%rdi)<br>
>Â ; ALL-NEXT:Â Â vzeroupper<br>
>Â ; ALL-NEXT:Â Â retq<br>
>Â Â %x1 = icmp sgt <32 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0><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=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-trunc.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/avx512-trunc.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/avx512-trunc.ll Tue Jun 4 09:40:04 2019<br>
> @@ -458,12 +458,10 @@ define <32 x i8> @trunc_wb_512(<32 x i16<br>
>Â define void @trunc_wb_512_mem(<32 x i16> %i, <32 x i8>* %res) #0 {<br>
>Â ; KNL-LABEL: trunc_wb_512_mem:<br>
>Â ; KNL:Â Â Â Â ## %bb.0:<br>
> -; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; KNL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; KNL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; KNL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; KNL-NEXT:Â Â vmovdqa %ymm0, (%rdi)<br>
> +; KNL-NEXT:Â Â vpmovdb %zmm1, 16(%rdi)<br>
> +; KNL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; KNL-NEXT:Â Â vpmovdb %zmm0, (%rdi)<br>
>Â ; KNL-NEXT:Â Â vzeroupper<br>
>Â ; KNL-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -667,8 +665,8 @@ define void @usat_trunc_db_1024_mem(<32<br>
>Â ; ALL:Â Â Â Â ## %bb.0:<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm0, %xmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm1, %xmm1<br>
> -; ALL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; ALL-NEXT:Â Â vmovdqu %ymm0, (%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm1, 16(%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm0, (%rdi)<br>
>Â ; ALL-NEXT:Â Â vzeroupper<br>
>Â ; ALL-NEXT:Â Â retq<br>
>Â Â %x3 = icmp ult <32 x i32> %i, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255><br>
> @@ -948,8 +946,8 @@ define void @smax_usat_trunc_db_1024_mem<br>
>Â ; ALL-NEXT:Â Â vpmaxsd %zmm2, %zmm0, %zmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm0, %xmm0<br>
>Â ; ALL-NEXT:Â Â vpmovusdb %zmm1, %xmm1<br>
> -; ALL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; ALL-NEXT:Â Â vmovdqu %ymm0, (%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm1, 16(%rdi)<br>
> +; ALL-NEXT:Â Â vmovdqu %xmm0, (%rdi)<br>
>Â ; ALL-NEXT:Â Â vzeroupper<br>
>Â ; ALL-NEXT:Â Â retq<br>
>Â Â %x1 = icmp sgt <32 x i32> %i, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0><br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/nontemporal-2.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/nontemporal-2.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/nontemporal-2.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/nontemporal-2.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/nontemporal-2.ll Tue Jun 4 09:40:04 2019<br>
> @@ -1061,12 +1061,12 @@ define void @test_op_v8i32(<8 x i32> %a,<br>
>Â ;<br>
>Â ; AVX1-LABEL: test_op_v8i32:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm3, %xmm2<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm1, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpaddd %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovntps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm0, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1126,12 +1126,12 @@ define void @test_op_v4i64(<4 x i64> %a,<br>
>Â ;<br>
>Â ; AVX1-LABEL: test_op_v4i64:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX1-NEXT:Â Â vpaddq %xmm2, %xmm3, %xmm2<br>
> +; AVX1-NEXT:Â Â vpaddq %xmm1, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpaddq %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovntps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm0, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1164,12 +1164,12 @@ define void @test_op_v16i16(<16 x i16> %<br>
>Â ;<br>
>Â ; AVX1-LABEL: test_op_v16i16:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX1-NEXT:Â Â vpaddw %xmm2, %xmm3, %xmm2<br>
> +; AVX1-NEXT:Â Â vpaddw %xmm1, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpaddw %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovntps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm0, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1202,12 +1202,12 @@ define void @test_op_v32i8(<32 x i8> %a,<br>
>Â ;<br>
>Â ; AVX1-LABEL: test_op_v32i8:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX1-NEXT:Â Â vpaddb %xmm2, %xmm3, %xmm2<br>
> +; AVX1-NEXT:Â Â vpaddb %xmm1, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpaddb %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovntps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm0, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovntdq %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/oddsubvector.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/oddsubvector.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/oddsubvector.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/oddsubvector.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/oddsubvector.ll Tue Jun 4 09:40:04 2019<br>
> @@ -116,13 +116,14 @@ define void @PR40815(%struct.Mat4* nocap<br>
>Â ;<br>
>Â ; AVX-LABEL: PR40815:<br>
>Â ; AVX:Â Â Â Â # %bb.0:<br>
> -; AVX-NEXT:Â Â vmovaps 16(%rdi), %xmm0<br>
> -; AVX-NEXT:Â Â vmovaps 48(%rdi), %xmm1<br>
> -; AVX-NEXT:Â Â vinsertf128 $1, 32(%rdi), %ymm1, %ymm1<br>
> -; AVX-NEXT:Â Â vinsertf128 $1, (%rdi), %ymm0, %ymm0<br>
> -; AVX-NEXT:Â Â vmovups %ymm1, (%rsi)<br>
> -; AVX-NEXT:Â Â vmovups %ymm0, 32(%rsi)<br>
> -; AVX-NEXT:Â Â vzeroupper<br>
> +; AVX-NEXT:Â Â vmovaps (%rdi), %xmm0<br>
> +; AVX-NEXT:Â Â vmovaps 16(%rdi), %xmm1<br>
> +; AVX-NEXT:Â Â vmovaps 32(%rdi), %xmm2<br>
> +; AVX-NEXT:Â Â vmovaps 48(%rdi), %xmm3<br>
> +; AVX-NEXT:Â Â vmovaps %xmm2, 16(%rsi)<br>
> +; AVX-NEXT:Â Â vmovaps %xmm3, (%rsi)<br>
> +; AVX-NEXT:Â Â vmovaps %xmm0, 48(%rsi)<br>
> +; AVX-NEXT:Â Â vmovaps %xmm1, 32(%rsi)<br>
>Â ; AVX-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512-LABEL: PR40815:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll Tue Jun 4 09:40:04 2019<br>
> @@ -53,12 +53,12 @@ define void @test2(<4 x i8>* %in, <4 x i<br>
>Â ;<br>
>Â ; AVX1-LABEL: test2:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxbq 2(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxbq (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxbq (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxbq 2(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -134,12 +134,12 @@ define void @test4(<8 x i8>* %in, <8 x i<br>
>Â ;<br>
>Â ; AVX1-LABEL: test4:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxbd 4(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxbd (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxbd (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxbd 4(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -215,12 +215,12 @@ define void @test6(<16 x i8>* %in, <16 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: test6:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxbw 8(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxbw (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxbw (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxbw 8(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -296,12 +296,12 @@ define void @test8(<4 x i16>* %in, <4 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: test8:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxwq 4(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxwq (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxwq (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxwq 4(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -377,12 +377,12 @@ define void @test10(<8 x i16>* %in, <8 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: test10:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxwd 8(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxwd (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxwd (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxwd 8(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -458,12 +458,12 @@ define void @test12(<4 x i32>* %in, <4 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: test12:<br>
>Â ; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vpmovsxdq 8(%rdi), %xmm0<br>
> -; AVX1-NEXT:Â Â vpmovsxdq (%rdi), %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; AVX1-NEXT:Â Â vpxor %xmm1, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vmovdqu %ymm1, (%rax)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> +; AVX1-NEXT:Â Â vpmovsxdq (%rdi), %xmm0<br>
> +; AVX1-NEXT:Â Â vpmovsxdq 8(%rdi), %xmm1<br>
> +; AVX1-NEXT:Â Â vxorps %xmm2, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vmovups %ymm2, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, 16(%rsi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rsi)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/shrink_vmul-widen.ll Tue Jun 4 09:40:04 2019<br>
> @@ -215,10 +215,9 @@ define void @mul_8xi8(i8* nocapture read<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm0, %xmm2, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm1, %xmm2, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_8xi8:<br>
> @@ -261,9 +260,8 @@ define void @mul_8xi8(i8* nocapture read<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm0, %xmm2, %xmm0<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_8xi8:<br>
> @@ -349,12 +347,11 @@ define void @mul_16xi8(i8* nocapture rea<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi8:<br>
> @@ -417,11 +414,10 @@ define void @mul_16xi8(i8* nocapture rea<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi8:<br>
> @@ -648,10 +644,9 @@ define void @mul_8xi16(i8* nocapture rea<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm2, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_8xi16:<br>
> @@ -693,9 +688,8 @@ define void @mul_8xi16(i8* nocapture rea<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm2, %xmm0<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_8xi16:<br>
> @@ -780,12 +774,11 @@ define void @mul_16xi16(i8* nocapture re<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi16:<br>
> @@ -847,11 +840,10 @@ define void @mul_16xi16(i8* nocapture re<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi16:<br>
> @@ -1284,24 +1276,23 @@ define void @mul_16xi16_sext(i8* nocaptu<br>
>Â ; X86-AVX1-NEXT:Â Â movl {{[0-9]+}}(%esp), %ecx<br>
>Â ; X86-AVX1-NEXT:Â Â movl {{[0-9]+}}(%esp), %edx<br>
>Â ; X86-AVX1-NEXT:Â Â movl c, %esi<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%edx,%ecx), %xmm0<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%edx,%ecx), %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd (%edx,%ecx), %xmm2<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%edx,%ecx), %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%eax,%ecx), %xmm4<br>
> -; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%edx,%ecx), %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%edx,%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%edx,%ecx), %xmm2<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd (%edx,%ecx), %xmm3<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%eax,%ecx), %xmm4<br>
> +; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%eax,%ecx), %xmm4<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm4, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd (%eax,%ecx), %xmm4<br>
> -; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%eax,%ecx), %xmm4<br>
> +; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd (%eax,%ecx), %xmm4<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi16_sext:<br>
> @@ -1351,23 +1342,22 @@ define void @mul_16xi16_sext(i8* nocaptu<br>
>Â ; X64-AVX1-LABEL: mul_16xi16_sext:<br>
>Â ; X64-AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; X64-AVX1-NEXT:Â Â movq {{.*}}(%rip), %rax<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rdi,%rdx), %xmm0<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rdi,%rdx), %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd (%rdi,%rdx), %xmm2<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rdi,%rdx), %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rsi,%rdx), %xmm4<br>
> -; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rdi,%rdx), %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rdi,%rdx), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rdi,%rdx), %xmm2<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd (%rdi,%rdx), %xmm3<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rsi,%rdx), %xmm4<br>
> +; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rsi,%rdx), %xmm4<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm4, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd (%rsi,%rdx), %xmm4<br>
> -; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rsi,%rdx), %xmm4<br>
> +; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd (%rsi,%rdx), %xmm4<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi16_sext:<br>
> @@ -2201,8 +2191,8 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X86-AVX1-NEXT:Â Â divl 32(%ecx)<br>
>Â ; X86-AVX1-NEXT:Â Â movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill<br>
>Â ; X86-AVX1-NEXT:Â Â vpextrd $3, %xmm2, %eax<br>
> -; X86-AVX1-NEXT:Â Â vmovdqa (%ecx), %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vmovdqa 16(%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa (%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa 16(%ecx), %xmm3<br>
>Â ; X86-AVX1-NEXT:Â Â vpextrd $3, %xmm3, %ecx<br>
>Â ; X86-AVX1-NEXT:Â Â xorl %edx, %edx<br>
>Â ; X86-AVX1-NEXT:Â Â divl %ecx<br>
> @@ -2255,14 +2245,13 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X86-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm2 = [8199,8199,8199,8199]<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm1, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovaps %ymm0, (%eax)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa %xmm1, (%eax)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa %xmm0, (%eax)<br>
>Â ; X86-AVX1-NEXT:Â Â addl $16, %esp<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
>Â ; X86-AVX1-NEXT:Â Â popl %edi<br>
>Â ; X86-AVX1-NEXT:Â Â popl %ebx<br>
>Â ; X86-AVX1-NEXT:Â Â popl %ebp<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: PR34947:<br>
> @@ -2435,8 +2424,8 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X64-AVX1-NEXT:Â Â divl 32(%rsi)<br>
>Â ; X64-AVX1-NEXT:Â Â movl %edx, %r8d<br>
>Â ; X64-AVX1-NEXT:Â Â vpextrd $3, %xmm2, %eax<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm3<br>
>Â ; X64-AVX1-NEXT:Â Â vpextrd $3, %xmm3, %ecx<br>
>Â ; X64-AVX1-NEXT:Â Â xorl %edx, %edx<br>
>Â ; X64-AVX1-NEXT:Â Â divl %ecx<br>
> @@ -2486,13 +2475,12 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X64-AVX1-NEXT:Â Â vpinsrd $2, %r10d, %xmm2, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpinsrd $3, %r9d, %xmm2, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
>Â ; X64-AVX1-NEXT:Â Â imull $8199, %r8d, %eax # imm = 0x2007<br>
>Â ; X64-AVX1-NEXT:Â Â movl %eax, (%rax)<br>
> -; X64-AVX1-NEXT:Â Â vmovaps %ymm0, (%rax)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa %xmm1, (%rax)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa %xmm0, (%rax)<br>
>Â ; X64-AVX1-NEXT:Â Â popq %rbx<br>
>Â ; X64-AVX1-NEXT:Â Â popq %rbp<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: PR34947:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/shrink_vmul.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink_vmul.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shrink_vmul.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/shrink_vmul.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/shrink_vmul.ll Tue Jun 4 09:40:04 2019<br>
> @@ -209,10 +209,9 @@ define void @mul_8xi8(i8* nocapture read<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm0, %xmm2, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm1, %xmm2, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_8xi8:<br>
> @@ -255,9 +254,8 @@ define void @mul_8xi8(i8* nocapture read<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm0, %xmm2, %xmm0<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm2 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_8xi8:<br>
> @@ -343,12 +341,11 @@ define void @mul_16xi8(i8* nocapture rea<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmaddwd %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi8:<br>
> @@ -411,11 +408,10 @@ define void @mul_16xi8(i8* nocapture rea<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxbd {{.*#+}} xmm4 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmaddwd %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi8:<br>
> @@ -640,10 +636,9 @@ define void @mul_8xi16(i8* nocapture rea<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm2, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_8xi16:<br>
> @@ -685,9 +680,8 @@ define void @mul_8xi16(i8* nocapture rea<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm2, %xmm0<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_8xi16:<br>
> @@ -772,12 +766,11 @@ define void @mul_16xi16(i8* nocapture re<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi16:<br>
> @@ -839,11 +832,10 @@ define void @mul_16xi16(i8* nocapture re<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovzxwd {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi16:<br>
> @@ -1258,24 +1250,23 @@ define void @mul_16xi16_sext(i8* nocaptu<br>
>Â ; X86-AVX1-NEXT:Â Â movl {{[0-9]+}}(%esp), %ecx<br>
>Â ; X86-AVX1-NEXT:Â Â movl {{[0-9]+}}(%esp), %edx<br>
>Â ; X86-AVX1-NEXT:Â Â movl c, %esi<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%edx,%ecx), %xmm0<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%edx,%ecx), %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd (%edx,%ecx), %xmm2<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%edx,%ecx), %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%eax,%ecx), %xmm4<br>
> -; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%edx,%ecx), %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%edx,%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%edx,%ecx), %xmm2<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd (%edx,%ecx), %xmm3<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovsxwd 24(%eax,%ecx), %xmm4<br>
> +; X86-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd 16(%eax,%ecx), %xmm4<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm4, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vpmovsxwd (%eax,%ecx), %xmm4<br>
> -; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X86-AVX1-NEXT:Â Â vpmovsxwd 8(%eax,%ecx), %xmm4<br>
> +; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
> +; X86-AVX1-NEXT:Â Â vpmovsxwd (%eax,%ecx), %xmm4<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm0, 32(%esi,%ecx,4)<br>
> -; X86-AVX1-NEXT:Â Â vmovups %ymm2, (%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%esi,%ecx,4)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqu %xmm3, (%esi,%ecx,4)<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: mul_16xi16_sext:<br>
> @@ -1325,23 +1316,22 @@ define void @mul_16xi16_sext(i8* nocaptu<br>
>Â ; X64-AVX1-LABEL: mul_16xi16_sext:<br>
>Â ; X64-AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; X64-AVX1-NEXT:Â Â movq {{.*}}(%rip), %rax<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rdi,%rdx), %xmm0<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rdi,%rdx), %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd (%rdi,%rdx), %xmm2<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rdi,%rdx), %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rsi,%rdx), %xmm4<br>
> -; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rdi,%rdx), %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rdi,%rdx), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rdi,%rdx), %xmm2<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd (%rdi,%rdx), %xmm3<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovsxwd 24(%rsi,%rdx), %xmm4<br>
> +; X64-AVX1-NEXT:Â Â vpmulld %xmm0, %xmm4, %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd 16(%rsi,%rdx), %xmm4<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm4, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vpmovsxwd (%rsi,%rdx), %xmm4<br>
> -; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmovsxwd 8(%rsi,%rdx), %xmm4<br>
> +; X64-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm4, %xmm2<br>
> +; X64-AVX1-NEXT:Â Â vpmovsxwd (%rsi,%rdx), %xmm4<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, 32(%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm2, (%rax,%rdx,4)<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, 48(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm1, 32(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm2, 16(%rax,%rdx,4)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm3, (%rax,%rdx,4)<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: mul_16xi16_sext:<br>
> @@ -2157,8 +2147,8 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X86-AVX1-NEXT:Â Â divl 32(%ecx)<br>
>Â ; X86-AVX1-NEXT:Â Â movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill<br>
>Â ; X86-AVX1-NEXT:Â Â vpextrd $3, %xmm2, %eax<br>
> -; X86-AVX1-NEXT:Â Â vmovdqa (%ecx), %xmm3<br>
> -; X86-AVX1-NEXT:Â Â vmovdqa 16(%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa (%ecx), %xmm1<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa 16(%ecx), %xmm3<br>
>Â ; X86-AVX1-NEXT:Â Â vpextrd $3, %xmm3, %ecx<br>
>Â ; X86-AVX1-NEXT:Â Â xorl %edx, %edx<br>
>Â ; X86-AVX1-NEXT:Â Â divl %ecx<br>
> @@ -2211,14 +2201,13 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X86-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm2 = [8199,8199,8199,8199]<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm0<br>
>Â ; X86-AVX1-NEXT:Â Â vpmulld %xmm2, %xmm1, %xmm1<br>
> -; X86-AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> -; X86-AVX1-NEXT:Â Â vmovaps %ymm0, (%eax)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa %xmm1, (%eax)<br>
> +; X86-AVX1-NEXT:Â Â vmovdqa %xmm0, (%eax)<br>
>Â ; X86-AVX1-NEXT:Â Â addl $16, %esp<br>
>Â ; X86-AVX1-NEXT:Â Â popl %esi<br>
>Â ; X86-AVX1-NEXT:Â Â popl %edi<br>
>Â ; X86-AVX1-NEXT:Â Â popl %ebx<br>
>Â ; X86-AVX1-NEXT:Â Â popl %ebp<br>
> -; X86-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X86-AVX1-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X86-AVX2-LABEL: PR34947:<br>
> @@ -2391,8 +2380,8 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X64-AVX1-NEXT:Â Â divl 32(%rsi)<br>
>Â ; X64-AVX1-NEXT:Â Â movl %edx, %r8d<br>
>Â ; X64-AVX1-NEXT:Â Â vpextrd $3, %xmm2, %eax<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa (%rsi), %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa 16(%rsi), %xmm3<br>
>Â ; X64-AVX1-NEXT:Â Â vpextrd $3, %xmm3, %ecx<br>
>Â ; X64-AVX1-NEXT:Â Â xorl %edx, %edx<br>
>Â ; X64-AVX1-NEXT:Â Â divl %ecx<br>
> @@ -2442,13 +2431,12 @@ define void @PR34947(<9 x i16>* %p0, <9<br>
>Â ; X64-AVX1-NEXT:Â Â vpinsrd $2, %r10d, %xmm2, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpinsrd $3, %r9d, %xmm2, %xmm2<br>
>Â ; X64-AVX1-NEXT:Â Â vpmulld %xmm1, %xmm2, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
>Â ; X64-AVX1-NEXT:Â Â imull $8199, %r8d, %eax # imm = 0x2007<br>
>Â ; X64-AVX1-NEXT:Â Â movl %eax, (%rax)<br>
> -; X64-AVX1-NEXT:Â Â vmovaps %ymm0, (%rax)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa %xmm1, (%rax)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa %xmm0, (%rax)<br>
>Â ; X64-AVX1-NEXT:Â Â popq %rbx<br>
>Â ; X64-AVX1-NEXT:Â Â popq %rbp<br>
> -; X64-AVX1-NEXT:Â Â vzeroupper<br>
>Â ; X64-AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; X64-AVX2-LABEL: PR34947:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512-widen.ll Tue Jun 4 09:40:04 2019<br>
> @@ -88,23 +88,21 @@ define void @shuffle_v64i8_to_v32i8(<64<br>
>Â define void @trunc_v32i16_to_v32i8(<64 x i8>* %L, <32 x i8>* %S) nounwind {<br>
>Â ; AVX512F-LABEL: trunc_v32i16_to_v32i8:<br>
>Â ; AVX512F:Â Â Â Â # %bb.0:<br>
> -; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = 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:Â Â vpmovdb %zmm0, %xmm0<br>
> +; AVX512F-NEXT:Â Â vmovdqa (%rdi), %ymm0<br>
>Â ; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = 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:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512F-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:Â Â vmovdqa %ymm0, (%rsi)<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm1, 16(%rsi)<br>
> +; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm0, (%rsi)<br>
>Â ; AVX512F-NEXT:Â Â vzeroupper<br>
>Â ; AVX512F-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512VL-LABEL: trunc_v32i16_to_v32i8:<br>
>Â ; AVX512VL:Â Â Â Â # %bb.0:<br>
> -; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = 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>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
> +; AVX512VL-NEXT:Â Â vmovdqa (%rdi), %ymm0<br>
>Â ; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = 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>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512VL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512VL-NEXT:Â Â vmovdqa %ymm0, (%rsi)<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm1, 16(%rsi)<br>
> +; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm0, (%rsi)<br>
>Â ; AVX512VL-NEXT:Â Â vzeroupper<br>
>Â ; AVX512VL-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/shuffle-vs-trunc-512.ll Tue Jun 4 09:40:04 2019<br>
> @@ -88,23 +88,21 @@ define void @shuffle_v64i8_to_v32i8(<64<br>
>Â define void @trunc_v32i16_to_v32i8(<64 x i8>* %L, <32 x i8>* %S) nounwind {<br>
>Â ; AVX512F-LABEL: trunc_v32i16_to_v32i8:<br>
>Â ; AVX512F:Â Â Â Â # %bb.0:<br>
> -; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = 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:Â Â vpmovdb %zmm0, %xmm0<br>
> +; AVX512F-NEXT:Â Â vmovdqa (%rdi), %ymm0<br>
>Â ; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = 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:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512F-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:Â Â vmovdqa %ymm0, (%rsi)<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm1, 16(%rsi)<br>
> +; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm0, (%rsi)<br>
>Â ; AVX512F-NEXT:Â Â vzeroupper<br>
>Â ; AVX512F-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512VL-LABEL: trunc_v32i16_to_v32i8:<br>
>Â ; AVX512VL:Â Â Â Â # %bb.0:<br>
> -; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = 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>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
> +; AVX512VL-NEXT:Â Â vmovdqa (%rdi), %ymm0<br>
>Â ; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = 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>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512VL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512VL-NEXT:Â Â vmovdqa %ymm0, (%rsi)<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm1, 16(%rsi)<br>
> +; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm0, (%rsi)<br>
>Â ; AVX512VL-NEXT:Â Â vzeroupper<br>
>Â ; AVX512VL-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll Tue Jun 4 09:40:04 2019<br>
> @@ -835,24 +835,24 @@ define <16 x i32> @test_broadcast_4i32_1<br>
>Â define void @fallback_broadcast_v4i64_to_v8i64(<4 x i64> %a, <8 x i64> %b) {<br>
>Â ; X32-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64:<br>
>Â ; X32-AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; X32-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm4 = [3,0,4,0]<br>
> -; X32-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm3, %xmm3<br>
> -; X32-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm5 = [1,0,2,0]<br>
> +; X32-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm3 = [1,0,2,0]<br>
> +; X32-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm0, %xmm4<br>
> +; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
> +; X32-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm5 = [3,0,4,0]<br>
>Â ; X32-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm0, %xmm0<br>
> -; X32-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; X32-AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm3 = [1,0,2,0,3,0,4,0]<br>
> -; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm6<br>
> -; X32-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm6, %xmm6<br>
> -; X32-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm2, %xmm2<br>
> -; X32-AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm2, %ymm2<br>
> -; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm6<br>
> -; X32-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm6, %xmm4<br>
> -; X32-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm1, %xmm1<br>
> -; X32-AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm1, %ymm1<br>
> -; X32-AVX1-NEXT:Â Â vandps %ymm3, %ymm1, %ymm1<br>
> -; X32-AVX1-NEXT:Â Â vandps %ymm3, %ymm2, %ymm2<br>
> -; X32-AVX1-NEXT:Â Â vmovups %ymm0, ga4<br>
> +; X32-AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm6 = [1,0,2,0,3,0,4,0]<br>
> +; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm7<br>
> +; X32-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm7, %xmm7<br>
> +; X32-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm2, %xmm2<br>
> +; X32-AVX1-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm2, %ymm2<br>
> +; X32-AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm7<br>
> +; X32-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm7, %xmm5<br>
> +; X32-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm1, %xmm1<br>
> +; X32-AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm1, %ymm1<br>
> +; X32-AVX1-NEXT:Â Â vandps %ymm6, %ymm1, %ymm1<br>
> +; X32-AVX1-NEXT:Â Â vandps %ymm6, %ymm2, %ymm2<br>
> +; X32-AVX1-NEXT:Â Â vmovdqu %xmm0, ga4+16<br>
> +; X32-AVX1-NEXT:Â Â vmovdqu %xmm4, ga4<br>
>Â ; X32-AVX1-NEXT:Â Â vmovups %ymm2, gb4+32<br>
>Â ; X32-AVX1-NEXT:Â Â vmovups %ymm1, gb4<br>
>Â ; X32-AVX1-NEXT:Â Â vzeroupper<br>
> @@ -886,24 +886,24 @@ define void @fallback_broadcast_v4i64_to<br>
>Â ;<br>
>Â ; X64-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64:<br>
>Â ; X64-AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm4 = [3,4]<br>
> -; X64-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm3, %xmm3<br>
> -; X64-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm5 = [1,2]<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm3 = [1,2]<br>
> +; X64-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm0, %xmm4<br>
> +; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
> +; X64-AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm5 = [3,4]<br>
>Â ; X64-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm0, %xmm0<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; X64-AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm3 = [1,2,3,4]<br>
> -; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm6<br>
> -; X64-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm6, %xmm6<br>
> -; X64-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm2, %xmm2<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm6<br>
> -; X64-AVX1-NEXT:Â Â vpaddq %xmm4, %xmm6, %xmm4<br>
> -; X64-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm1, %xmm1<br>
> -; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm1, %ymm1<br>
> -; X64-AVX1-NEXT:Â Â vandps %ymm3, %ymm1, %ymm1<br>
> -; X64-AVX1-NEXT:Â Â vandps %ymm3, %ymm2, %ymm2<br>
> -; X64-AVX1-NEXT:Â Â vmovups %ymm0, {{.*}}(%rip)<br>
> +; X64-AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm6 = [1,2,3,4]<br>
> +; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm7<br>
> +; X64-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm7, %xmm7<br>
> +; X64-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm2, %xmm2<br>
> +; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm2, %ymm2<br>
> +; X64-AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm7<br>
> +; X64-AVX1-NEXT:Â Â vpaddq %xmm5, %xmm7, %xmm5<br>
> +; X64-AVX1-NEXT:Â Â vpaddq %xmm3, %xmm1, %xmm1<br>
> +; X64-AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm1, %ymm1<br>
> +; X64-AVX1-NEXT:Â Â vandps %ymm6, %ymm1, %ymm1<br>
> +; X64-AVX1-NEXT:Â Â vandps %ymm6, %ymm2, %ymm2<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm0, ga4+{{.*}}(%rip)<br>
> +; X64-AVX1-NEXT:Â Â vmovdqu %xmm4, {{.*}}(%rip)<br>
>Â ; X64-AVX1-NEXT:Â Â vmovups %ymm2, gb4+{{.*}}(%rip)<br>
>Â ; X64-AVX1-NEXT:Â Â vmovups %ymm1, {{.*}}(%rip)<br>
>Â ; X64-AVX1-NEXT:Â Â vzeroupper<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_fptrunc.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_fptrunc.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_fptrunc.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_fptrunc.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_fptrunc.ll Tue Jun 4 09:40:04 2019<br>
> @@ -99,9 +99,8 @@ define void @fptrunc_frommem8(<8 x doubl<br>
>Â ; X32-AVX-NEXT:Â Â movl {{[0-9]+}}(%esp), %ecx<br>
>Â ; X32-AVX-NEXT:Â Â vcvtpd2psy (%ecx), %xmm0<br>
>Â ; X32-AVX-NEXT:Â Â vcvtpd2psy 32(%ecx), %xmm1<br>
> -; X32-AVX-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X32-AVX-NEXT:Â Â vmovups %ymm0, (%eax)<br>
> -; X32-AVX-NEXT:Â Â vzeroupper<br>
> +; X32-AVX-NEXT:Â Â vmovupd %xmm1, 16(%eax)<br>
> +; X32-AVX-NEXT:Â Â vmovupd %xmm0, (%eax)<br>
>Â ; X32-AVX-NEXT:Â Â retl<br>
>Â ;<br>
>Â ; X64-SSE-LABEL: fptrunc_frommem8:<br>
> @@ -120,9 +119,8 @@ define void @fptrunc_frommem8(<8 x doubl<br>
>Â ; X64-AVX:Â Â Â Â # %bb.0: # %entry<br>
>Â ; X64-AVX-NEXT:Â Â vcvtpd2psy (%rdi), %xmm0<br>
>Â ; X64-AVX-NEXT:Â Â vcvtpd2psy 32(%rdi), %xmm1<br>
> -; X64-AVX-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; X64-AVX-NEXT:Â Â vmovups %ymm0, (%rsi)<br>
> -; X64-AVX-NEXT:Â Â vzeroupper<br>
> +; X64-AVX-NEXT:Â Â vmovupd %xmm1, 16(%rsi)<br>
> +; X64-AVX-NEXT:Â Â vmovupd %xmm0, (%rsi)<br>
>Â ; X64-AVX-NEXT:Â Â retq<br>
>Â entry:<br>
>Â Â %0 = load <8 x double>, <8 x double>* %in<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_saddo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_saddo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_saddo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_saddo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_saddo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -693,8 +693,8 @@ define <8 x i32> @saddo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm5, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm0, %ymm0<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm0, %ymm8, %ymm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: saddo_v8i32:<br>
> @@ -824,48 +824,48 @@ define <16 x i32> @saddo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm4, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm7, %xmm4, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpaddd %xmm3, %xmm1, %xmm10<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm10, %xmm5, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm6, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm3, %xmm4, %xmm3<br>
> -; AVX1-NEXT:Â Â vpandn %xmm7, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm8, %xmm3, %xmm8<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm10, %xmm5, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm6, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm1, %xmm4, %xmm1<br>
> +; AVX1-NEXT:Â Â vpandn %xmm7, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm8, %xmm1, %xmm8<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpcmpgtd %xmm4, %xmm5, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm3, %xmm5, %xmm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm1, %xmm5, %xmm3<br>
> +; AVX1-NEXT:Â Â vpxor %xmm6, %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm7, %xmm3, %xmm7<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm4, %xmm1, %xmm4<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm4, %xmm5, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm7, %xmm1, %xmm7<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm4, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm3, %xmm5, %xmm4<br>
> -; AVX1-NEXT:Â Â vpxor %xmm6, %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm4, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm1, %xmm3, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpandn %xmm7, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm5, %xmm4<br>
> -; AVX1-NEXT:Â Â vpxor %xmm6, %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm5, %xmm3<br>
> +; AVX1-NEXT:Â Â vpxor %xmm6, %xmm3, %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpcmpgtd %xmm0, %xmm5, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm4, %xmm7, %xmm4<br>
> -; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm0, %xmm5, %xmm2<br>
> -; AVX1-NEXT:Â Â vpxor %xmm6, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm2, %xmm7, %xmm2<br>
> -; AVX1-NEXT:Â Â vpandn %xmm4, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm1, %xmm2, %xmm1<br>
> -; AVX1-NEXT:Â Â vpacksswb %xmm8, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm9, %ymm10, %ymm3<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm3, %xmm7, %xmm3<br>
> +; AVX1-NEXT:Â Â vpaddd %xmm2, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm5, %xmm0<br>
> +; AVX1-NEXT:Â Â vpxor %xmm6, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm7, %xmm0<br>
> +; AVX1-NEXT:Â Â vpandn %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpacksswb %xmm8, %xmm0, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[1,1,2,3]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm1[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm3, %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm1[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm4, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm2, (%rdi)<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm3, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm9, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm10, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: saddo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_smulo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_smulo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_smulo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_smulo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_smulo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -973,8 +973,8 @@ define <8 x i32> @smulo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm5, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm4, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: smulo_v8i32:<br>
> @@ -1266,59 +1266,59 @@ define <16 x i32> @smulo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpmuldq %xmm4, %xmm6, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]<br>
>Â ; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm5 = xmm7[0,1],xmm5[2,3],xmm7[4,5],xmm5[6,7]<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm4, %xmm6, %xmm4<br>
> -; AVX1-NEXT:Â Â vpsrad $31, %xmm4, %xmm6<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm4, %xmm6, %xmm8<br>
> +; AVX1-NEXT:Â Â vpsrad $31, %xmm8, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm5, %xmm6<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm8, %xmm8, %xmm8<br>
> -; AVX1-NEXT:Â Â vpxor %xmm8, %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm5, %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm6, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]<br>
> -; AVX1-NEXT:Â Â vpmuldq %xmm7, %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]<br>
> +; AVX1-NEXT:Â Â vpmuldq %xmm7, %xmm4, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpmuldq %xmm3, %xmm1, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]<br>
> -; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm5 = xmm7[0,1],xmm5[2,3],xmm7[4,5],xmm5[6,7]<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpsrad $31, %xmm1, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm3, %xmm5, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm8, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm6, %xmm3, %xmm9<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm5<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]<br>
> +; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm4 = xmm7[0,1],xmm4[2,3],xmm7[4,5],xmm4[6,7]<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm1, %xmm3<br>
> +; AVX1-NEXT:Â Â vpsrad $31, %xmm3, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm1, %xmm4, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm6, %xmm1, %xmm9<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm4<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm7<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]<br>
> -; AVX1-NEXT:Â Â vpmuldq %xmm6, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpmuldq %xmm5, %xmm7, %xmm6<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]<br>
> +; AVX1-NEXT:Â Â vpmuldq %xmm6, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpmuldq %xmm4, %xmm7, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]<br>
> -; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm3 = xmm6[0,1],xmm3[2,3],xmm6[4,5],xmm3[6,7]<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm5, %xmm7, %xmm5<br>
> -; AVX1-NEXT:Â Â vpsrad $31, %xmm5, %xmm6<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm8, %xmm3, %xmm3<br>
> +; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm1 = xmm6[0,1],xmm1[2,3],xmm6[4,5],xmm1[6,7]<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm4, %xmm7, %xmm4<br>
> +; AVX1-NEXT:Â Â vpsrad $31, %xmm4, %xmm6<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]<br>
>Â ; AVX1-NEXT:Â Â vpmuldq %xmm6, %xmm7, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpmuldq %xmm2, %xmm0, %xmm7<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]<br>
>Â ; AVX1-NEXT:Â Â vpblendw {{.*#+}} xmm6 = xmm7[0,1],xmm6[2,3],xmm7[4,5],xmm6[6,7]<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpsrad $31, %xmm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm2, %xmm6, %xmm2<br>
> -; AVX1-NEXT:Â Â vpxor %xmm8, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpacksswb %xmm9, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm0, %ymm3<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm1, %ymm4<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm2, %xmm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm2[1,1,2,3]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm2[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrad $31, %xmm2, %xmm0<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm6, %xmm0<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpacksswb %xmm9, %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm1[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm0, %ymm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm1[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm1[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm2[3,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm4, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, (%rdi)<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm5, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm8, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: smulo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_ssubo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_ssubo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_ssubo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_ssubo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_ssubo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -714,8 +714,8 @@ define <8 x i32> @ssubo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm5, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm0, %ymm8, %ymm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm6, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: ssubo_v8i32:<br>
> @@ -850,52 +850,52 @@ define <16 x i32> @ssubo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpcmpgtd %xmm1, %xmm9, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm5, %xmm4, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm7, %xmm4, %xmm7<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm1, %xmm9, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm3, %xmm4, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpandn %xmm3, %xmm7, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm6, %xmm3, %xmm8<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm3, %xmm1, %xmm3<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm3, %xmm9, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm1, %xmm4, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpandn %xmm1, %xmm7, %xmm1<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm6, %xmm1, %xmm8<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm2, %xmm4<br>
>Â ; AVX1-NEXT:Â Â vpcmpgtd %xmm4, %xmm9, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm5, %xmm6, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm7<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm7, %xmm9, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm3, %xmm6<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm7, %xmm4<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm4, %xmm9, %xmm7<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm7, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm3, %xmm3<br>
> -; AVX1-NEXT:Â Â vpandn %xmm3, %xmm6, %xmm3<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm9, %xmm6<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm7, %xmm9, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm1, %xmm6<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm4, %xmm7, %xmm7<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm7, %xmm9, %xmm4<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm4, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vpandn %xmm1, %xmm6, %xmm1<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm9, %xmm4<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm0, %xmm9, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm5, %xmm6, %xmm6<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm0, %xmm9, %xmm7<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm7, %xmm7<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm6, %xmm7, %xmm6<br>
> -; AVX1-NEXT:Â Â vpsubd %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpcmpgtd %xmm0, %xmm9, %xmm2<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpcmpeqd %xmm2, %xmm7, %xmm2<br>
> -; AVX1-NEXT:Â Â vpxor %xmm5, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpandn %xmm2, %xmm6, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpacksswb %xmm8, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm3<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm10, %ymm1, %ymm4<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm2, %xmm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm2[1,1,2,3]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm2[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm4, %xmm6, %xmm4<br>
> +; AVX1-NEXT:Â Â vpsubd %xmm2, %xmm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpcmpgtd %xmm2, %xmm9, %xmm0<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm6, %xmm0<br>
> +; AVX1-NEXT:Â Â vpxor %xmm5, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpandn %xmm0, %xmm4, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm1, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpacksswb %xmm8, %xmm0, %xmm1<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm1[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm2 = xmm2[3,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm4, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, (%rdi)<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm4, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm10, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm7, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: ssubo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_uaddo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_uaddo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_uaddo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_uaddo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_uaddo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -501,8 +501,8 @@ define <8 x i32> @uaddo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm1, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm4, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: uaddo_v8i32:<br>
> @@ -633,19 +633,19 @@ define <16 x i32> @uaddo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpackssdw %xmm7, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpacksswb %xmm1, %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm2, %ymm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm3, %ymm3<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[1,1,2,3]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm1[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm0, %ymm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm1[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm6, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm1[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm4, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm2, (%rdi)<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm6, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm5, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: uaddo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_umulo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_umulo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_umulo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_umulo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_umulo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -843,10 +843,10 @@ define <8 x i32> @umulo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm8, %xmm5, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm5, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm5, %ymm2<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm3<br>
>Â ; AVX1-NEXT:Â Â vpmulld %xmm1, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, (%rdi)<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm4, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm0, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vmovaps %ymm2, %ymm0<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1111,23 +1111,23 @@ define <16 x i32> @umulo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm9, %xmm5, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vpackssdw %xmm13, %xmm5, %xmm5<br>
>Â ; AVX1-NEXT:Â Â vpacksswb %xmm11, %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpmulld %xmm6, %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm2<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm10, %xmm12, %xmm0<br>
> -; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm3<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm3, %xmm1, %xmm3<br>
> +; AVX1-NEXT:Â Â vpmulld %xmm10, %xmm12, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm5, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm5[1,1,2,3]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm5[2,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm5[3,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm2, (%rdi)<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm5 = xmm5[3,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm5, %xmm5<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm1, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm6, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: umulo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vec_usubo.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_usubo.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_usubo.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vec_usubo.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vec_usubo.ll Tue Jun 4 09:40:04 2019<br>
> @@ -525,8 +525,8 @@ define <8 x i32> @usubo_v8i32(<8 x i32><br>
>Â ; AVX1-NEXT:Â Â vpcmpeqd %xmm0, %xmm1, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm4, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vinsertf128 $1, %xmm3, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: usubo_v8i32:<br>
> @@ -671,19 +671,19 @@ define <16 x i32> @usubo_v16i32(<16 x i3<br>
>Â ; AVX1-NEXT:Â Â vpxor %xmm6, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpackssdw %xmm7, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpacksswb %xmm1, %xmm0, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm2, %ymm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm3, %ymm3<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[1,1,2,3]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]<br>
> -; AVX1-NEXT:Â Â vpmovsxbd %xmm4, %xmm4<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm1[1,1,2,3]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm6, %xmm6<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm0, %ymm0<br>
> +; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm6 = xmm1[2,3,0,1]<br>
> +; AVX1-NEXT:Â Â vpmovsxbd %xmm6, %xmm6<br>
>Â ; AVX1-NEXT:Â Â vpshufd {{.*#+}} xmm1 = xmm1[3,3,0,1]<br>
>Â ; AVX1-NEXT:Â Â vpmovsxbd %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm4, %ymm1<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm3, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm2, (%rdi)<br>
> +; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm6, %ymm1<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm5, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: usubo_v16i32:<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vector-gep.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-gep.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-gep.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vector-gep.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vector-gep.ll Tue Jun 4 09:40:04 2019<br>
> @@ -122,74 +122,88 @@ define <64 x i16*> @AGEP9(i16* %param, <<br>
>Â ; CHECK-NEXT:Â Â pushl %ebp<br>
>Â ; CHECK-NEXT:Â Â movl %esp, %ebp<br>
>Â ; CHECK-NEXT:Â Â andl $-32, %esp<br>
> -; CHECK-NEXT:Â Â subl $96, %esp<br>
> -; CHECK-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm3, %xmm4<br>
> -; CHECK-NEXT:Â Â vbroadcastss 12(%ebp), %xmm3<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm3, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm3, %xmm0<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm0, %ymm0<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm0, {{[-0-9]+}}(%e{{[sb]}}p) # 32-byte Spill<br>
> -; CHECK-NEXT:Â Â vextractf128 $1, %ymm1, %xmm4<br>
> +; CHECK-NEXT:Â Â subl $160, %esp<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm3<br>
> +; CHECK-NEXT:Â Â vbroadcastss 12(%ebp), %xmm5<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm5, %xmm3<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm3, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vextractf128 $1, %ymm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm1, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vextractf128 $1, %ymm1, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm2, %xmm2, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vextractf128 $1, %ymm2, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vmovdqa 40(%ebp), %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vmovdqa 56(%ebp), %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vmovdqa 72(%ebp), %xmm3<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm3, %xmm3<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, (%esp) # 16-byte Spill<br>
> +; CHECK-NEXT:Â Â vmovdqa 88(%ebp), %xmm4<br>
>Â ; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm4, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm3, %xmm4<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm5, %xmm4<br>
> +; CHECK-NEXT:Â Â vmovdqa 104(%ebp), %xmm1<br>
>Â ; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm1, %xmm1<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm3, %xmm1<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm1, %ymm0<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm0, (%esp) # 32-byte Spill<br>
> -; CHECK-NEXT:Â Â vextractf128 $1, %ymm2, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm4, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm3, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm2, %xmm2, %xmm2<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm2, %xmm3, %xmm2<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm4, %ymm2, %ymm2<br>
> -; CHECK-NEXT:Â Â vmovdqa 40(%ebp), %xmm4<br>
> -; CHECK-NEXT:Â Â vmovdqa 56(%ebp), %xmm5<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm5, %xmm5, %xmm5<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm5, %xmm3, %xmm5<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm4, %xmm4<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm4, %xmm3, %xmm4<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm5, %ymm4, %ymm4<br>
> -; CHECK-NEXT:Â Â vmovdqa 72(%ebp), %xmm5<br>
> -; CHECK-NEXT:Â Â vmovdqa 88(%ebp), %xmm6<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm6, %xmm6, %xmm6<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm6, %xmm3, %xmm6<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm5, %xmm5, %xmm5<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm5, %xmm3, %xmm5<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm6, %ymm5, %ymm5<br>
> -; CHECK-NEXT:Â Â vmovdqa 104(%ebp), %xmm6<br>
> -; CHECK-NEXT:Â Â vmovdqa 120(%ebp), %xmm7<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm7, %xmm7<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm3, %xmm7<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm5, %xmm1<br>
> +; CHECK-NEXT:Â Â vmovdqa 120(%ebp), %xmm6<br>
>Â ; CHECK-NEXT:Â Â vpaddd %xmm6, %xmm6, %xmm6<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm6, %xmm3, %xmm6<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm6, %ymm6<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm6, %xmm5, %xmm6<br>
> +; CHECK-NEXT:Â Â vmovdqa 136(%ebp), %xmm2<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm2, %xmm2, %xmm2<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm2, %xmm5, %xmm2<br>
>Â ; CHECK-NEXT:Â Â vmovdqa 152(%ebp), %xmm7<br>
>Â ; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm7, %xmm7<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm3, %xmm7<br>
> -; CHECK-NEXT:Â Â vmovdqa 136(%ebp), %xmm0<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm5, %xmm7<br>
> +; CHECK-NEXT:Â Â vmovdqa 168(%ebp), %xmm0<br>
>Â ; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm0, %xmm0<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm3, %xmm0<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm0, %ymm0<br>
> -; CHECK-NEXT:Â Â vmovdqa 184(%ebp), %xmm7<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm7, %xmm7<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm7, %xmm3, %xmm7<br>
> -; CHECK-NEXT:Â Â vmovdqa 168(%ebp), %xmm1<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm1, %xmm1<br>
> -; CHECK-NEXT:Â Â vpaddd %xmm1, %xmm3, %xmm1<br>
> -; CHECK-NEXT:Â Â vinsertf128 $1, %xmm7, %ymm1, %ymm1<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm0, %xmm5, %xmm0<br>
> +; CHECK-NEXT:Â Â vmovdqa 184(%ebp), %xmm3<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm3, %xmm3<br>
> +; CHECK-NEXT:Â Â vpaddd %xmm3, %xmm5, %xmm3<br>
>Â ; CHECK-NEXT:Â Â movl 8(%ebp), %eax<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm1, 224(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm0, 192(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm6, 160(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm5, 128(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm4, 96(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm2, 64(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps (%esp), %ymm0 # 32-byte Reload<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm0, 32(%eax)<br>
> -; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %ymm0 # 32-byte Reload<br>
> -; CHECK-NEXT:Â Â vmovaps %ymm0, (%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm3, 240(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm0, 224(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm7, 208(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm2, 192(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm6, 176(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm1, 160(%eax)<br>
> +; CHECK-NEXT:Â Â vmovdqa %xmm4, 144(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps (%esp), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 128(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 112(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 96(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 80(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 64(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 48(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 32(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, 16(%eax)<br>
> +; CHECK-NEXT:Â Â vmovaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload<br>
> +; CHECK-NEXT:Â Â vmovaps %xmm0, (%eax)<br>
>Â ; CHECK-NEXT:Â Â movl %ebp, %esp<br>
>Â ; CHECK-NEXT:Â Â popl %ebp<br>
>Â ; CHECK-NEXT:Â Â vzeroupper<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vector-trunc-widen.ll Tue Jun 4 09:40:04 2019<br>
> @@ -668,14 +668,14 @@ define void @trunc16i32_16i16(<16 x i32><br>
>Â ; AVX1-LABEL: trunc16i32_16i16:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535]<br>
> -; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm3, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -686,8 +686,8 @@ define void @trunc16i32_16i16(<16 x i32><br>
>Â ; AVX2-NEXT:Â Â vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]<br>
>Â ; AVX2-NEXT:Â Â vpshufb %ymm2, %ymm1, %ymm1<br>
>Â ; AVX2-NEXT:Â Â vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]<br>
> -; AVX2-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX2-NEXT:Â Â vzeroupper<br>
>Â ; AVX2-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -717,16 +717,16 @@ define void @trunc16i32_16i16_ashr(<16 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: trunc16i32_16i16_ashr:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrad $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrad $16, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrad $16, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -792,16 +792,16 @@ define void @trunc16i32_16i16_lshr(<16 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: trunc16i32_16i16_lshr:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrld $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrld $16, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrld $16, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1291,14 +1291,14 @@ define void @trunc32i16_32i8(<32 x i16><br>
>Â ; AVX1-LABEL: trunc32i16_32i8:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]<br>
> -; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackuswb %xmm3, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpackuswb %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> +; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1317,23 +1317,19 @@ define void @trunc32i16_32i8(<32 x i16><br>
>Â ;<br>
>Â ; AVX512F-LABEL: trunc32i16_32i8:<br>
>Â ; AVX512F:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; AVX512F-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; AVX512F-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512F-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm1, (%rax)<br>
> +; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm0, (%rax)<br>
>Â ; AVX512F-NEXT:Â Â vzeroupper<br>
>Â ; AVX512F-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512VL-LABEL: trunc32i16_32i8:<br>
>Â ; AVX512VL:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512VL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512VL-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm1, (%rax)<br>
> +; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm0, (%rax)<br>
>Â ; AVX512VL-NEXT:Â Â vzeroupper<br>
>Â ; AVX512VL-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/vector-trunc.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-trunc.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-trunc.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/vector-trunc.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/vector-trunc.ll Tue Jun 4 09:40:04 2019<br>
> @@ -678,14 +678,14 @@ define void @trunc16i32_16i16(<16 x i32><br>
>Â ; AVX1-LABEL: trunc16i32_16i16:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535]<br>
> -; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm3, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -696,8 +696,8 @@ define void @trunc16i32_16i16(<16 x i32><br>
>Â ; AVX2-NEXT:Â Â vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]<br>
>Â ; AVX2-NEXT:Â Â vpshufb %ymm2, %ymm1, %ymm1<br>
>Â ; AVX2-NEXT:Â Â vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]<br>
> -; AVX2-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX2-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX2-NEXT:Â Â vzeroupper<br>
>Â ; AVX2-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -727,16 +727,16 @@ define void @trunc16i32_16i16_ashr(<16 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: trunc16i32_16i16_ashr:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrad $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrad $16, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrad $16, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrad $16, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackssdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -802,16 +802,16 @@ define void @trunc16i32_16i16_lshr(<16 x<br>
>Â ;<br>
>Â ; AVX1-LABEL: trunc16i32_16i16_lshr:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpsrld $16, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
>Â ; AVX1-NEXT:Â Â vpsrld $16, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrld $16, %xmm2, %xmm2<br>
> +; AVX1-NEXT:Â Â vpsrld $16, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vpackusdw %xmm2, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1301,14 +1301,14 @@ define void @trunc32i16_32i8(<32 x i16><br>
>Â ; AVX1-LABEL: trunc32i16_32i8:<br>
>Â ; AVX1:Â Â Â Â # %bb.0: # %entry<br>
>Â ; AVX1-NEXT:Â Â vmovaps {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]<br>
> -; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm3<br>
> -; AVX1-NEXT:Â Â vpackuswb %xmm3, %xmm1, %xmm1<br>
>Â ; AVX1-NEXT:Â Â vandps %ymm2, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm2<br>
> -; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rax)<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm0, %xmm3<br>
> +; AVX1-NEXT:Â Â vpackuswb %xmm3, %xmm0, %xmm0<br>
> +; AVX1-NEXT:Â Â vandps %ymm2, %ymm1, %ymm1<br>
> +; AVX1-NEXT:Â Â vextractf128 $1, %ymm1, %xmm2<br>
> +; AVX1-NEXT:Â Â vpackuswb %xmm2, %xmm1, %xmm1<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rax)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, (%rax)<br>
>Â ; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
> @@ -1327,23 +1327,19 @@ define void @trunc32i16_32i8(<32 x i16><br>
>Â ;<br>
>Â ; AVX512F-LABEL: trunc32i16_32i8:<br>
>Â ; AVX512F:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; AVX512F-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; AVX512F-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512F-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512F-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm1, (%rax)<br>
> +; AVX512F-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512F-NEXT:Â Â vpmovdb %zmm0, (%rax)<br>
>Â ; AVX512F-NEXT:Â Â vzeroupper<br>
>Â ; AVX512F-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512VL-LABEL: trunc32i16_32i8:<br>
>Â ; AVX512VL:Â Â Â Â # %bb.0: # %entry<br>
> -; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm0, %xmm0<br>
>Â ; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero<br>
> -; AVX512VL-NEXT:Â Â vpmovdb %zmm1, %xmm1<br>
> -; AVX512VL-NEXT:Â Â vinserti128 $1, %xmm1, %ymm0, %ymm0<br>
> -; AVX512VL-NEXT:Â Â vmovdqu %ymm0, (%rax)<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm1, (%rax)<br>
> +; AVX512VL-NEXT:Â Â vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero<br>
> +; AVX512VL-NEXT:Â Â vpmovdb %zmm0, (%rax)<br>
>Â ; AVX512VL-NEXT:Â Â vzeroupper<br>
>Â ; AVX512VL-NEXT:Â Â retq<br>
>Â ;<br>
><br>
> Modified: llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll?rev=362524&r1=362523&r2=362524&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll?rev=362524&r1=362523&r2=362524&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll (original)<br>
> +++ llvm/trunk/test/CodeGen/X86/x86-interleaved-access.ll Tue Jun 4 09:40:04 2019<br>
> @@ -341,11 +341,10 @@ define void @interleaved_store_vf16_i8_s<br>
>Â ; AVX1-NEXT:Â Â vpunpckhwd {{.*#+}} xmm1 = xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]<br>
>Â ; AVX1-NEXT:Â Â vpunpcklwd {{.*#+}} xmm4 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]<br>
>Â ; AVX1-NEXT:Â Â vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm1, %ymm3, %ymm1<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm4, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm1, (%rdi)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm0, 48(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm4, 32(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm1, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqa %xmm3, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: interleaved_store_vf16_i8_stride4:<br>
> @@ -358,11 +357,10 @@ define void @interleaved_store_vf16_i8_s<br>
>Â ; AVX2-NEXT:Â Â vpunpckhwd {{.*#+}} xmm1 = xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]<br>
>Â ; AVX2-NEXT:Â Â vpunpcklwd {{.*#+}} xmm4 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]<br>
>Â ; AVX2-NEXT:Â Â vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]<br>
> -; AVX2-NEXT:Â Â vinserti128 $1, %xmm1, %ymm3, %ymm1<br>
> -; AVX2-NEXT:Â Â vinserti128 $1, %xmm0, %ymm4, %ymm0<br>
> -; AVX2-NEXT:Â Â vmovdqa %ymm0, 32(%rdi)<br>
> -; AVX2-NEXT:Â Â vmovdqa %ymm1, (%rdi)<br>
> -; AVX2-NEXT:Â Â vzeroupper<br>
> +; AVX2-NEXT:Â Â vmovdqa %xmm0, 48(%rdi)<br>
> +; AVX2-NEXT:Â Â vmovdqa %xmm4, 32(%rdi)<br>
> +; AVX2-NEXT:Â Â vmovdqa %xmm1, 16(%rdi)<br>
> +; AVX2-NEXT:Â Â vmovdqa %xmm3, (%rdi)<br>
>Â ; AVX2-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512-LABEL: interleaved_store_vf16_i8_stride4:<br>
> @@ -888,37 +886,20 @@ define <32 x i1> @interleaved_load_vf32_<br>
>Â }<br>
>Â <br>
>Â define void @interleaved_store_vf8_i8_stride4(<8 x i8> %x1, <8 x i8> %x2, <8 x i8> %x3, <8 x i8> %x4, <32 x i8>* %p) {<br>
> -; AVX1-LABEL: interleaved_store_vf8_i8_stride4:<br>
> -; AVX1:Â Â Â Â # %bb.0:<br>
> -; AVX1-NEXT:Â Â vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u><br>
> -; AVX1-NEXT:Â Â vpshufb %xmm4, %xmm1, %xmm1<br>
> -; AVX1-NEXT:Â Â vpshufb %xmm4, %xmm0, %xmm0<br>
> -; AVX1-NEXT:Â Â vpunpcklbw {{.*#+}} 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>
> -; AVX1-NEXT:Â Â vpshufb %xmm4, %xmm3, %xmm1<br>
> -; AVX1-NEXT:Â Â vpshufb %xmm4, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vpunpcklbw {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]<br>
> -; AVX1-NEXT:Â Â vpunpcklwd {{.*#+}} xmm2 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]<br>
> -; AVX1-NEXT:Â Â vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm2, %ymm0<br>
> -; AVX1-NEXT:Â Â vmovaps %ymm0, (%rdi)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
> -; AVX1-NEXT:Â Â retq<br>
> -;<br>
> -; AVX2OR512-LABEL: interleaved_store_vf8_i8_stride4:<br>
> -; AVX2OR512:Â Â Â Â # %bb.0:<br>
> -; AVX2OR512-NEXT:Â Â vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u><br>
> -; AVX2OR512-NEXT:Â Â vpshufb %xmm4, %xmm1, %xmm1<br>
> -; AVX2OR512-NEXT:Â Â vpshufb %xmm4, %xmm0, %xmm0<br>
> -; AVX2OR512-NEXT:Â Â vpunpcklbw {{.*#+}} 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>
> -; AVX2OR512-NEXT:Â Â vpshufb %xmm4, %xmm3, %xmm1<br>
> -; AVX2OR512-NEXT:Â Â vpshufb %xmm4, %xmm2, %xmm2<br>
> -; AVX2OR512-NEXT:Â Â vpunpcklbw {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]<br>
> -; AVX2OR512-NEXT:Â Â vpunpcklwd {{.*#+}} xmm2 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]<br>
> -; AVX2OR512-NEXT:Â Â vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]<br>
> -; AVX2OR512-NEXT:Â Â vinserti128 $1, %xmm0, %ymm2, %ymm0<br>
> -; AVX2OR512-NEXT:Â Â vmovdqa %ymm0, (%rdi)<br>
> -; AVX2OR512-NEXT:Â Â vzeroupper<br>
> -; AVX2OR512-NEXT:Â Â retq<br>
> +; AVX-LABEL: interleaved_store_vf8_i8_stride4:<br>
> +; AVX:Â Â Â Â # %bb.0:<br>
> +; AVX-NEXT:Â Â vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u><br>
> +; AVX-NEXT:Â Â vpshufb %xmm4, %xmm1, %xmm1<br>
> +; AVX-NEXT:Â Â vpshufb %xmm4, %xmm0, %xmm0<br>
> +; AVX-NEXT:Â Â vpunpcklbw {{.*#+}} 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>
> +; AVX-NEXT:Â Â vpshufb %xmm4, %xmm3, %xmm1<br>
> +; AVX-NEXT:Â Â vpshufb %xmm4, %xmm2, %xmm2<br>
> +; AVX-NEXT:Â Â vpunpcklbw {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]<br>
> +; AVX-NEXT:Â Â vpunpcklwd {{.*#+}} xmm2 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]<br>
> +; AVX-NEXT:Â Â vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]<br>
> +; AVX-NEXT:Â Â vmovdqa %xmm0, 16(%rdi)<br>
> +; AVX-NEXT:Â Â vmovdqa %xmm2, (%rdi)<br>
> +; AVX-NEXT:Â Â retq<br>
>Â %v1 = shufflevector <8 x i8> %x1, <8 x i8> %x2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15><br>
>Â %v2 = shufflevector <8 x i8> %x3, <8 x i8> %x4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15><br>
>Â %interleaved.vec = shufflevector <16 x i8> %v1, <16 x i8> %v2, <32 x i32> <i32 0,i32 8,i32 16,i32 24,i32 1,i32 9,i32 17,i32 25,i32 2,i32 10,i32 18,i32 26,i32 3,i32 11,i32 19,i32 27,i32 4,i32 12,i32 20,i32 28,i32 5,i32 13,i32 21,i32 29,i32 6,i32 14,i32 22,i32 30,i32 7,i32 15,i32 23,i32 31><br>
> @@ -1096,10 +1077,9 @@ define void @interleaved_store_vf16_i8_s<br>
>Â ; AVX1-NEXT:Â Â vpshufb %xmm3, %xmm0, %xmm0<br>
>Â ; AVX1-NEXT:Â Â vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]<br>
>Â ; AVX1-NEXT:Â Â vpshufb %xmm3, %xmm2, %xmm2<br>
> -; AVX1-NEXT:Â Â vinsertf128 $1, %xmm0, %ymm1, %ymm0<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm0, 16(%rdi)<br>
> +; AVX1-NEXT:Â Â vmovdqu %xmm1, (%rdi)<br>
>Â ; AVX1-NEXT:Â Â vmovdqu %xmm2, 32(%rdi)<br>
> -; AVX1-NEXT:Â Â vmovups %ymm0, (%rdi)<br>
> -; AVX1-NEXT:Â Â vzeroupper<br>
>Â ; AVX1-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX2-LABEL: interleaved_store_vf16_i8_stride3:<br>
> @@ -1116,10 +1096,9 @@ define void @interleaved_store_vf16_i8_s<br>
>Â ; AVX2-NEXT:Â Â vpshufb %xmm3, %xmm0, %xmm0<br>
>Â ; AVX2-NEXT:Â Â vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]<br>
>Â ; AVX2-NEXT:Â Â vpshufb %xmm3, %xmm2, %xmm2<br>
> -; AVX2-NEXT:Â Â vinserti128 $1, %xmm0, %ymm1, %ymm0<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm0, 16(%rdi)<br>
> +; AVX2-NEXT:Â Â vmovdqu %xmm1, (%rdi)<br>
>Â ; AVX2-NEXT:Â Â vmovdqu %xmm2, 32(%rdi)<br>
> -; AVX2-NEXT:Â Â vmovdqu %ymm0, (%rdi)<br>
> -; AVX2-NEXT:Â Â vzeroupper<br>
>Â ; AVX2-NEXT:Â Â retq<br>
>Â ;<br>
>Â ; AVX512-LABEL: interleaved_store_vf16_i8_stride3:<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>
</blockquote></div>