[llvm] r364432 - [X86][SSE] X86TargetLowering::isCommutativeBinOp - add PCMPEQ

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 26 07:40:49 PDT 2019


Author: rksimon
Date: Wed Jun 26 07:40:49 2019
New Revision: 364432

URL: http://llvm.org/viewvc/llvm-project?rev=364432&view=rev
Log:
[X86][SSE] X86TargetLowering::isCommutativeBinOp - add PCMPEQ

Allows narrowInsertExtractVectorBinOp to reduce vector size

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/test/CodeGen/X86/avx512-insert-extract.ll
    llvm/trunk/test/CodeGen/X86/kshift.ll
    llvm/trunk/test/CodeGen/X86/masked_compressstore.ll
    llvm/trunk/test/CodeGen/X86/masked_expandload.ll
    llvm/trunk/test/CodeGen/X86/masked_store.ll
    llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll
    llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll
    llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jun 26 07:40:49 2019
@@ -28586,6 +28586,7 @@ bool X86TargetLowering::isBinOp(unsigned
 bool X86TargetLowering::isCommutativeBinOp(unsigned Opcode) const {
   switch (Opcode) {
   // TODO: Add more X86ISD opcodes once we have test coverage.
+  case X86ISD::PCMPEQ:
   case X86ISD::PMULUDQ:
   case X86ISD::FMAXC:
   case X86ISD::FMINC:

Modified: llvm/trunk/test/CodeGen/X86/avx512-insert-extract.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-insert-extract.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/avx512-insert-extract.ll (original)
+++ llvm/trunk/test/CodeGen/X86/avx512-insert-extract.ll Wed Jun 26 07:40:49 2019
@@ -987,8 +987,8 @@ define zeroext i8 @test_extractelement_v
 define zeroext i8 @test_extractelement_v32i1(<32 x i8> %a, <32 x i8> %b) {
 ; KNL-LABEL: test_extractelement_v32i1:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    vpminub %ymm1, %ymm0, %ymm1
-; KNL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
+; KNL-NEXT:    vpminub %xmm1, %xmm0, %xmm1
+; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
 ; KNL-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
@@ -1015,9 +1015,10 @@ define zeroext i8 @test_extractelement_v
 define zeroext i8 @test_extractelement_v64i1(<64 x i8> %a, <64 x i8> %b) {
 ; KNL-LABEL: test_extractelement_v64i1:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    vpminub %ymm3, %ymm1, %ymm0
-; KNL-NEXT:    vpcmpeqb %ymm0, %ymm1, %ymm0
-; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
+; KNL-NEXT:    vextracti128 $1, %ymm3, %xmm0
+; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; KNL-NEXT:    vpminub %xmm0, %xmm1, %xmm0
+; KNL-NEXT:    vpcmpeqb %xmm0, %xmm1, %xmm0
 ; KNL-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
@@ -1048,9 +1049,10 @@ define zeroext i8 @test_extractelement_v
 define zeroext i8 @extractelement_v64i1_alt(<64 x i8> %a, <64 x i8> %b) {
 ; KNL-LABEL: extractelement_v64i1_alt:
 ; KNL:       ## %bb.0:
-; KNL-NEXT:    vpminub %ymm3, %ymm1, %ymm0
-; KNL-NEXT:    vpcmpeqb %ymm0, %ymm1, %ymm0
-; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
+; KNL-NEXT:    vextracti128 $1, %ymm3, %xmm0
+; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; KNL-NEXT:    vpminub %xmm0, %xmm1, %xmm0
+; KNL-NEXT:    vpcmpeqb %xmm0, %xmm1, %xmm0
 ; KNL-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0

Modified: llvm/trunk/test/CodeGen/X86/kshift.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/kshift.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/kshift.ll (original)
+++ llvm/trunk/test/CodeGen/X86/kshift.ll Wed Jun 26 07:40:49 2019
@@ -270,12 +270,12 @@ define i64 @kshiftl_v64i1_63(<64 x i8> %
 ; KNL-LABEL: kshiftl_v64i1_63:
 ; KNL:       # %bb.0:
 ; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; KNL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
+; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
 ; KNL-NEXT:    kshiftlw $15, %k0, %k1
-; KNL-NEXT:    vpcmpeqb %ymm1, %ymm3, %ymm0
-; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
+; KNL-NEXT:    vextracti128 $1, %ymm3, %xmm0
+; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
 ; KNL-NEXT:    kmovw %k0, %eax
@@ -566,13 +566,13 @@ define i32 @kshiftr_v32i1_31(<32 x i16>
 define i64 @kshiftr_v64i1_63(<64 x i8> %x, <64 x i8> %y) {
 ; KNL-LABEL: kshiftr_v64i1_63:
 ; KNL:       # %bb.0:
-; KNL-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; KNL-NEXT:    vpcmpeqb %ymm0, %ymm1, %ymm1
-; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
-; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm0
+; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; KNL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
+; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
+; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
 ; KNL-NEXT:    kshiftrw $15, %k0, %k1
-; KNL-NEXT:    vpcmpeqb %ymm0, %ymm2, %ymm0
+; KNL-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm0
 ; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
 ; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0 {%k1}
 ; KNL-NEXT:    kmovw %k0, %eax

Modified: llvm/trunk/test/CodeGen/X86/masked_compressstore.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_compressstore.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_compressstore.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_compressstore.ll Wed Jun 26 07:40:49 2019
@@ -2140,8 +2140,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-LABEL: compressstore_v32f32_v32i32:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpextrb $0, %xmm9, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2150,6 +2150,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_2: ## %else
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpextrb $1, %xmm8, %eax
@@ -2160,8 +2161,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_4: ## %else2
 ; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpextrb $2, %xmm9, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2170,6 +2171,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $2, %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_6: ## %else5
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpextrb $3, %xmm8, %eax
@@ -2179,38 +2181,37 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $3, %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_8: ## %else8
-; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vextracti128 $1, %ymm8, %xmm8
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm9
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
-; AVX2-NEXT:    vpextrb $4, %xmm9, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
+; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm9
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm10
 ; AVX2-NEXT:    je LBB6_10
 ; AVX2-NEXT:  ## %bb.9: ## %cond.store10
-; AVX2-NEXT:    vmovd %xmm9, (%rdi)
+; AVX2-NEXT:    vmovd %xmm10, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_10: ## %else11
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm0
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpextrb $5, %xmm0, %eax
+; AVX2-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB6_12
 ; AVX2-NEXT:  ## %bb.11: ## %cond.store13
-; AVX2-NEXT:    vpextrd $1, %xmm9, (%rdi)
+; AVX2-NEXT:    vpextrd $1, %xmm10, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_12: ## %else14
-; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm4, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $6, %xmm0, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB6_14
 ; AVX2-NEXT:  ## %bb.13: ## %cond.store16
-; AVX2-NEXT:    vpextrd $2, %xmm9, (%rdi)
+; AVX2-NEXT:    vpextrd $2, %xmm10, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_14: ## %else17
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
@@ -2219,12 +2220,12 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB6_16
 ; AVX2-NEXT:  ## %bb.15: ## %cond.store19
-; AVX2-NEXT:    vpextrd $3, %xmm9, (%rdi)
+; AVX2-NEXT:    vpextrd $3, %xmm10, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_16: ## %else20
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm5, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2233,6 +2234,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm1, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_18: ## %else23
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm5, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
@@ -2243,8 +2245,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_20: ## %else26
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm5, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2253,6 +2255,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $2, %xmm1, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_22: ## %else29
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm5, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
@@ -2262,10 +2265,10 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $3, %xmm1, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_24: ## %else32
+; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm4
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm5, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm4, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2275,7 +2278,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_26: ## %else35
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm1
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
 ; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2285,8 +2288,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_28: ## %else38
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm5, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm4, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $14, %xmm4, %eax
@@ -2306,8 +2308,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_32: ## %else44
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm6, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm6, %xmm1
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2316,6 +2318,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm2, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_34: ## %else47
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm6, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $1, %xmm0, %eax
@@ -2326,8 +2329,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_36: ## %else50
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm6, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm6, %xmm1
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2336,6 +2339,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $2, %xmm2, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_38: ## %else53
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm6, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $3, %xmm0, %eax
@@ -2345,10 +2349,10 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $3, %xmm2, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_40: ## %else56
+; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm1
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm6, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm1, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $4, %xmm0, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2358,18 +2362,17 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_42: ## %else59
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB6_44
 ; AVX2-NEXT:  ## %bb.43: ## %cond.store61
 ; AVX2-NEXT:    vpextrd $1, %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_44: ## %else62
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm6, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
@@ -2389,8 +2392,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_48: ## %else68
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm7, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm7, %xmm1
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2399,6 +2402,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm3, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_50: ## %else71
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm7, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $9, %xmm0, %eax
@@ -2409,8 +2413,8 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_52: ## %else74
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm7, %ymm0
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm7, %xmm1
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
 ; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2419,6 +2423,7 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $2, %xmm3, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_54: ## %else77
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm7, %xmm0
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $11, %xmm0, %eax
@@ -2428,10 +2433,10 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vpextrd $3, %xmm3, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_56: ## %else80
+; AVX2-NEXT:    vextracti128 $1, %ymm7, %xmm1
 ; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
-; AVX2-NEXT:    vpcmpeqd %ymm0, %ymm7, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm1, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2441,18 +2446,17 @@ define void @compressstore_v32f32_v32i32
 ; AVX2-NEXT:    vmovd %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_58: ## %else83
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB6_60
 ; AVX2-NEXT:  ## %bb.59: ## %cond.store85
 ; AVX2-NEXT:    vpextrd $1, %xmm0, (%rdi)
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB6_60: ## %else86
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm7, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $14, %xmm2, %eax

Modified: llvm/trunk/test/CodeGen/X86/masked_expandload.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_expandload.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_expandload.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_expandload.ll Wed Jun 26 07:40:49 2019
@@ -214,15 +214,16 @@ define <4 x double> @expandload_v4f64_v4
 ; AVX2-LABEL: expandload_v4f64_v4i64:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm3
+; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB1_2
 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
-; AVX2-NEXT:    vmovsd {{.*#+}} xmm3 = mem[0],zero
-; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm3[0],ymm0[1,2,3]
+; AVX2-NEXT:    vmovq {{.*#+}} xmm3 = mem[0],zero
+; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm3[0,1],ymm0[2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB1_2: ## %else
+; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB1_4
@@ -231,9 +232,9 @@ define <4 x double> @expandload_v4f64_v4
 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm2[0,1],ymm0[2,3]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB1_4: ## %else2
-; AVX2-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm1, %ymm1
 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB1_6
@@ -975,8 +976,8 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-LABEL: expandload_v16f64_v16i32:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm6, %xmm6, %xmm6
-; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm7
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm7
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm7, %xmm7
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
 ; AVX2-NEXT:    vpextrb $0, %xmm7, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -986,6 +987,7 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm7[0,1],ymm0[2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_2: ## %else
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpextrb $1, %xmm6, %eax
@@ -997,8 +999,8 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_4: ## %else2
 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
-; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm7
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm7
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm7, %xmm7
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
 ; AVX2-NEXT:    vpextrb $2, %xmm7, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1009,6 +1011,7 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vinsertf128 $1, %xmm7, %ymm0, %ymm0
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_6: ## %else6
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpextrb $3, %xmm6, %eax
@@ -1020,9 +1023,9 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_8: ## %else10
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
-; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
-; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm6
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm6, %xmm0, %xmm7
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
 ; AVX2-NEXT:    vpextrb $4, %xmm7, %eax
@@ -1044,8 +1047,7 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_12: ## %else18
 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
-; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpextrb $6, %xmm6, %eax
@@ -1069,8 +1071,8 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_16: ## %else26
 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm6
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm6
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
 ; AVX2-NEXT:    vpextrb $8, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1080,6 +1082,7 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm2 = ymm6[0,1],ymm2[2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_18: ## %else30
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
@@ -1091,8 +1094,8 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_20: ## %else34
 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm6
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm6
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
 ; AVX2-NEXT:    vpextrb $10, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1103,6 +1106,7 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm2, %ymm2
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_22: ## %else38
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
@@ -1114,10 +1118,10 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_24: ## %else42
-; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm6
+; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm4
+; AVX2-NEXT:    vpxor %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
 ; AVX2-NEXT:    vpextrb $12, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1127,19 +1131,18 @@ define <16 x double> @expandload_v16f64_
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm3 = ymm6[0,1],ymm3[2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_26: ## %else46
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
-; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
-; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm5
+; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
+; AVX2-NEXT:    vpextrb $13, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB3_28
 ; AVX2-NEXT:  ## %bb.27: ## %cond.load49
-; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm3[0],mem[0]
-; AVX2-NEXT:    vblendpd {{.*#+}} ymm3 = ymm4[0,1],ymm3[2,3]
+; AVX2-NEXT:    vmovhpd {{.*#+}} xmm5 = xmm3[0],mem[0]
+; AVX2-NEXT:    vblendpd {{.*#+}} ymm3 = ymm5[0,1],ymm3[2,3]
 ; AVX2-NEXT:    addq $8, %rdi
 ; AVX2-NEXT:  LBB3_28: ## %else50
-; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
+; AVX2-NEXT:    vxorpd %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax
@@ -2570,8 +2573,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-LABEL: expandload_v32f32_v32i32:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpextrb $0, %xmm9, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2581,6 +2584,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm9[0],ymm0[1,2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_2: ## %else
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpextrb $1, %xmm8, %eax
@@ -2592,8 +2596,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_4: ## %else2
 ; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
 ; AVX2-NEXT:    vpextrb $2, %xmm9, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2603,6 +2607,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm9[0,1,2,3],ymm0[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_6: ## %else6
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
 ; AVX2-NEXT:    vpextrb $3, %xmm8, %eax
@@ -2613,35 +2618,34 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm0[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_8: ## %else10
-; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
-; AVX2-NEXT:    vextracti128 $1, %ymm8, %xmm8
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm9
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
-; AVX2-NEXT:    vpextrb $4, %xmm9, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
+; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm9
+; AVX2-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB8_10
 ; AVX2-NEXT:  ## %bb.9: ## %cond.load13
-; AVX2-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
-; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm10
-; AVX2-NEXT:    vblendps {{.*#+}} xmm9 = xmm9[0],xmm10[1,2,3]
-; AVX2-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
+; AVX2-NEXT:    vmovss {{.*#+}} xmm10 = mem[0],zero,zero,zero
+; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4
+; AVX2-NEXT:    vblendps {{.*#+}} xmm4 = xmm10[0],xmm4[1,2,3]
+; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_10: ## %else14
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm8
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
-; AVX2-NEXT:    vpextrb $5, %xmm8, %eax
+; AVX2-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB8_12
 ; AVX2-NEXT:  ## %bb.11: ## %cond.load17
-; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm8
-; AVX2-NEXT:    vinsertps {{.*#+}} xmm8 = xmm8[0],mem[0],xmm8[2,3]
-; AVX2-NEXT:    vinsertf128 $1, %xmm8, %ymm0, %ymm0
+; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4
+; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
+; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_12: ## %else18
-; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
+; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm8
 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
@@ -2664,9 +2668,9 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_16: ## %else26
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
+; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2676,7 +2680,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm4[0],ymm1[1,2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_18: ## %else30
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2686,9 +2691,9 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_20: ## %else34
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm8
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
+; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2698,7 +2703,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_22: ## %else38
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2708,10 +2714,10 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_24: ## %else42
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
+; AVX2-NEXT:    vextracti128 $1, %ymm5, %xmm8
+; AVX2-NEXT:    vpxor %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm8, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2723,7 +2729,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_26: ## %else46
-; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2735,8 +2741,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_28: ## %else50
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax
@@ -2760,8 +2765,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_32: ## %else58
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $0, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2771,6 +2776,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0],ymm2[1,2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_34: ## %else62
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
@@ -2782,8 +2788,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_36: ## %else66
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2793,6 +2799,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_38: ## %else70
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
@@ -2803,22 +2810,22 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_40: ## %else74
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
-; AVX2-NEXT:    vpextrb $4, %xmm5, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm8
+; AVX2-NEXT:    vxorps %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm8, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
+; AVX2-NEXT:    vpextrb $4, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB8_42
 ; AVX2-NEXT:  ## %bb.41: ## %cond.load77
-; AVX2-NEXT:    vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero
-; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm5
-; AVX2-NEXT:    vblendps {{.*#+}} xmm5 = xmm8[0],xmm5[1,2,3]
-; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2
+; AVX2-NEXT:    vmovss {{.*#+}} xmm6 = mem[0],zero,zero,zero
+; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm4
+; AVX2-NEXT:    vblendps {{.*#+}} xmm4 = xmm6[0],xmm4[1,2,3]
+; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_42: ## %else78
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2830,8 +2837,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_44: ## %else82
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $6, %xmm5, %eax
@@ -2855,8 +2861,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_48: ## %else90
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
 ; AVX2-NEXT:    vpextrb $8, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2866,6 +2872,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm3 = ymm5[0],ymm3[1,2,3,4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_50: ## %else94
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
@@ -2877,8 +2884,8 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_52: ## %else98
 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
-; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
 ; AVX2-NEXT:    vpextrb $10, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2888,6 +2895,7 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm3 = ymm5[0,1,2,3],ymm3[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_54: ## %else102
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
@@ -2898,35 +2906,34 @@ define <32 x float> @expandload_v32f32_v
 ; AVX2-NEXT:    vblendps {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_56: ## %else106
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
-; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
-; AVX2-NEXT:    vpextrb $12, %xmm5, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm7, %xmm4
+; AVX2-NEXT:    vxorps %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm5
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
+; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
+; AVX2-NEXT:    vpextrb $12, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB8_58
 ; AVX2-NEXT:  ## %bb.57: ## %cond.load109
-; AVX2-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero
-; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm6
-; AVX2-NEXT:    vblendps {{.*#+}} xmm5 = xmm5[0],xmm6[1,2,3]
-; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
+; AVX2-NEXT:    vmovss {{.*#+}} xmm6 = mem[0],zero,zero,zero
+; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm7
+; AVX2-NEXT:    vblendps {{.*#+}} xmm6 = xmm6[0],xmm7[1,2,3]
+; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm3, %ymm3
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_58: ## %else110
-; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
-; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
-; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
+; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm5
+; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
+; AVX2-NEXT:    vpextrb $13, %xmm5, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB8_60
 ; AVX2-NEXT:  ## %bb.59: ## %cond.load113
-; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm4
-; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
-; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
+; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm5
+; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0],mem[0],xmm5[2,3]
+; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
 ; AVX2-NEXT:    addq $4, %rdi
 ; AVX2-NEXT:  LBB8_60: ## %else114
-; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
-; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
+; AVX2-NEXT:    vxorps %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax

Modified: llvm/trunk/test/CodeGen/X86/masked_store.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_store.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_store.ll Wed Jun 26 07:40:49 2019
@@ -2215,13 +2215,14 @@ define void @store_v16i16_v16i16(<16 x i
 ; AVX2-LABEL: store_v16i16_v16i16:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_2
 ; AVX2-NEXT:  ## %bb.1: ## %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm1, (%rdi)
 ; AVX2-NEXT:  LBB14_2: ## %else
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_4
@@ -2229,13 +2230,14 @@ define void @store_v16i16_v16i16(<16 x i
 ; AVX2-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
 ; AVX2-NEXT:  LBB14_4: ## %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_6
 ; AVX2-NEXT:  ## %bb.5: ## %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
 ; AVX2-NEXT:  LBB14_6: ## %else4
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_8
@@ -2243,13 +2245,14 @@ define void @store_v16i16_v16i16(<16 x i
 ; AVX2-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
 ; AVX2-NEXT:  LBB14_8: ## %else6
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_10
 ; AVX2-NEXT:  ## %bb.9: ## %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
 ; AVX2-NEXT:  LBB14_10: ## %else8
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_12
@@ -2257,79 +2260,77 @@ define void @store_v16i16_v16i16(<16 x i
 ; AVX2-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
 ; AVX2-NEXT:  LBB14_12: ## %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_14
 ; AVX2-NEXT:  ## %bb.13: ## %cond.store11
 ; AVX2-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
 ; AVX2-NEXT:  LBB14_14: ## %else12
+; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_16
 ; AVX2-NEXT:  ## %bb.15: ## %cond.store13
 ; AVX2-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
 ; AVX2-NEXT:  LBB14_16: ## %else14
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpeqw %xmm0, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
 ; AVX2-NEXT:    je LBB14_18
 ; AVX2-NEXT:  ## %bb.17: ## %cond.store15
-; AVX2-NEXT:    vpextrw $0, %xmm1, 16(%rdi)
+; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  LBB14_18: ## %else16
-; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_20
 ; AVX2-NEXT:  ## %bb.19: ## %cond.store17
-; AVX2-NEXT:    vpextrw $1, %xmm1, 18(%rdi)
+; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  LBB14_20: ## %else18
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_22
 ; AVX2-NEXT:  ## %bb.21: ## %cond.store19
-; AVX2-NEXT:    vpextrw $2, %xmm1, 20(%rdi)
+; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  LBB14_22: ## %else20
-; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_24
 ; AVX2-NEXT:  ## %bb.23: ## %cond.store21
-; AVX2-NEXT:    vpextrw $3, %xmm1, 22(%rdi)
+; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  LBB14_24: ## %else22
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_26
 ; AVX2-NEXT:  ## %bb.25: ## %cond.store23
-; AVX2-NEXT:    vpextrw $4, %xmm1, 24(%rdi)
+; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  LBB14_26: ## %else24
-; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_28
 ; AVX2-NEXT:  ## %bb.27: ## %cond.store25
-; AVX2-NEXT:    vpextrw $5, %xmm1, 26(%rdi)
+; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  LBB14_28: ## %else26
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_30
 ; AVX2-NEXT:  ## %bb.29: ## %cond.store27
-; AVX2-NEXT:    vpextrw $6, %xmm1, 28(%rdi)
+; AVX2-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
 ; AVX2-NEXT:  LBB14_30: ## %else28
-; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
+; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB14_32
 ; AVX2-NEXT:  ## %bb.31: ## %cond.store29
-; AVX2-NEXT:    vpextrw $7, %xmm1, 30(%rdi)
+; AVX2-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
 ; AVX2-NEXT:  LBB14_32: ## %else30
 ; AVX2-NEXT:    vzeroupper
 ; AVX2-NEXT:    retq
@@ -4037,13 +4038,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-LABEL: store_v32i8_v32i8:
 ; AVX2:       ## %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_2
 ; AVX2-NEXT:  ## %bb.1: ## %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm1, (%rdi)
 ; AVX2-NEXT:  LBB16_2: ## %else
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_4
@@ -4051,13 +4053,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
 ; AVX2-NEXT:  LBB16_4: ## %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_6
 ; AVX2-NEXT:  ## %bb.5: ## %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
 ; AVX2-NEXT:  LBB16_6: ## %else4
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_8
@@ -4065,13 +4068,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
 ; AVX2-NEXT:  LBB16_8: ## %else6
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_10
 ; AVX2-NEXT:  ## %bb.9: ## %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
 ; AVX2-NEXT:  LBB16_10: ## %else8
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_12
@@ -4079,13 +4083,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
 ; AVX2-NEXT:  LBB16_12: ## %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_14
 ; AVX2-NEXT:  ## %bb.13: ## %cond.store11
 ; AVX2-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
 ; AVX2-NEXT:  LBB16_14: ## %else12
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_16
@@ -4093,13 +4098,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
 ; AVX2-NEXT:  LBB16_16: ## %else14
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_18
 ; AVX2-NEXT:  ## %bb.17: ## %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
 ; AVX2-NEXT:  LBB16_18: ## %else16
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_20
@@ -4107,13 +4113,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
 ; AVX2-NEXT:  LBB16_20: ## %else18
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_22
 ; AVX2-NEXT:  ## %bb.21: ## %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
 ; AVX2-NEXT:  LBB16_22: ## %else20
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_24
@@ -4121,13 +4128,14 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
 ; AVX2-NEXT:  LBB16_24: ## %else22
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_26
 ; AVX2-NEXT:  ## %bb.25: ## %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
 ; AVX2-NEXT:  LBB16_26: ## %else24
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_28
@@ -4135,139 +4143,133 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX2-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
 ; AVX2-NEXT:  LBB16_28: ## %else26
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_30
 ; AVX2-NEXT:  ## %bb.29: ## %cond.store27
 ; AVX2-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
 ; AVX2-NEXT:  LBB16_30: ## %else28
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_32
 ; AVX2-NEXT:  ## %bb.31: ## %cond.store29
 ; AVX2-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
 ; AVX2-NEXT:  LBB16_32: ## %else30
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; AVX2-NEXT:    vpcmpeqb %xmm0, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
 ; AVX2-NEXT:    je LBB16_34
 ; AVX2-NEXT:  ## %bb.33: ## %cond.store31
-; AVX2-NEXT:    vpextrb $0, %xmm1, 16(%rdi)
+; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  LBB16_34: ## %else32
-; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_36
 ; AVX2-NEXT:  ## %bb.35: ## %cond.store33
-; AVX2-NEXT:    vpextrb $1, %xmm1, 17(%rdi)
+; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX2-NEXT:  LBB16_36: ## %else34
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_38
 ; AVX2-NEXT:  ## %bb.37: ## %cond.store35
-; AVX2-NEXT:    vpextrb $2, %xmm1, 18(%rdi)
+; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  LBB16_38: ## %else36
-; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_40
 ; AVX2-NEXT:  ## %bb.39: ## %cond.store37
-; AVX2-NEXT:    vpextrb $3, %xmm1, 19(%rdi)
+; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX2-NEXT:  LBB16_40: ## %else38
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_42
 ; AVX2-NEXT:  ## %bb.41: ## %cond.store39
-; AVX2-NEXT:    vpextrb $4, %xmm1, 20(%rdi)
+; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  LBB16_42: ## %else40
-; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_44
 ; AVX2-NEXT:  ## %bb.43: ## %cond.store41
-; AVX2-NEXT:    vpextrb $5, %xmm1, 21(%rdi)
+; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX2-NEXT:  LBB16_44: ## %else42
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_46
 ; AVX2-NEXT:  ## %bb.45: ## %cond.store43
-; AVX2-NEXT:    vpextrb $6, %xmm1, 22(%rdi)
+; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  LBB16_46: ## %else44
-; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_48
 ; AVX2-NEXT:  ## %bb.47: ## %cond.store45
-; AVX2-NEXT:    vpextrb $7, %xmm1, 23(%rdi)
+; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX2-NEXT:  LBB16_48: ## %else46
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_50
 ; AVX2-NEXT:  ## %bb.49: ## %cond.store47
-; AVX2-NEXT:    vpextrb $8, %xmm1, 24(%rdi)
+; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  LBB16_50: ## %else48
-; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_52
 ; AVX2-NEXT:  ## %bb.51: ## %cond.store49
-; AVX2-NEXT:    vpextrb $9, %xmm1, 25(%rdi)
+; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX2-NEXT:  LBB16_52: ## %else50
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_54
 ; AVX2-NEXT:  ## %bb.53: ## %cond.store51
-; AVX2-NEXT:    vpextrb $10, %xmm1, 26(%rdi)
+; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  LBB16_54: ## %else52
-; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_56
 ; AVX2-NEXT:  ## %bb.55: ## %cond.store53
-; AVX2-NEXT:    vpextrb $11, %xmm1, 27(%rdi)
+; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX2-NEXT:  LBB16_56: ## %else54
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_58
 ; AVX2-NEXT:  ## %bb.57: ## %cond.store55
-; AVX2-NEXT:    vpextrb $12, %xmm1, 28(%rdi)
+; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX2-NEXT:  LBB16_58: ## %else56
-; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
+; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_60
 ; AVX2-NEXT:  ## %bb.59: ## %cond.store57
-; AVX2-NEXT:    vpextrb $13, %xmm1, 29(%rdi)
+; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX2-NEXT:  LBB16_60: ## %else58
-; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
-; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_62
 ; AVX2-NEXT:  ## %bb.61: ## %cond.store59
-; AVX2-NEXT:    vpextrb $14, %xmm1, 30(%rdi)
+; AVX2-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
 ; AVX2-NEXT:  LBB16_62: ## %else60
-; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
+; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je LBB16_64
 ; AVX2-NEXT:  ## %bb.63: ## %cond.store61
-; AVX2-NEXT:    vpextrb $15, %xmm1, 31(%rdi)
+; AVX2-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
 ; AVX2-NEXT:  LBB16_64: ## %else62
 ; AVX2-NEXT:    vzeroupper
 ; AVX2-NEXT:    retq
@@ -4275,8 +4277,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-LABEL: store_v32i8_v32i8:
 ; AVX512F:       ## %bb.0:
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -4284,6 +4286,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.1: ## %cond.store
 ; AVX512F-NEXT:    vpextrb $0, %xmm1, (%rdi)
 ; AVX512F-NEXT:  LBB16_2: ## %else
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
@@ -4294,8 +4297,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
 ; AVX512F-NEXT:  LBB16_4: ## %else2
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4304,6 +4307,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.5: ## %cond.store3
 ; AVX512F-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
 ; AVX512F-NEXT:  LBB16_6: ## %else4
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
@@ -4314,8 +4318,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
 ; AVX512F-NEXT:  LBB16_8: ## %else6
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4324,6 +4328,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.9: ## %cond.store7
 ; AVX512F-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
 ; AVX512F-NEXT:  LBB16_10: ## %else8
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
@@ -4334,8 +4339,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
 ; AVX512F-NEXT:  LBB16_12: ## %else10
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4344,6 +4349,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.13: ## %cond.store11
 ; AVX512F-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
 ; AVX512F-NEXT:  LBB16_14: ## %else12
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
@@ -4354,8 +4360,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
 ; AVX512F-NEXT:  LBB16_16: ## %else14
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4364,6 +4370,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.17: ## %cond.store15
 ; AVX512F-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
 ; AVX512F-NEXT:  LBB16_18: ## %else16
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
@@ -4374,8 +4381,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
 ; AVX512F-NEXT:  LBB16_20: ## %else18
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4384,6 +4391,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.21: ## %cond.store19
 ; AVX512F-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
 ; AVX512F-NEXT:  LBB16_22: ## %else20
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
@@ -4394,8 +4402,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
 ; AVX512F-NEXT:  LBB16_24: ## %else22
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4404,6 +4412,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.25: ## %cond.store23
 ; AVX512F-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
 ; AVX512F-NEXT:  LBB16_26: ## %else24
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
@@ -4414,8 +4423,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
 ; AVX512F-NEXT:  LBB16_28: ## %else26
 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -4424,6 +4433,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.29: ## %cond.store27
 ; AVX512F-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
 ; AVX512F-NEXT:  LBB16_30: ## %else28
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
@@ -4433,157 +4443,150 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512F-NEXT:  ## %bb.31: ## %cond.store29
 ; AVX512F-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
 ; AVX512F-NEXT:  LBB16_32: ## %else30
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX512F-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; AVX512F-NEXT:    vpcmpeqb %xmm0, %xmm2, %xmm0
+; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
+; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
 ; AVX512F-NEXT:    je LBB16_34
 ; AVX512F-NEXT:  ## %bb.33: ## %cond.store31
-; AVX512F-NEXT:    vpextrb $0, %xmm1, 16(%rdi)
+; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX512F-NEXT:  LBB16_34: ## %else32
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_36
 ; AVX512F-NEXT:  ## %bb.35: ## %cond.store33
-; AVX512F-NEXT:    vpextrb $1, %xmm1, 17(%rdi)
+; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX512F-NEXT:  LBB16_36: ## %else34
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_38
 ; AVX512F-NEXT:  ## %bb.37: ## %cond.store35
-; AVX512F-NEXT:    vpextrb $2, %xmm1, 18(%rdi)
+; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX512F-NEXT:  LBB16_38: ## %else36
 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_40
 ; AVX512F-NEXT:  ## %bb.39: ## %cond.store37
-; AVX512F-NEXT:    vpextrb $3, %xmm1, 19(%rdi)
+; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX512F-NEXT:  LBB16_40: ## %else38
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_42
 ; AVX512F-NEXT:  ## %bb.41: ## %cond.store39
-; AVX512F-NEXT:    vpextrb $4, %xmm1, 20(%rdi)
+; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX512F-NEXT:  LBB16_42: ## %else40
 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_44
 ; AVX512F-NEXT:  ## %bb.43: ## %cond.store41
-; AVX512F-NEXT:    vpextrb $5, %xmm1, 21(%rdi)
+; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX512F-NEXT:  LBB16_44: ## %else42
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_46
 ; AVX512F-NEXT:  ## %bb.45: ## %cond.store43
-; AVX512F-NEXT:    vpextrb $6, %xmm1, 22(%rdi)
+; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX512F-NEXT:  LBB16_46: ## %else44
 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_48
 ; AVX512F-NEXT:  ## %bb.47: ## %cond.store45
-; AVX512F-NEXT:    vpextrb $7, %xmm1, 23(%rdi)
+; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX512F-NEXT:  LBB16_48: ## %else46
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_50
 ; AVX512F-NEXT:  ## %bb.49: ## %cond.store47
-; AVX512F-NEXT:    vpextrb $8, %xmm1, 24(%rdi)
+; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX512F-NEXT:  LBB16_50: ## %else48
 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_52
 ; AVX512F-NEXT:  ## %bb.51: ## %cond.store49
-; AVX512F-NEXT:    vpextrb $9, %xmm1, 25(%rdi)
+; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX512F-NEXT:  LBB16_52: ## %else50
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_54
 ; AVX512F-NEXT:  ## %bb.53: ## %cond.store51
-; AVX512F-NEXT:    vpextrb $10, %xmm1, 26(%rdi)
+; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX512F-NEXT:  LBB16_54: ## %else52
 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_56
 ; AVX512F-NEXT:  ## %bb.55: ## %cond.store53
-; AVX512F-NEXT:    vpextrb $11, %xmm1, 27(%rdi)
+; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX512F-NEXT:  LBB16_56: ## %else54
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_58
 ; AVX512F-NEXT:  ## %bb.57: ## %cond.store55
-; AVX512F-NEXT:    vpextrb $12, %xmm1, 28(%rdi)
+; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX512F-NEXT:  LBB16_58: ## %else56
 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_60
 ; AVX512F-NEXT:  ## %bb.59: ## %cond.store57
-; AVX512F-NEXT:    vpextrb $13, %xmm1, 29(%rdi)
+; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX512F-NEXT:  LBB16_60: ## %else58
-; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
-; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
-; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
+; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
 ; AVX512F-NEXT:    kmovw %k1, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_62
 ; AVX512F-NEXT:  ## %bb.61: ## %cond.store59
-; AVX512F-NEXT:    vpextrb $14, %xmm1, 30(%rdi)
+; AVX512F-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
 ; AVX512F-NEXT:  LBB16_62: ## %else60
 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
 ; AVX512F-NEXT:    je LBB16_64
 ; AVX512F-NEXT:  ## %bb.63: ## %cond.store61
-; AVX512F-NEXT:    vpextrb $15, %xmm1, 31(%rdi)
+; AVX512F-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
 ; AVX512F-NEXT:  LBB16_64: ## %else62
 ; AVX512F-NEXT:    vzeroupper
 ; AVX512F-NEXT:    retq
@@ -4591,8 +4594,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-LABEL: store_v32i8_v32i8:
 ; AVX512VLDQ:       ## %bb.0:
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
@@ -4600,6 +4603,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.store
 ; AVX512VLDQ-NEXT:    vpextrb $0, %xmm1, (%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_2: ## %else
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
@@ -4610,8 +4614,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_4: ## %else2
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4620,6 +4624,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.store3
 ; AVX512VLDQ-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_6: ## %else4
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
@@ -4630,8 +4635,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_8: ## %else6
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4640,6 +4645,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.store7
 ; AVX512VLDQ-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_10: ## %else8
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
@@ -4650,8 +4656,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_12: ## %else10
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4660,6 +4666,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.store11
 ; AVX512VLDQ-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_14: ## %else12
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
@@ -4670,8 +4677,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_16: ## %else14
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4680,6 +4687,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.17: ## %cond.store15
 ; AVX512VLDQ-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_18: ## %else16
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
@@ -4690,8 +4698,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_20: ## %else18
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4700,6 +4708,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.21: ## %cond.store19
 ; AVX512VLDQ-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_22: ## %else20
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
@@ -4710,8 +4719,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_24: ## %else22
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4720,6 +4729,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.25: ## %cond.store23
 ; AVX512VLDQ-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_26: ## %else24
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
@@ -4730,8 +4740,8 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_28: ## %else26
 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
@@ -4740,6 +4750,7 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.29: ## %cond.store27
 ; AVX512VLDQ-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_30: ## %else28
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm2
 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
@@ -4749,157 +4760,150 @@ define void @store_v32i8_v32i8(<32 x i8>
 ; AVX512VLDQ-NEXT:  ## %bb.31: ## %cond.store29
 ; AVX512VLDQ-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_32: ## %else30
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX512VLDQ-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm0, %xmm2, %xmm0
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm0, %zmm0
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
 ; AVX512VLDQ-NEXT:    je LBB16_34
 ; AVX512VLDQ-NEXT:  ## %bb.33: ## %cond.store31
-; AVX512VLDQ-NEXT:    vpextrb $0, %xmm1, 16(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_34: ## %else32
 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_36
 ; AVX512VLDQ-NEXT:  ## %bb.35: ## %cond.store33
-; AVX512VLDQ-NEXT:    vpextrb $1, %xmm1, 17(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_36: ## %else34
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_38
 ; AVX512VLDQ-NEXT:  ## %bb.37: ## %cond.store35
-; AVX512VLDQ-NEXT:    vpextrb $2, %xmm1, 18(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_38: ## %else36
 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_40
 ; AVX512VLDQ-NEXT:  ## %bb.39: ## %cond.store37
-; AVX512VLDQ-NEXT:    vpextrb $3, %xmm1, 19(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_40: ## %else38
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_42
 ; AVX512VLDQ-NEXT:  ## %bb.41: ## %cond.store39
-; AVX512VLDQ-NEXT:    vpextrb $4, %xmm1, 20(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_42: ## %else40
 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_44
 ; AVX512VLDQ-NEXT:  ## %bb.43: ## %cond.store41
-; AVX512VLDQ-NEXT:    vpextrb $5, %xmm1, 21(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_44: ## %else42
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_46
 ; AVX512VLDQ-NEXT:  ## %bb.45: ## %cond.store43
-; AVX512VLDQ-NEXT:    vpextrb $6, %xmm1, 22(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_46: ## %else44
 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_48
 ; AVX512VLDQ-NEXT:  ## %bb.47: ## %cond.store45
-; AVX512VLDQ-NEXT:    vpextrb $7, %xmm1, 23(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_48: ## %else46
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_50
 ; AVX512VLDQ-NEXT:  ## %bb.49: ## %cond.store47
-; AVX512VLDQ-NEXT:    vpextrb $8, %xmm1, 24(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_50: ## %else48
 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_52
 ; AVX512VLDQ-NEXT:  ## %bb.51: ## %cond.store49
-; AVX512VLDQ-NEXT:    vpextrb $9, %xmm1, 25(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_52: ## %else50
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_54
 ; AVX512VLDQ-NEXT:  ## %bb.53: ## %cond.store51
-; AVX512VLDQ-NEXT:    vpextrb $10, %xmm1, 26(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_54: ## %else52
 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_56
 ; AVX512VLDQ-NEXT:  ## %bb.55: ## %cond.store53
-; AVX512VLDQ-NEXT:    vpextrb $11, %xmm1, 27(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_56: ## %else54
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm2
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_58
 ; AVX512VLDQ-NEXT:  ## %bb.57: ## %cond.store55
-; AVX512VLDQ-NEXT:    vpextrb $12, %xmm1, 28(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_58: ## %else56
 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_60
 ; AVX512VLDQ-NEXT:  ## %bb.59: ## %cond.store57
-; AVX512VLDQ-NEXT:    vpextrb $13, %xmm1, 29(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_60: ## %else58
-; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
-; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
-; AVX512VLDQ-NEXT:    vpmovsxbd %xmm0, %zmm0
-; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
+; AVX512VLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX512VLDQ-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
+; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k1
 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_62
 ; AVX512VLDQ-NEXT:  ## %bb.61: ## %cond.store59
-; AVX512VLDQ-NEXT:    vpextrb $14, %xmm1, 30(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_62: ## %else60
 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
 ; AVX512VLDQ-NEXT:    testb $1, %al
 ; AVX512VLDQ-NEXT:    je LBB16_64
 ; AVX512VLDQ-NEXT:  ## %bb.63: ## %cond.store61
-; AVX512VLDQ-NEXT:    vpextrb $15, %xmm1, 31(%rdi)
+; AVX512VLDQ-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
 ; AVX512VLDQ-NEXT:  LBB16_64: ## %else62
 ; AVX512VLDQ-NEXT:    vzeroupper
 ; AVX512VLDQ-NEXT:    retq

Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_store_trunc.ll Wed Jun 26 07:40:49 2019
@@ -474,9 +474,9 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm6
 ; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm6[0,2]
 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm6
@@ -490,7 +490,8 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB1_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_4
@@ -498,15 +499,16 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB1_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB1_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -514,26 +516,25 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB1_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB1_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB1_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -894,9 +895,9 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm6
 ; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm6[0,2]
 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm6
@@ -910,7 +911,8 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB2_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_4
@@ -918,15 +920,16 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB2_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB2_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -934,26 +937,25 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB2_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB2_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB2_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -2381,9 +2383,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-LABEL: truncstore_v16i32_v16i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm6
 ; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm7 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
@@ -2398,7 +2400,8 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB9_2: # %else
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -2408,9 +2411,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB9_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -2419,6 +2422,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB9_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -2428,12 +2432,12 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB9_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -2441,17 +2445,16 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB9_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB9_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -2471,9 +2474,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB9_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -2483,6 +2486,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB9_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -2493,9 +2497,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB9_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -2504,6 +2508,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB9_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -2513,30 +2518,29 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB9_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB9_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB9_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3180,20 +3184,20 @@ define void @truncstore_v16i32_v16i8(<16
 ;
 ; AVX2-LABEL: truncstore_v16i32_v16i8:
 ; AVX2:       # %bb.0:
-; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
-; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
-; AVX2-NEXT:    vpxor %xmm8, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm2, %xmm6
+; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm7 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
 ; AVX2-NEXT:    vpshufb %ymm7, %ymm1, %ymm1
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
-; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]
-; AVX2-NEXT:    vpand %xmm5, %xmm1, %xmm1
+; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]
+; AVX2-NEXT:    vpand %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpshufb %ymm7, %ymm0, %ymm0
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
-; AVX2-NEXT:    vpand %xmm5, %xmm0, %xmm0
+; AVX2-NEXT:    vpand %xmm4, %xmm0, %xmm0
 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $0, %xmm6, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3201,7 +3205,8 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB10_2: # %else
-; AVX2-NEXT:    vpxor %xmm8, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm8, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -3211,9 +3216,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB10_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -3222,6 +3227,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB10_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -3231,12 +3237,12 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB10_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3244,17 +3250,16 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB10_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB10_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3274,9 +3279,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB10_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -3285,6 +3290,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB10_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3295,9 +3301,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB10_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -3306,6 +3312,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB10_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3315,30 +3322,29 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB10_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB10_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB10_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3737,9 +3743,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
 ; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
@@ -3748,6 +3754,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB11_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3756,15 +3763,16 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB11_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB11_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB11_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3772,9 +3780,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB11_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -3790,8 +3798,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB11_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -4144,9 +4151,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15,16,17,20,21,24,25,28,29,24,25,28,29,28,29,30,31]
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
 ; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
@@ -4155,6 +4162,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB12_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4163,15 +4171,16 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB12_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB12_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB12_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4179,9 +4188,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB12_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -4197,8 +4206,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB12_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -5522,15 +5530,15 @@ define void @truncstore_v32i16_v32i8(<32
 ;
 ; AVX2-LABEL: truncstore_v32i16_v32i8:
 ; AVX2:       # %bb.0:
-; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
-; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
-; AVX2-NEXT:    vpand %ymm4, %ymm0, %ymm0
-; AVX2-NEXT:    vpand %ymm4, %ymm1, %ymm1
-; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm4
+; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
+; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm0
+; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
+; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm3
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX2-NEXT:    vpackuswb %ymm0, %ymm4, %ymm0
+; AVX2-NEXT:    vpackuswb %ymm0, %ymm3, %ymm0
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
 ; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5538,7 +5546,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB15_2: # %else
-; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_4
@@ -5546,14 +5555,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB15_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB15_6: # %else4
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5562,14 +5572,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB15_8: # %else6
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB15_10: # %else8
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5578,14 +5589,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB15_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_14
 ; AVX2-NEXT:  # %bb.13: # %cond.store11
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB15_14: # %else12
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5594,14 +5606,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB15_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_18
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB15_18: # %else16
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5610,14 +5623,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB15_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_22
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB15_22: # %else20
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5626,14 +5640,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB15_24: # %else22
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB15_26: # %else24
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5642,14 +5657,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB15_28: # %else26
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_30
 ; AVX2-NEXT:  # %bb.29: # %cond.store27
 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB15_30: # %else28
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5657,10 +5673,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.31: # %cond.store29
 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX2-NEXT:  .LBB15_32: # %else30
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
@@ -5668,118 +5684,111 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.33: # %cond.store31
 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB15_34: # %else32
-; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_36
 ; AVX2-NEXT:  # %bb.35: # %cond.store33
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX2-NEXT:  .LBB15_36: # %else34
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_38
 ; AVX2-NEXT:  # %bb.37: # %cond.store35
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB15_38: # %else36
-; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_40
 ; AVX2-NEXT:  # %bb.39: # %cond.store37
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX2-NEXT:  .LBB15_40: # %else38
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_42
 ; AVX2-NEXT:  # %bb.41: # %cond.store39
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB15_42: # %else40
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_44
 ; AVX2-NEXT:  # %bb.43: # %cond.store41
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX2-NEXT:  .LBB15_44: # %else42
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_46
 ; AVX2-NEXT:  # %bb.45: # %cond.store43
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB15_46: # %else44
-; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_48
 ; AVX2-NEXT:  # %bb.47: # %cond.store45
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX2-NEXT:  .LBB15_48: # %else46
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_50
 ; AVX2-NEXT:  # %bb.49: # %cond.store47
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB15_50: # %else48
-; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_52
 ; AVX2-NEXT:  # %bb.51: # %cond.store49
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX2-NEXT:  .LBB15_52: # %else50
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_54
 ; AVX2-NEXT:  # %bb.53: # %cond.store51
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB15_54: # %else52
-; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_56
 ; AVX2-NEXT:  # %bb.55: # %cond.store53
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX2-NEXT:  .LBB15_56: # %else54
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_58
 ; AVX2-NEXT:  # %bb.57: # %cond.store55
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX2-NEXT:  .LBB15_58: # %else56
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_60
 ; AVX2-NEXT:  # %bb.59: # %cond.store57
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX2-NEXT:  .LBB15_60: # %else58
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -5800,9 +5809,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-LABEL: truncstore_v32i16_v32i8:
 ; AVX512F:       # %bb.0:
 ; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
-; AVX512F-NEXT:    vmovdqa64 %zmm3, %zmm4
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm4
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm4
+; AVX512F-NEXT:    vpternlogq $15, %zmm4, %zmm4, %zmm4
 ; AVX512F-NEXT:    vpmovsxbd %xmm4, %zmm4
 ; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
 ; 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
@@ -5816,8 +5824,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.1: # %cond.store
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX512F-NEXT:  .LBB15_2: # %else
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
-; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm1
+; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -5827,9 +5836,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX512F-NEXT:  .LBB15_4: # %else2
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -5839,6 +5847,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.5: # %cond.store3
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX512F-NEXT:  .LBB15_6: # %else4
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5850,9 +5859,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX512F-NEXT:  .LBB15_8: # %else6
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -5862,6 +5870,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.9: # %cond.store7
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX512F-NEXT:  .LBB15_10: # %else8
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5873,9 +5882,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX512F-NEXT:  .LBB15_12: # %else10
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -5885,6 +5893,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.13: # %cond.store11
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX512F-NEXT:  .LBB15_14: # %else12
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5896,9 +5905,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX512F-NEXT:  .LBB15_16: # %else14
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -5908,6 +5916,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.17: # %cond.store15
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX512F-NEXT:  .LBB15_18: # %else16
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5919,9 +5928,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX512F-NEXT:  .LBB15_20: # %else18
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -5931,6 +5939,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.21: # %cond.store19
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX512F-NEXT:  .LBB15_22: # %else20
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5942,9 +5951,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX512F-NEXT:  .LBB15_24: # %else22
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -5954,6 +5962,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.25: # %cond.store23
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX512F-NEXT:  .LBB15_26: # %else24
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5965,9 +5974,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX512F-NEXT:  .LBB15_28: # %else26
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
@@ -5977,6 +5985,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.29: # %cond.store27
 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX512F-NEXT:  .LBB15_30: # %else28
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -5987,11 +5996,11 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.31: # %cond.store29
 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX512F-NEXT:  .LBB15_32: # %else30
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -6001,9 +6010,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.33: # %cond.store31
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX512F-NEXT:  .LBB15_34: # %else32
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6011,11 +6020,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.35: # %cond.store33
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX512F-NEXT:  .LBB15_36: # %else34
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -6025,9 +6033,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.37: # %cond.store35
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX512F-NEXT:  .LBB15_38: # %else36
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6035,11 +6043,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.39: # %cond.store37
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX512F-NEXT:  .LBB15_40: # %else38
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -6049,9 +6056,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.41: # %cond.store39
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX512F-NEXT:  .LBB15_42: # %else40
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6059,11 +6066,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.43: # %cond.store41
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX512F-NEXT:  .LBB15_44: # %else42
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -6073,9 +6079,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.45: # %cond.store43
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX512F-NEXT:  .LBB15_46: # %else44
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6083,11 +6089,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.47: # %cond.store45
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX512F-NEXT:  .LBB15_48: # %else46
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -6097,9 +6102,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.49: # %cond.store47
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX512F-NEXT:  .LBB15_50: # %else48
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6107,11 +6112,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.51: # %cond.store49
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX512F-NEXT:  .LBB15_52: # %else50
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -6121,9 +6125,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.53: # %cond.store51
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX512F-NEXT:  .LBB15_54: # %else52
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6131,11 +6135,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.55: # %cond.store53
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX512F-NEXT:  .LBB15_56: # %else54
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -6145,9 +6148,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.57: # %cond.store55
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX512F-NEXT:  .LBB15_58: # %else56
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6155,9 +6158,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.59: # %cond.store57
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX512F-NEXT:  .LBB15_60: # %else58
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm2
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2

Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_store_trunc_ssat.ll Wed Jun 26 07:40:49 2019
@@ -796,9 +796,9 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [32767,32767,32767,32767]
 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm6, %ymm7
 ; AVX2-NEXT:    vblendvpd %ymm7, %ymm0, %ymm6, %ymm0
@@ -819,7 +819,8 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB1_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_4
@@ -827,15 +828,16 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB1_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB1_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -843,26 +845,25 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB1_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB1_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB1_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -1374,9 +1375,9 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [127,127,127,127]
 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm6, %ymm7
 ; AVX2-NEXT:    vblendvpd %ymm7, %ymm0, %ymm6, %ymm0
@@ -1397,7 +1398,8 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB2_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_4
@@ -1405,15 +1407,16 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB2_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB2_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1421,26 +1424,25 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB2_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB2_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB2_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -3432,9 +3434,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-LABEL: truncstore_v16i32_v16i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm6
 ; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
@@ -3445,7 +3447,8 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB9_2: # %else
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -3455,9 +3458,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB9_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -3466,6 +3469,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB9_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -3475,12 +3479,12 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB9_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3488,17 +3492,16 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB9_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB9_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3518,9 +3521,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB9_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -3530,6 +3533,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB9_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3540,9 +3544,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB9_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -3551,6 +3555,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB9_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3560,30 +3565,29 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB9_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB9_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB9_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -4223,9 +4227,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-LABEL: truncstore_v16i32_v16i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm6
 ; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
@@ -4238,7 +4242,8 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB10_2: # %else
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -4248,9 +4253,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB10_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -4259,6 +4264,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB10_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -4268,12 +4274,12 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB10_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4281,17 +4287,16 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB10_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB10_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -4311,9 +4316,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB10_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -4322,6 +4327,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB10_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -4332,9 +4338,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB10_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -4343,6 +4349,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB10_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -4352,30 +4359,29 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB10_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB10_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB10_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -4772,9 +4778,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm5, %xmm0, %xmm0
 ; AVX2-NEXT:    vpextrb $0, %xmm4, %eax
@@ -4783,6 +4789,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB11_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4791,15 +4798,16 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB11_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB11_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB11_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4807,9 +4815,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB11_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -4825,8 +4833,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB11_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -5215,9 +5222,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [127,127,127,127,127,127,127,127]
 ; AVX2-NEXT:    vpminsd %ymm5, %ymm0, %ymm0
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
@@ -5230,6 +5237,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB12_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -5238,15 +5246,16 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB12_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB12_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB12_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -5254,9 +5263,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB12_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -5272,8 +5281,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB12_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -6736,10 +6744,10 @@ define void @truncstore_v32i16_v32i8(<32
 ;
 ; AVX2-LABEL: truncstore_v32i16_v32i8:
 ; AVX2:       # %bb.0:
-; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
 ; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6747,7 +6755,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB15_2: # %else
-; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_4
@@ -6755,14 +6764,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB15_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB15_6: # %else4
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6771,14 +6781,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB15_8: # %else6
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB15_10: # %else8
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6787,14 +6798,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB15_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_14
 ; AVX2-NEXT:  # %bb.13: # %cond.store11
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB15_14: # %else12
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6803,14 +6815,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB15_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_18
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB15_18: # %else16
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6819,14 +6832,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB15_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_22
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB15_22: # %else20
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6835,14 +6849,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB15_24: # %else22
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB15_26: # %else24
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6851,14 +6866,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB15_28: # %else26
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_30
 ; AVX2-NEXT:  # %bb.29: # %cond.store27
 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB15_30: # %else28
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6866,10 +6882,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.31: # %cond.store29
 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX2-NEXT:  .LBB15_32: # %else30
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
@@ -6877,118 +6893,111 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.33: # %cond.store31
 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB15_34: # %else32
-; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_36
 ; AVX2-NEXT:  # %bb.35: # %cond.store33
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX2-NEXT:  .LBB15_36: # %else34
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_38
 ; AVX2-NEXT:  # %bb.37: # %cond.store35
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB15_38: # %else36
-; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_40
 ; AVX2-NEXT:  # %bb.39: # %cond.store37
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX2-NEXT:  .LBB15_40: # %else38
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_42
 ; AVX2-NEXT:  # %bb.41: # %cond.store39
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB15_42: # %else40
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_44
 ; AVX2-NEXT:  # %bb.43: # %cond.store41
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX2-NEXT:  .LBB15_44: # %else42
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_46
 ; AVX2-NEXT:  # %bb.45: # %cond.store43
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB15_46: # %else44
-; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_48
 ; AVX2-NEXT:  # %bb.47: # %cond.store45
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX2-NEXT:  .LBB15_48: # %else46
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_50
 ; AVX2-NEXT:  # %bb.49: # %cond.store47
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB15_50: # %else48
-; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_52
 ; AVX2-NEXT:  # %bb.51: # %cond.store49
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX2-NEXT:  .LBB15_52: # %else50
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_54
 ; AVX2-NEXT:  # %bb.53: # %cond.store51
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB15_54: # %else52
-; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_56
 ; AVX2-NEXT:  # %bb.55: # %cond.store53
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX2-NEXT:  .LBB15_56: # %else54
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_58
 ; AVX2-NEXT:  # %bb.57: # %cond.store55
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX2-NEXT:  .LBB15_58: # %else56
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_60
 ; AVX2-NEXT:  # %bb.59: # %cond.store57
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX2-NEXT:  .LBB15_60: # %else58
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -7009,9 +7018,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-LABEL: truncstore_v32i16_v32i8:
 ; AVX512F:       # %bb.0:
 ; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
-; AVX512F-NEXT:    vmovdqa64 %zmm3, %zmm4
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm4
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm4
+; AVX512F-NEXT:    vpternlogq $15, %zmm4, %zmm4, %zmm4
 ; AVX512F-NEXT:    vpmovsxbd %xmm4, %zmm4
 ; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
@@ -7031,8 +7039,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.1: # %cond.store
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX512F-NEXT:  .LBB15_2: # %else
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
-; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm1
+; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -7042,9 +7051,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX512F-NEXT:  .LBB15_4: # %else2
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -7054,6 +7062,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.5: # %cond.store3
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX512F-NEXT:  .LBB15_6: # %else4
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7065,9 +7074,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX512F-NEXT:  .LBB15_8: # %else6
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -7077,6 +7085,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.9: # %cond.store7
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX512F-NEXT:  .LBB15_10: # %else8
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7088,9 +7097,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX512F-NEXT:  .LBB15_12: # %else10
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -7100,6 +7108,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.13: # %cond.store11
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX512F-NEXT:  .LBB15_14: # %else12
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7111,9 +7120,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX512F-NEXT:  .LBB15_16: # %else14
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -7123,6 +7131,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.17: # %cond.store15
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX512F-NEXT:  .LBB15_18: # %else16
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7134,9 +7143,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX512F-NEXT:  .LBB15_20: # %else18
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -7146,6 +7154,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.21: # %cond.store19
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX512F-NEXT:  .LBB15_22: # %else20
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7157,9 +7166,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX512F-NEXT:  .LBB15_24: # %else22
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -7169,6 +7177,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.25: # %cond.store23
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX512F-NEXT:  .LBB15_26: # %else24
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7180,9 +7189,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX512F-NEXT:  .LBB15_28: # %else26
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
@@ -7192,6 +7200,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.29: # %cond.store27
 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX512F-NEXT:  .LBB15_30: # %else28
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -7202,11 +7211,11 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.31: # %cond.store29
 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX512F-NEXT:  .LBB15_32: # %else30
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -7216,9 +7225,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.33: # %cond.store31
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX512F-NEXT:  .LBB15_34: # %else32
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7226,11 +7235,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.35: # %cond.store33
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX512F-NEXT:  .LBB15_36: # %else34
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -7240,9 +7248,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.37: # %cond.store35
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX512F-NEXT:  .LBB15_38: # %else36
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7250,11 +7258,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.39: # %cond.store37
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX512F-NEXT:  .LBB15_40: # %else38
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -7264,9 +7271,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.41: # %cond.store39
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX512F-NEXT:  .LBB15_42: # %else40
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7274,11 +7281,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.43: # %cond.store41
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX512F-NEXT:  .LBB15_44: # %else42
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -7288,9 +7294,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.45: # %cond.store43
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX512F-NEXT:  .LBB15_46: # %else44
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7298,11 +7304,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.47: # %cond.store45
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX512F-NEXT:  .LBB15_48: # %else46
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -7312,9 +7317,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.49: # %cond.store47
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX512F-NEXT:  .LBB15_50: # %else48
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7322,11 +7327,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.51: # %cond.store49
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX512F-NEXT:  .LBB15_52: # %else50
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -7336,9 +7340,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.53: # %cond.store51
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX512F-NEXT:  .LBB15_54: # %else52
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7346,11 +7350,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.55: # %cond.store53
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX512F-NEXT:  .LBB15_56: # %else54
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -7360,9 +7363,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.57: # %cond.store55
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX512F-NEXT:  .LBB15_58: # %else56
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7370,9 +7373,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.59: # %cond.store57
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX512F-NEXT:  .LBB15_60: # %else58
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm2
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2

Modified: llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll?rev=364432&r1=364431&r2=364432&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll (original)
+++ llvm/trunk/test/CodeGen/X86/masked_store_trunc_usat.ll Wed Jun 26 07:40:49 2019
@@ -670,9 +670,9 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [65535,65535,65535,65535]
 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
 ; AVX2-NEXT:    vpxor %ymm7, %ymm1, %ymm8
@@ -692,7 +692,8 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB1_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_4
@@ -700,15 +701,16 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB1_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB1_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -716,26 +718,25 @@ define void @truncstore_v8i64_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB1_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB1_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB1_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB1_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -1179,9 +1180,9 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i64_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm3
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [255,255,255,255]
 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm7 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
 ; AVX2-NEXT:    vpxor %ymm7, %ymm1, %ymm8
@@ -1201,7 +1202,8 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB2_2: # %else
-; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_4
@@ -1209,15 +1211,16 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB2_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB2_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -1225,26 +1228,25 @@ define void @truncstore_v8i64_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB2_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB2_10: # %else8
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB2_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB2_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -3086,9 +3088,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-LABEL: truncstore_v16i32_v16i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm6
 ; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm7 = [65535,65535,65535,65535,65535,65535,65535,65535]
@@ -3102,7 +3104,8 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB9_2: # %else
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -3112,9 +3115,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB9_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -3123,6 +3126,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB9_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -3132,12 +3136,12 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB9_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3145,17 +3149,16 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB9_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB9_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3175,9 +3178,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB9_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -3187,6 +3190,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB9_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3197,9 +3201,9 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB9_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -3208,6 +3212,7 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB9_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -3217,30 +3222,29 @@ define void @truncstore_v16i32_v16i16(<1
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB9_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB9_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB9_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB9_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -3915,9 +3919,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-LABEL: truncstore_v16i32_v16i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm4
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm6
 ; AVX2-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm6
+; AVX2-NEXT:    vpxor %xmm5, %xmm6, %xmm6
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm7 = [255,255,255,255,255,255,255,255]
@@ -3933,7 +3937,8 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB10_2: # %else
-; AVX2-NEXT:    vpxor %xmm5, %xmm4, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm5, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
@@ -3943,9 +3948,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB10_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm5
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm5
+; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
@@ -3954,6 +3959,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB10_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
@@ -3963,12 +3969,12 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB10_8: # %else6
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
-; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $4, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -3976,17 +3982,16 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB10_10: # %else8
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm0, %xmm2, %xmm2
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_12
 ; AVX2-NEXT:  # %bb.11: # %cond.store9
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB10_12: # %else10
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -4006,9 +4011,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB10_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
@@ -4017,6 +4022,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB10_18: # %else16
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -4027,9 +4033,9 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB10_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm4
+; AVX2-NEXT:    vpxor %xmm2, %xmm4, %xmm4
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
@@ -4038,6 +4044,7 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB10_22: # %else20
+; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm3, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm1, %xmm1
 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
@@ -4047,30 +4054,29 @@ define void @truncstore_v16i32_v16i8(<16
 ; AVX2-NEXT:  # %bb.23: # %cond.store21
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB10_24: # %else22
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm3
+; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB10_26: # %else24
-; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm2
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB10_28
 ; AVX2-NEXT:  # %bb.27: # %cond.store25
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB10_28: # %else26
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm2
@@ -4487,9 +4493,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i16:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [65535,65535,65535,65535,65535,65535,65535,65535]
 ; AVX2-NEXT:    vpminud %ymm5, %ymm0, %ymm0
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm5
@@ -4500,6 +4506,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB11_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4508,15 +4515,16 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB11_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB11_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB11_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4524,9 +4532,9 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB11_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -4542,8 +4550,7 @@ define void @truncstore_v8i32_v8i16(<8 x
 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB11_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -4912,9 +4919,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-LABEL: truncstore_v8i32_v8i8:
 ; AVX2:       # %bb.0:
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [255,255,255,255,255,255,255,255]
 ; AVX2-NEXT:    vpminud %ymm5, %ymm0, %ymm0
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm5
@@ -4925,6 +4932,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB12_2: # %else
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4933,15 +4941,16 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB12_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm4
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm4
 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB12_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB12_6: # %else4
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    testb $1, %al
@@ -4949,9 +4958,9 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:  # %bb.7: # %cond.store5
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB12_8: # %else6
+; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm2
-; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
@@ -4967,8 +4976,7 @@ define void @truncstore_v8i32_v8i8(<8 x
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB12_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
-; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
@@ -6416,13 +6424,13 @@ define void @truncstore_v32i16_v32i8(<32
 ;
 ; AVX2-LABEL: truncstore_v32i16_v32i8:
 ; AVX2:       # %bb.0:
-; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
-; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
-; AVX2-NEXT:    vpminuw %ymm4, %ymm1, %ymm1
-; AVX2-NEXT:    vpminuw %ymm4, %ymm0, %ymm0
+; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
+; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
+; AVX2-NEXT:    vpminuw %ymm3, %ymm0, %ymm0
 ; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
+; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
 ; AVX2-NEXT:    vpextrb $0, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6430,7 +6438,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.1: # %cond.store
 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX2-NEXT:  .LBB15_2: # %else
-; AVX2-NEXT:    vpextrb $1, %xmm3, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
+; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_4
@@ -6438,14 +6447,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX2-NEXT:  .LBB15_4: # %else2
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $2, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_6
 ; AVX2-NEXT:  # %bb.5: # %cond.store3
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX2-NEXT:  .LBB15_6: # %else4
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6454,14 +6464,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX2-NEXT:  .LBB15_8: # %else6
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $4, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_10
 ; AVX2-NEXT:  # %bb.9: # %cond.store7
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX2-NEXT:  .LBB15_10: # %else8
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6470,14 +6481,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX2-NEXT:  .LBB15_12: # %else10
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $6, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_14
 ; AVX2-NEXT:  # %bb.13: # %cond.store11
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX2-NEXT:  .LBB15_14: # %else12
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6486,14 +6498,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX2-NEXT:  .LBB15_16: # %else14
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $8, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_18
 ; AVX2-NEXT:  # %bb.17: # %cond.store15
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX2-NEXT:  .LBB15_18: # %else16
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6502,14 +6515,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX2-NEXT:  .LBB15_20: # %else18
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $10, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_22
 ; AVX2-NEXT:  # %bb.21: # %cond.store19
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX2-NEXT:  .LBB15_22: # %else20
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6518,14 +6532,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX2-NEXT:  .LBB15_24: # %else22
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $12, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_26
 ; AVX2-NEXT:  # %bb.25: # %cond.store23
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX2-NEXT:  .LBB15_26: # %else24
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6534,14 +6549,15 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX2-NEXT:  .LBB15_28: # %else26
 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpextrb $14, %xmm3, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_30
 ; AVX2-NEXT:  # %bb.29: # %cond.store27
 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX2-NEXT:  .LBB15_30: # %else28
+; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX2-NEXT:    vpextrb $15, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6549,10 +6565,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.31: # %cond.store29
 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX2-NEXT:  .LBB15_32: # %else30
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
@@ -6560,118 +6576,111 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX2-NEXT:  # %bb.33: # %cond.store31
 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX2-NEXT:  .LBB15_34: # %else32
-; AVX2-NEXT:    vpextrb $1, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_36
 ; AVX2-NEXT:  # %bb.35: # %cond.store33
 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX2-NEXT:  .LBB15_36: # %else34
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $2, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_38
 ; AVX2-NEXT:  # %bb.37: # %cond.store35
 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX2-NEXT:  .LBB15_38: # %else36
-; AVX2-NEXT:    vpextrb $3, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_40
 ; AVX2-NEXT:  # %bb.39: # %cond.store37
 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX2-NEXT:  .LBB15_40: # %else38
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $4, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_42
 ; AVX2-NEXT:  # %bb.41: # %cond.store39
 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX2-NEXT:  .LBB15_42: # %else40
-; AVX2-NEXT:    vpextrb $5, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_44
 ; AVX2-NEXT:  # %bb.43: # %cond.store41
 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX2-NEXT:  .LBB15_44: # %else42
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $6, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_46
 ; AVX2-NEXT:  # %bb.45: # %cond.store43
 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX2-NEXT:  .LBB15_46: # %else44
-; AVX2-NEXT:    vpextrb $7, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_48
 ; AVX2-NEXT:  # %bb.47: # %cond.store45
 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX2-NEXT:  .LBB15_48: # %else46
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_50
 ; AVX2-NEXT:  # %bb.49: # %cond.store47
 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX2-NEXT:  .LBB15_50: # %else48
-; AVX2-NEXT:    vpextrb $9, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_52
 ; AVX2-NEXT:  # %bb.51: # %cond.store49
 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX2-NEXT:  .LBB15_52: # %else50
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $10, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_54
 ; AVX2-NEXT:  # %bb.53: # %cond.store51
 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX2-NEXT:  .LBB15_54: # %else52
-; AVX2-NEXT:    vpextrb $11, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_56
 ; AVX2-NEXT:  # %bb.55: # %cond.store53
 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX2-NEXT:  .LBB15_56: # %else54
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX2-NEXT:    vpextrb $12, %xmm1, %eax
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_58
 ; AVX2-NEXT:  # %bb.57: # %cond.store55
 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX2-NEXT:  .LBB15_58: # %else56
-; AVX2-NEXT:    vpextrb $13, %xmm1, %eax
+; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
 ; AVX2-NEXT:    je .LBB15_60
 ; AVX2-NEXT:  # %bb.59: # %cond.store57
 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX2-NEXT:  .LBB15_60: # %else58
-; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX2-NEXT:    vpextrb $14, %xmm1, %eax
 ; AVX2-NEXT:    notb %al
 ; AVX2-NEXT:    testb $1, %al
@@ -6692,9 +6701,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-LABEL: truncstore_v32i16_v32i8:
 ; AVX512F:       # %bb.0:
 ; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3
-; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm3
-; AVX512F-NEXT:    vmovdqa64 %zmm3, %zmm4
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm4
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm4
+; AVX512F-NEXT:    vpternlogq $15, %zmm4, %zmm4, %zmm4
 ; AVX512F-NEXT:    vpmovsxbd %xmm4, %zmm4
 ; AVX512F-NEXT:    vptestmd %zmm4, %zmm4, %k0
 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
@@ -6711,8 +6719,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.1: # %cond.store
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
 ; AVX512F-NEXT:  .LBB15_2: # %else
-; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
-; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm1
+; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm2, %xmm1
+; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
+; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -6722,9 +6731,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
 ; AVX512F-NEXT:  .LBB15_4: # %else2
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -6734,6 +6742,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.5: # %cond.store3
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
 ; AVX512F-NEXT:  .LBB15_6: # %else4
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6745,9 +6754,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
 ; AVX512F-NEXT:  .LBB15_8: # %else6
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -6757,6 +6765,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.9: # %cond.store7
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
 ; AVX512F-NEXT:  .LBB15_10: # %else8
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6768,9 +6777,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
 ; AVX512F-NEXT:  .LBB15_12: # %else10
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -6780,6 +6788,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.13: # %cond.store11
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
 ; AVX512F-NEXT:  .LBB15_14: # %else12
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6791,9 +6800,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
 ; AVX512F-NEXT:  .LBB15_16: # %else14
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -6803,6 +6811,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.17: # %cond.store15
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
 ; AVX512F-NEXT:  .LBB15_18: # %else16
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6814,9 +6823,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
 ; AVX512F-NEXT:  .LBB15_20: # %else18
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -6826,6 +6834,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.21: # %cond.store19
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
 ; AVX512F-NEXT:  .LBB15_22: # %else20
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6837,9 +6846,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
 ; AVX512F-NEXT:  .LBB15_24: # %else22
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -6849,6 +6857,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.25: # %cond.store23
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
 ; AVX512F-NEXT:  .LBB15_26: # %else24
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6860,9 +6869,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
 ; AVX512F-NEXT:  .LBB15_28: # %else26
 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm3, %zmm3, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
@@ -6872,6 +6880,7 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.29: # %cond.store27
 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
 ; AVX512F-NEXT:  .LBB15_30: # %else28
+; AVX512F-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
@@ -6882,11 +6891,11 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.31: # %cond.store29
 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
 ; AVX512F-NEXT:  .LBB15_32: # %else30
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
@@ -6896,9 +6905,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.33: # %cond.store31
 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
 ; AVX512F-NEXT:  .LBB15_34: # %else32
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6906,11 +6915,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.35: # %cond.store33
 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
 ; AVX512F-NEXT:  .LBB15_36: # %else34
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
@@ -6920,9 +6928,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.37: # %cond.store35
 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
 ; AVX512F-NEXT:  .LBB15_38: # %else36
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6930,11 +6938,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.39: # %cond.store37
 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
 ; AVX512F-NEXT:  .LBB15_40: # %else38
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
@@ -6944,9 +6951,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.41: # %cond.store39
 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
 ; AVX512F-NEXT:  .LBB15_42: # %else40
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6954,11 +6961,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.43: # %cond.store41
 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
 ; AVX512F-NEXT:  .LBB15_44: # %else42
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
@@ -6968,9 +6974,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.45: # %cond.store43
 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
 ; AVX512F-NEXT:  .LBB15_46: # %else44
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -6978,11 +6984,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.47: # %cond.store45
 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
 ; AVX512F-NEXT:  .LBB15_48: # %else46
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
@@ -6992,9 +6997,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.49: # %cond.store47
 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
 ; AVX512F-NEXT:  .LBB15_50: # %else48
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7002,11 +7007,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.51: # %cond.store49
 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
 ; AVX512F-NEXT:  .LBB15_52: # %else50
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
@@ -7016,9 +7020,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.53: # %cond.store51
 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
 ; AVX512F-NEXT:  .LBB15_54: # %else52
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7026,11 +7030,10 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.55: # %cond.store53
 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
 ; AVX512F-NEXT:  .LBB15_56: # %else54
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
-; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm3
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm3
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
+; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm3
 ; AVX512F-NEXT:    vpmovsxbd %xmm3, %zmm3
 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
@@ -7040,9 +7043,9 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.57: # %cond.store55
 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
 ; AVX512F-NEXT:  .LBB15_58: # %else56
-; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
-; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
-; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
+; AVX512F-NEXT:    vpternlogq $15, %zmm2, %zmm2, %zmm2
+; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
+; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
 ; AVX512F-NEXT:    kmovw %k0, %eax
 ; AVX512F-NEXT:    testb $1, %al
@@ -7050,9 +7053,8 @@ define void @truncstore_v32i16_v32i8(<32
 ; AVX512F-NEXT:  # %bb.59: # %cond.store57
 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
 ; AVX512F-NEXT:  .LBB15_60: # %else58
-; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
-; AVX512F-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
-; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm1
+; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
+; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
 ; AVX512F-NEXT:    vmovdqa64 %zmm1, %zmm2
 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm2
 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2




More information about the llvm-commits mailing list