summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/masked_compressstore.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/masked_compressstore.ll')
-rw-r--r--llvm/test/CodeGen/X86/masked_compressstore.ll1013
1 files changed, 624 insertions, 389 deletions
diff --git a/llvm/test/CodeGen/X86/masked_compressstore.ll b/llvm/test/CodeGen/X86/masked_compressstore.ll
index 0806ccd86ef..6ee8779f82c 100644
--- a/llvm/test/CodeGen/X86/masked_compressstore.ll
+++ b/llvm/test/CodeGen/X86/masked_compressstore.ll
@@ -130,67 +130,133 @@ define void @compressstore_v8f64_v8i1(double* %base, <8 x double> %V, <8 x i1> %
; SSE42-NEXT: LBB0_16: ## %else20
; SSE42-NEXT: retq
;
-; AVX1OR2-LABEL: compressstore_v8f64_v8i1:
-; AVX1OR2: ## %bb.0:
-; AVX1OR2-NEXT: vpextrb $0, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_2
-; AVX1OR2-NEXT: ## %bb.1: ## %cond.store
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_2: ## %else
-; AVX1OR2-NEXT: vpextrb $2, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_4
-; AVX1OR2-NEXT: ## %bb.3: ## %cond.store1
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_4: ## %else2
-; AVX1OR2-NEXT: vpextrb $4, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
-; AVX1OR2-NEXT: je LBB0_6
-; AVX1OR2-NEXT: ## %bb.5: ## %cond.store4
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_6: ## %else5
-; AVX1OR2-NEXT: vpextrb $6, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_8
-; AVX1OR2-NEXT: ## %bb.7: ## %cond.store7
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_8: ## %else8
-; AVX1OR2-NEXT: vpextrb $8, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_10
-; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
-; AVX1OR2-NEXT: vmovlpd %xmm1, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_10: ## %else11
-; AVX1OR2-NEXT: vpextrb $10, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_12
-; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
-; AVX1OR2-NEXT: vmovhpd %xmm1, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_12: ## %else14
-; AVX1OR2-NEXT: vpextrb $12, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
-; AVX1OR2-NEXT: je LBB0_14
-; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB0_14: ## %else17
-; AVX1OR2-NEXT: vpextrb $14, %xmm2, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB0_16
-; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: LBB0_16: ## %else20
-; AVX1OR2-NEXT: vzeroupper
-; AVX1OR2-NEXT: retq
+; AVX1-LABEL: compressstore_v8f64_v8i1:
+; AVX1: ## %bb.0:
+; AVX1-NEXT: vpextrb $0, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_2
+; AVX1-NEXT: ## %bb.1: ## %cond.store
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_2: ## %else
+; AVX1-NEXT: vpextrb $2, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_4
+; AVX1-NEXT: ## %bb.3: ## %cond.store1
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_4: ## %else2
+; AVX1-NEXT: vpextrb $4, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_6
+; AVX1-NEXT: ## %bb.5: ## %cond.store4
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
+; AVX1-NEXT: vmovlps %xmm3, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_6: ## %else5
+; AVX1-NEXT: vpextrb $6, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_8
+; AVX1-NEXT: ## %bb.7: ## %cond.store7
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_8: ## %else8
+; AVX1-NEXT: vpextrb $8, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_10
+; AVX1-NEXT: ## %bb.9: ## %cond.store10
+; AVX1-NEXT: vmovlpd %xmm1, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_10: ## %else11
+; AVX1-NEXT: vpextrb $10, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_12
+; AVX1-NEXT: ## %bb.11: ## %cond.store13
+; AVX1-NEXT: vmovhpd %xmm1, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_12: ## %else14
+; AVX1-NEXT: vpextrb $12, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_14
+; AVX1-NEXT: ## %bb.13: ## %cond.store16
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB0_14: ## %else17
+; AVX1-NEXT: vpextrb $14, %xmm2, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB0_16
+; AVX1-NEXT: ## %bb.15: ## %cond.store19
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: LBB0_16: ## %else20
+; AVX1-NEXT: vzeroupper
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: compressstore_v8f64_v8i1:
+; AVX2: ## %bb.0:
+; AVX2-NEXT: vpextrb $0, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_2
+; AVX2-NEXT: ## %bb.1: ## %cond.store
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_2: ## %else
+; AVX2-NEXT: vpextrb $2, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_4
+; AVX2-NEXT: ## %bb.3: ## %cond.store1
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_4: ## %else2
+; AVX2-NEXT: vpextrb $4, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_6
+; AVX2-NEXT: ## %bb.5: ## %cond.store4
+; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm3
+; AVX2-NEXT: vmovlpd %xmm3, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_6: ## %else5
+; AVX2-NEXT: vpextrb $6, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_8
+; AVX2-NEXT: ## %bb.7: ## %cond.store7
+; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_8: ## %else8
+; AVX2-NEXT: vpextrb $8, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_10
+; AVX2-NEXT: ## %bb.9: ## %cond.store10
+; AVX2-NEXT: vmovlpd %xmm1, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_10: ## %else11
+; AVX2-NEXT: vpextrb $10, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_12
+; AVX2-NEXT: ## %bb.11: ## %cond.store13
+; AVX2-NEXT: vmovhpd %xmm1, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_12: ## %else14
+; AVX2-NEXT: vpextrb $12, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_14
+; AVX2-NEXT: ## %bb.13: ## %cond.store16
+; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB0_14: ## %else17
+; AVX2-NEXT: vpextrb $14, %xmm2, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB0_16
+; AVX2-NEXT: ## %bb.15: ## %cond.store19
+; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: LBB0_16: ## %else20
+; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: retq
;
; AVX512F-LABEL: compressstore_v8f64_v8i1:
; AVX512F: ## %bb.0:
@@ -457,125 +523,253 @@ define void @compressstore_v16f64_v16i1(double* %base, <16 x double> %V, <16 x i
; SSE42-NEXT: LBB1_32: ## %else44
; SSE42-NEXT: retq
;
-; AVX1OR2-LABEL: compressstore_v16f64_v16i1:
-; AVX1OR2: ## %bb.0:
-; AVX1OR2-NEXT: vpextrb $0, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_2
-; AVX1OR2-NEXT: ## %bb.1: ## %cond.store
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_2: ## %else
-; AVX1OR2-NEXT: vpextrb $1, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_4
-; AVX1OR2-NEXT: ## %bb.3: ## %cond.store1
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_4: ## %else2
-; AVX1OR2-NEXT: vpextrb $2, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
-; AVX1OR2-NEXT: je LBB1_6
-; AVX1OR2-NEXT: ## %bb.5: ## %cond.store4
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_6: ## %else5
-; AVX1OR2-NEXT: vpextrb $3, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_8
-; AVX1OR2-NEXT: ## %bb.7: ## %cond.store7
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_8: ## %else8
-; AVX1OR2-NEXT: vpextrb $4, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_10
-; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
-; AVX1OR2-NEXT: vmovlpd %xmm1, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_10: ## %else11
-; AVX1OR2-NEXT: vpextrb $5, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_12
-; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
-; AVX1OR2-NEXT: vmovhpd %xmm1, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_12: ## %else14
-; AVX1OR2-NEXT: vpextrb $6, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
-; AVX1OR2-NEXT: je LBB1_14
-; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_14: ## %else17
-; AVX1OR2-NEXT: vpextrb $7, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_16
-; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_16: ## %else20
-; AVX1OR2-NEXT: vpextrb $8, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_18
-; AVX1OR2-NEXT: ## %bb.17: ## %cond.store22
-; AVX1OR2-NEXT: vmovlpd %xmm2, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_18: ## %else23
-; AVX1OR2-NEXT: vpextrb $9, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_20
-; AVX1OR2-NEXT: ## %bb.19: ## %cond.store25
-; AVX1OR2-NEXT: vmovhpd %xmm2, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_20: ## %else26
-; AVX1OR2-NEXT: vpextrb $10, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm2, %xmm0
-; AVX1OR2-NEXT: je LBB1_22
-; AVX1OR2-NEXT: ## %bb.21: ## %cond.store28
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_22: ## %else29
-; AVX1OR2-NEXT: vpextrb $11, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_24
-; AVX1OR2-NEXT: ## %bb.23: ## %cond.store31
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_24: ## %else32
-; AVX1OR2-NEXT: vpextrb $12, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_26
-; AVX1OR2-NEXT: ## %bb.25: ## %cond.store34
-; AVX1OR2-NEXT: vmovlpd %xmm3, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_26: ## %else35
-; AVX1OR2-NEXT: vpextrb $13, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_28
-; AVX1OR2-NEXT: ## %bb.27: ## %cond.store37
-; AVX1OR2-NEXT: vmovhpd %xmm3, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_28: ## %else38
-; AVX1OR2-NEXT: vpextrb $14, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm3, %xmm0
-; AVX1OR2-NEXT: je LBB1_30
-; AVX1OR2-NEXT: ## %bb.29: ## %cond.store40
-; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: LBB1_30: ## %else41
-; AVX1OR2-NEXT: vpextrb $15, %xmm4, %eax
-; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: je LBB1_32
-; AVX1OR2-NEXT: ## %bb.31: ## %cond.store43
-; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
-; AVX1OR2-NEXT: LBB1_32: ## %else44
-; AVX1OR2-NEXT: vzeroupper
-; AVX1OR2-NEXT: retq
+; AVX1-LABEL: compressstore_v16f64_v16i1:
+; AVX1: ## %bb.0:
+; AVX1-NEXT: vpextrb $0, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_2
+; AVX1-NEXT: ## %bb.1: ## %cond.store
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_2: ## %else
+; AVX1-NEXT: vpextrb $1, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_4
+; AVX1-NEXT: ## %bb.3: ## %cond.store1
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_4: ## %else2
+; AVX1-NEXT: vpextrb $2, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_6
+; AVX1-NEXT: ## %bb.5: ## %cond.store4
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
+; AVX1-NEXT: vmovlps %xmm5, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_6: ## %else5
+; AVX1-NEXT: vpextrb $3, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_8
+; AVX1-NEXT: ## %bb.7: ## %cond.store7
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_8: ## %else8
+; AVX1-NEXT: vpextrb $4, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_10
+; AVX1-NEXT: ## %bb.9: ## %cond.store10
+; AVX1-NEXT: vmovlpd %xmm1, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_10: ## %else11
+; AVX1-NEXT: vpextrb $5, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_12
+; AVX1-NEXT: ## %bb.11: ## %cond.store13
+; AVX1-NEXT: vmovhpd %xmm1, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_12: ## %else14
+; AVX1-NEXT: vpextrb $6, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_14
+; AVX1-NEXT: ## %bb.13: ## %cond.store16
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_14: ## %else17
+; AVX1-NEXT: vpextrb $7, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_16
+; AVX1-NEXT: ## %bb.15: ## %cond.store19
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_16: ## %else20
+; AVX1-NEXT: vpextrb $8, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_18
+; AVX1-NEXT: ## %bb.17: ## %cond.store22
+; AVX1-NEXT: vmovlpd %xmm2, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_18: ## %else23
+; AVX1-NEXT: vpextrb $9, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_20
+; AVX1-NEXT: ## %bb.19: ## %cond.store25
+; AVX1-NEXT: vmovhpd %xmm2, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_20: ## %else26
+; AVX1-NEXT: vpextrb $10, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_22
+; AVX1-NEXT: ## %bb.21: ## %cond.store28
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_22: ## %else29
+; AVX1-NEXT: vpextrb $11, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_24
+; AVX1-NEXT: ## %bb.23: ## %cond.store31
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_24: ## %else32
+; AVX1-NEXT: vpextrb $12, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_26
+; AVX1-NEXT: ## %bb.25: ## %cond.store34
+; AVX1-NEXT: vmovlpd %xmm3, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_26: ## %else35
+; AVX1-NEXT: vpextrb $13, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_28
+; AVX1-NEXT: ## %bb.27: ## %cond.store37
+; AVX1-NEXT: vmovhpd %xmm3, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_28: ## %else38
+; AVX1-NEXT: vpextrb $14, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_30
+; AVX1-NEXT: ## %bb.29: ## %cond.store40
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
+; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX1-NEXT: addq $8, %rdi
+; AVX1-NEXT: LBB1_30: ## %else41
+; AVX1-NEXT: vpextrb $15, %xmm4, %eax
+; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: je LBB1_32
+; AVX1-NEXT: ## %bb.31: ## %cond.store43
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
+; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX1-NEXT: LBB1_32: ## %else44
+; AVX1-NEXT: vzeroupper
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: compressstore_v16f64_v16i1:
+; AVX2: ## %bb.0:
+; AVX2-NEXT: vpextrb $0, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_2
+; AVX2-NEXT: ## %bb.1: ## %cond.store
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_2: ## %else
+; AVX2-NEXT: vpextrb $1, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_4
+; AVX2-NEXT: ## %bb.3: ## %cond.store1
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_4: ## %else2
+; AVX2-NEXT: vpextrb $2, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_6
+; AVX2-NEXT: ## %bb.5: ## %cond.store4
+; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm5
+; AVX2-NEXT: vmovlpd %xmm5, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_6: ## %else5
+; AVX2-NEXT: vpextrb $3, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_8
+; AVX2-NEXT: ## %bb.7: ## %cond.store7
+; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_8: ## %else8
+; AVX2-NEXT: vpextrb $4, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_10
+; AVX2-NEXT: ## %bb.9: ## %cond.store10
+; AVX2-NEXT: vmovlpd %xmm1, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_10: ## %else11
+; AVX2-NEXT: vpextrb $5, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_12
+; AVX2-NEXT: ## %bb.11: ## %cond.store13
+; AVX2-NEXT: vmovhpd %xmm1, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_12: ## %else14
+; AVX2-NEXT: vpextrb $6, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_14
+; AVX2-NEXT: ## %bb.13: ## %cond.store16
+; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_14: ## %else17
+; AVX2-NEXT: vpextrb $7, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_16
+; AVX2-NEXT: ## %bb.15: ## %cond.store19
+; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_16: ## %else20
+; AVX2-NEXT: vpextrb $8, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_18
+; AVX2-NEXT: ## %bb.17: ## %cond.store22
+; AVX2-NEXT: vmovlpd %xmm2, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_18: ## %else23
+; AVX2-NEXT: vpextrb $9, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_20
+; AVX2-NEXT: ## %bb.19: ## %cond.store25
+; AVX2-NEXT: vmovhpd %xmm2, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_20: ## %else26
+; AVX2-NEXT: vpextrb $10, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_22
+; AVX2-NEXT: ## %bb.21: ## %cond.store28
+; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm0
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_22: ## %else29
+; AVX2-NEXT: vpextrb $11, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_24
+; AVX2-NEXT: ## %bb.23: ## %cond.store31
+; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_24: ## %else32
+; AVX2-NEXT: vpextrb $12, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_26
+; AVX2-NEXT: ## %bb.25: ## %cond.store34
+; AVX2-NEXT: vmovlpd %xmm3, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_26: ## %else35
+; AVX2-NEXT: vpextrb $13, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_28
+; AVX2-NEXT: ## %bb.27: ## %cond.store37
+; AVX2-NEXT: vmovhpd %xmm3, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_28: ## %else38
+; AVX2-NEXT: vpextrb $14, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_30
+; AVX2-NEXT: ## %bb.29: ## %cond.store40
+; AVX2-NEXT: vextractf128 $1, %ymm3, %xmm0
+; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
+; AVX2-NEXT: addq $8, %rdi
+; AVX2-NEXT: LBB1_30: ## %else41
+; AVX2-NEXT: vpextrb $15, %xmm4, %eax
+; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: je LBB1_32
+; AVX2-NEXT: ## %bb.31: ## %cond.store43
+; AVX2-NEXT: vextractf128 $1, %ymm3, %xmm0
+; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
+; AVX2-NEXT: LBB1_32: ## %else44
+; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: retq
;
; AVX512F-LABEL: compressstore_v16f64_v16i1:
; AVX512F: ## %bb.0:
@@ -1062,30 +1256,33 @@ define void @compressstore_v8f32_v8i1(float* %base, <8 x float> %V, <8 x i1> %ma
; AVX1OR2-NEXT: LBB4_8: ## %else8
; AVX1OR2-NEXT: vpextrb $8, %xmm1, %eax
; AVX1OR2-NEXT: testb $1, %al
-; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1OR2-NEXT: je LBB4_10
; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
-; AVX1OR2-NEXT: vmovss %xmm0, (%rdi)
+; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
+; AVX1OR2-NEXT: vmovss %xmm2, (%rdi)
; AVX1OR2-NEXT: addq $4, %rdi
; AVX1OR2-NEXT: LBB4_10: ## %else11
; AVX1OR2-NEXT: vpextrb $10, %xmm1, %eax
; AVX1OR2-NEXT: testb $1, %al
; AVX1OR2-NEXT: je LBB4_12
; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
-; AVX1OR2-NEXT: vextractps $1, %xmm0, (%rdi)
+; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
+; AVX1OR2-NEXT: vextractps $1, %xmm2, (%rdi)
; AVX1OR2-NEXT: addq $4, %rdi
; AVX1OR2-NEXT: LBB4_12: ## %else14
; AVX1OR2-NEXT: vpextrb $12, %xmm1, %eax
; AVX1OR2-NEXT: testb $1, %al
; AVX1OR2-NEXT: je LBB4_14
; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
-; AVX1OR2-NEXT: vextractps $2, %xmm0, (%rdi)
+; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
+; AVX1OR2-NEXT: vextractps $2, %xmm2, (%rdi)
; AVX1OR2-NEXT: addq $4, %rdi
; AVX1OR2-NEXT: LBB4_14: ## %else17
; AVX1OR2-NEXT: vpextrb $14, %xmm1, %eax
; AVX1OR2-NEXT: testb $1, %al
; AVX1OR2-NEXT: je LBB4_16
; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
+; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1OR2-NEXT: vextractps $3, %xmm0, (%rdi)
; AVX1OR2-NEXT: LBB4_16: ## %else20
; AVX1OR2-NEXT: vzeroupper
@@ -1848,10 +2045,10 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
; AVX1-NEXT: vpextrb $4, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm10
; AVX1-NEXT: je LBB6_10
; AVX1-NEXT: ## %bb.9: ## %cond.store10
-; AVX1-NEXT: vmovss %xmm10, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
+; AVX1-NEXT: vmovd %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_10: ## %else11
; AVX1-NEXT: vpackssdw %xmm9, %xmm0, %xmm4
@@ -1860,27 +2057,30 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_12
; AVX1-NEXT: ## %bb.11: ## %cond.store13
-; AVX1-NEXT: vextractps $1, %xmm10, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
+; AVX1-NEXT: vpextrd $1, %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_12: ## %else14
; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
-; AVX1-NEXT: vpcmpeqd %xmm4, %xmm8, %xmm4
-; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
-; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpextrb $6, %xmm0, %eax
+; AVX1-NEXT: vpcmpeqd %xmm4, %xmm8, %xmm8
+; AVX1-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
+; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
+; AVX1-NEXT: vpextrb $6, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_14
; AVX1-NEXT: ## %bb.13: ## %cond.store16
-; AVX1-NEXT: vextractps $2, %xmm10, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
+; AVX1-NEXT: vpextrd $2, %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_14: ## %else17
-; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
-; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpextrb $7, %xmm0, %eax
+; AVX1-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
+; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
+; AVX1-NEXT: vpextrb $7, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_16
; AVX1-NEXT: ## %bb.15: ## %cond.store19
-; AVX1-NEXT: vextractps $3, %xmm10, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
+; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_16: ## %else20
; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
@@ -1925,45 +2125,48 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX1-NEXT: vextractps $3, %xmm1, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_24: ## %else32
-; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm4
-; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpcmpeqd %xmm0, %xmm4, %xmm5
-; AVX1-NEXT: vpackssdw %xmm5, %xmm0, %xmm0
-; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpextrb $12, %xmm0, %eax
+; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm0
+; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
+; AVX1-NEXT: vpcmpeqd %xmm4, %xmm0, %xmm4
+; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm5
+; AVX1-NEXT: vpacksswb %xmm5, %xmm0, %xmm5
+; AVX1-NEXT: vpextrb $12, %xmm5, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1-NEXT: je LBB6_26
; AVX1-NEXT: ## %bb.25: ## %cond.store34
-; AVX1-NEXT: vmovd %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
+; AVX1-NEXT: vmovd %xmm5, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_26: ## %else35
-; AVX1-NEXT: vpackssdw %xmm5, %xmm0, %xmm1
-; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpextrb $13, %xmm1, %eax
+; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm4
+; AVX1-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
+; AVX1-NEXT: vpextrb $13, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_28
; AVX1-NEXT: ## %bb.27: ## %cond.store37
-; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
+; AVX1-NEXT: vpextrd $1, %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_28: ## %else38
-; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; AVX1-NEXT: vpcmpeqd %xmm1, %xmm4, %xmm1
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm4
+; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
+; AVX1-NEXT: vpcmpeqd %xmm4, %xmm0, %xmm0
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
; AVX1-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
; AVX1-NEXT: vpextrb $14, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_30
; AVX1-NEXT: ## %bb.29: ## %cond.store40
-; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
+; AVX1-NEXT: vpextrd $2, %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_30: ## %else41
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpextrb $15, %xmm1, %eax
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpextrb $15, %xmm0, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_32
; AVX1-NEXT: ## %bb.31: ## %cond.store43
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_32: ## %else44
@@ -2009,45 +2212,48 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX1-NEXT: vextractps $3, %xmm2, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_40: ## %else56
-; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm1
-; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm4
-; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
-; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpextrb $4, %xmm0, %eax
+; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm0
+; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm4
+; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
+; AVX1-NEXT: vpextrb $4, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
; AVX1-NEXT: je LBB6_42
; AVX1-NEXT: ## %bb.41: ## %cond.store58
-; AVX1-NEXT: vmovd %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
+; AVX1-NEXT: vmovd %xmm4, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_42: ## %else59
-; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm2
-; AVX1-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
-; AVX1-NEXT: vpextrb $5, %xmm2, %eax
+; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
+; AVX1-NEXT: vpextrb $5, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_44
; AVX1-NEXT: ## %bb.43: ## %cond.store61
-; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1
+; AVX1-NEXT: vpextrd $1, %xmm1, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_44: ## %else62
-; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
-; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
-; AVX1-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
-; AVX1-NEXT: vpextrb $6, %xmm2, %eax
+; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
+; AVX1-NEXT: vpextrb $6, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_46
; AVX1-NEXT: ## %bb.45: ## %cond.store64
-; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1
+; AVX1-NEXT: vpextrd $2, %xmm1, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_46: ## %else65
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
-; AVX1-NEXT: vpextrb $7, %xmm1, %eax
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpextrb $7, %xmm0, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_48
; AVX1-NEXT: ## %bb.47: ## %cond.store67
+; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_48: ## %else68
@@ -2093,45 +2299,48 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX1-NEXT: vextractps $3, %xmm3, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_56: ## %else80
-; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1
-; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm2
-; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
-; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX1-NEXT: vpextrb $12, %xmm0, %eax
+; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm0
+; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
+; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
+; AVX1-NEXT: vpextrb $12, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
; AVX1-NEXT: je LBB6_58
; AVX1-NEXT: ## %bb.57: ## %cond.store82
-; AVX1-NEXT: vmovd %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
+; AVX1-NEXT: vmovd %xmm2, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_58: ## %else83
-; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm2
-; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
-; AVX1-NEXT: vpextrb $13, %xmm2, %eax
+; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpextrb $13, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_60
; AVX1-NEXT: ## %bb.59: ## %cond.store85
-; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm1
+; AVX1-NEXT: vpextrd $1, %xmm1, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_60: ## %else86
-; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
-; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
-; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
-; AVX1-NEXT: vpextrb $14, %xmm2, %eax
+; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vpextrb $14, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_62
; AVX1-NEXT: ## %bb.61: ## %cond.store88
-; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm1
+; AVX1-NEXT: vpextrd $2, %xmm1, (%rdi)
; AVX1-NEXT: addq $4, %rdi
; AVX1-NEXT: LBB6_62: ## %else89
-; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX1-NEXT: vpextrb $15, %xmm1, %eax
+; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX1-NEXT: vpextrb $15, %xmm0, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB6_64
; AVX1-NEXT: ## %bb.63: ## %cond.store91
+; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX1-NEXT: LBB6_64: ## %else92
; AVX1-NEXT: vzeroupper
@@ -2186,40 +2395,43 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX2-NEXT: vpacksswb %xmm0, %xmm9, %xmm9
; AVX2-NEXT: vpextrb $4, %xmm9, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm9
; AVX2-NEXT: je LBB6_10
; AVX2-NEXT: ## %bb.9: ## %cond.store10
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm9
; AVX2-NEXT: vmovd %xmm9, (%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 %xmm8, %xmm0, %xmm8
+; AVX2-NEXT: vpacksswb %xmm0, %xmm8, %xmm8
+; AVX2-NEXT: vpextrb $5, %xmm8, %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: vextracti128 $1, %ymm0, %xmm8
+; AVX2-NEXT: vpextrd $1, %xmm8, (%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: vpackssdw %xmm4, %xmm0, %xmm0
-; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT: vpextrb $6, %xmm0, %eax
+; AVX2-NEXT: vpxor %xmm8, %xmm8, %xmm8
+; AVX2-NEXT: vpcmpeqd %ymm8, %ymm4, %ymm4
+; AVX2-NEXT: vextracti128 $1, %ymm4, %xmm8
+; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
+; AVX2-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT: vpextrb $6, %xmm4, %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: vextracti128 $1, %ymm0, %xmm4
+; AVX2-NEXT: vpextrd $2, %xmm4, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_14: ## %else17
-; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
-; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT: vpextrb $7, %xmm0, %eax
+; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
+; AVX2-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
+; AVX2-NEXT: vpextrb $7, %xmm4, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_16
; AVX2-NEXT: ## %bb.15: ## %cond.store19
-; AVX2-NEXT: vpextrd $3, %xmm9, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_16: ## %else20
; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
@@ -2264,44 +2476,47 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX2-NEXT: LBB6_24: ## %else32
; 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: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT: vpextrb $12, %xmm0, %eax
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
+; AVX2-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
+; AVX2-NEXT: vpextrb $12, %xmm4, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: je LBB6_26
; AVX2-NEXT: ## %bb.25: ## %cond.store34
-; AVX2-NEXT: vmovd %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm4
+; AVX2-NEXT: vmovd %xmm4, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_26: ## %else35
-; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm1
-; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpextrb $13, %xmm1, %eax
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $13, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_28
; AVX2-NEXT: ## %bb.27: ## %cond.store37
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi)
; 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: vpackssdw %xmm1, %xmm0, %xmm4
+; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpcmpeqd %ymm0, %ymm5, %ymm0
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
; AVX2-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
; AVX2-NEXT: vpextrb $14, %xmm4, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_30
; AVX2-NEXT: ## %bb.29: ## %cond.store40
-; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm4
+; AVX2-NEXT: vpextrd $2, %xmm4, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_30: ## %else41
-; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpextrb $15, %xmm1, %eax
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $15, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_32
; AVX2-NEXT: ## %bb.31: ## %cond.store43
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_32: ## %else44
@@ -2347,44 +2562,47 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX2-NEXT: LBB6_40: ## %else56
; 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: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT: vpextrb $4, %xmm0, %eax
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
+; AVX2-NEXT: vpextrb $4, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
; AVX2-NEXT: je LBB6_42
; AVX2-NEXT: ## %bb.41: ## %cond.store58
-; AVX2-NEXT: vmovd %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT: vmovd %xmm1, (%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 %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $5, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_44
; AVX2-NEXT: ## %bb.43: ## %cond.store61
+; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
; 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: vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
-; AVX2-NEXT: vpextrb $6, %xmm2, %eax
+; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpcmpeqd %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
+; AVX2-NEXT: vpextrb $6, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_46
; AVX2-NEXT: ## %bb.45: ## %cond.store64
-; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm1
+; AVX2-NEXT: vpextrd $2, %xmm1, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_46: ## %else65
-; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
-; AVX2-NEXT: vpextrb $7, %xmm1, %eax
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $7, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_48
; AVX2-NEXT: ## %bb.47: ## %cond.store67
+; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_48: ## %else68
@@ -2430,44 +2648,47 @@ define void @compressstore_v32f32_v32i32(float* %base, <32 x float> %V, <32 x i3
; AVX2-NEXT: LBB6_56: ## %else80
; 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: vpacksswb %xmm0, %xmm0, %xmm0
-; AVX2-NEXT: vpextrb $12, %xmm0, %eax
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
+; AVX2-NEXT: vpextrb $12, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
; AVX2-NEXT: je LBB6_58
; AVX2-NEXT: ## %bb.57: ## %cond.store82
-; AVX2-NEXT: vmovd %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT: vmovd %xmm1, (%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 %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $13, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_60
; AVX2-NEXT: ## %bb.59: ## %cond.store85
+; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
; 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: vpackssdw %xmm1, %xmm0, %xmm2
-; AVX2-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
-; AVX2-NEXT: vpextrb $14, %xmm2, %eax
+; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpcmpeqd %ymm0, %ymm7, %ymm0
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
+; AVX2-NEXT: vpextrb $14, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_62
; AVX2-NEXT: ## %bb.61: ## %cond.store88
-; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm1
+; AVX2-NEXT: vpextrd $2, %xmm1, (%rdi)
; AVX2-NEXT: addq $4, %rdi
; AVX2-NEXT: LBB6_62: ## %else89
-; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
-; AVX2-NEXT: vpextrb $15, %xmm1, %eax
+; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
+; AVX2-NEXT: vpextrb $15, %xmm0, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB6_64
; AVX2-NEXT: ## %bb.63: ## %cond.store91
+; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
; AVX2-NEXT: LBB6_64: ## %else92
; AVX2-NEXT: vzeroupper
@@ -2670,16 +2891,17 @@ define void @compressstore_v4i64_v4i1(i64* %base, <4 x i64> %V, <4 x i1> %mask)
; AVX1-NEXT: LBB8_4: ## %else2
; AVX1-NEXT: vpextrb $8, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: je LBB8_6
; AVX1-NEXT: ## %bb.5: ## %cond.store4
-; AVX1-NEXT: vmovq %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
+; AVX1-NEXT: vmovlps %xmm2, (%rdi)
; AVX1-NEXT: addq $8, %rdi
; AVX1-NEXT: LBB8_6: ## %else5
; AVX1-NEXT: vpextrb $12, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB8_8
; AVX1-NEXT: ## %bb.7: ## %cond.store7
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX1-NEXT: LBB8_8: ## %else8
; AVX1-NEXT: vzeroupper
@@ -2703,16 +2925,17 @@ define void @compressstore_v4i64_v4i1(i64* %base, <4 x i64> %V, <4 x i1> %mask)
; AVX2-NEXT: LBB8_4: ## %else2
; AVX2-NEXT: vpextrb $8, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: je LBB8_6
; AVX2-NEXT: ## %bb.5: ## %cond.store4
-; AVX2-NEXT: vmovq %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT: vmovq %xmm2, (%rdi)
; AVX2-NEXT: addq $8, %rdi
; AVX2-NEXT: LBB8_6: ## %else5
; AVX2-NEXT: vpextrb $12, %xmm1, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB8_8
; AVX2-NEXT: ## %bb.7: ## %cond.store7
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX2-NEXT: LBB8_8: ## %else8
; AVX2-NEXT: vzeroupper
@@ -2889,16 +3112,17 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX1-NEXT: LBB9_4: ## %else2
; AVX1-NEXT: vpextrb $4, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: je LBB9_6
; AVX1-NEXT: ## %bb.5: ## %cond.store4
-; AVX1-NEXT: vmovq %xmm0, (%rdi)
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
+; AVX1-NEXT: vmovlps %xmm3, (%rdi)
; AVX1-NEXT: addq $8, %rdi
; AVX1-NEXT: LBB9_6: ## %else5
; AVX1-NEXT: vpextrb $6, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB9_8
; AVX1-NEXT: ## %bb.7: ## %cond.store7
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX1-NEXT: addq $8, %rdi
; AVX1-NEXT: LBB9_8: ## %else8
@@ -2918,9 +3142,9 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX1-NEXT: LBB9_12: ## %else14
; AVX1-NEXT: vpextrb $12, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
-; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1-NEXT: je LBB9_14
; AVX1-NEXT: ## %bb.13: ## %cond.store16
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1-NEXT: vmovq %xmm0, (%rdi)
; AVX1-NEXT: addq $8, %rdi
; AVX1-NEXT: LBB9_14: ## %else17
@@ -2928,6 +3152,7 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je LBB9_16
; AVX1-NEXT: ## %bb.15: ## %cond.store19
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX1-NEXT: LBB9_16: ## %else20
; AVX1-NEXT: vzeroupper
@@ -2951,16 +3176,17 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX2-NEXT: LBB9_4: ## %else2
; AVX2-NEXT: vpextrb $4, %xmm2, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: je LBB9_6
; AVX2-NEXT: ## %bb.5: ## %cond.store4
-; AVX2-NEXT: vmovq %xmm0, (%rdi)
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
+; AVX2-NEXT: vmovq %xmm3, (%rdi)
; AVX2-NEXT: addq $8, %rdi
; AVX2-NEXT: LBB9_6: ## %else5
; AVX2-NEXT: vpextrb $6, %xmm2, %eax
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB9_8
; AVX2-NEXT: ## %bb.7: ## %cond.store7
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX2-NEXT: addq $8, %rdi
; AVX2-NEXT: LBB9_8: ## %else8
@@ -2980,9 +3206,9 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX2-NEXT: LBB9_12: ## %else14
; AVX2-NEXT: vpextrb $12, %xmm2, %eax
; AVX2-NEXT: testb $1, %al
-; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: je LBB9_14
; AVX2-NEXT: ## %bb.13: ## %cond.store16
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: vmovq %xmm0, (%rdi)
; AVX2-NEXT: addq $8, %rdi
; AVX2-NEXT: LBB9_14: ## %else17
@@ -2990,6 +3216,7 @@ define void @compressstore_v8i64_v8i1(i64* %base, <8 x i64> %V, <8 x i1> %mask)
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je LBB9_16
; AVX2-NEXT: ## %bb.15: ## %cond.store19
+; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
; AVX2-NEXT: LBB9_16: ## %else20
; AVX2-NEXT: vzeroupper
@@ -3618,141 +3845,149 @@ define void @compressstore_v16i8_v16i8(i8* %base, <16 x i8> %V, <16 x i8> %trigg
; SSE2: ## %bb.0:
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: movd %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: movd %xmm0, %eax
+; SSE2-NEXT: movd %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_2
; SSE2-NEXT: ## %bb.1: ## %cond.store
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: movd %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_2: ## %else
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_4
; SSE2-NEXT: ## %bb.3: ## %cond.store1
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_4: ## %else2
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: movd %xmm2, %ecx
-; SSE2-NEXT: movl %ecx, %edx
-; SSE2-NEXT: shrl $16, %edx
-; SSE2-NEXT: testb $1, %dl
+; SSE2-NEXT: movd %xmm2, %eax
+; SSE2-NEXT: movl %eax, %ecx
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je LBB12_6
; SSE2-NEXT: ## %bb.5: ## %cond.store4
-; SSE2-NEXT: movl %eax, %edx
-; SSE2-NEXT: shrl $16, %edx
-; SSE2-NEXT: movb %dl, (%rdi)
+; SSE2-NEXT: movd %xmm0, %ecx
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_6: ## %else5
-; SSE2-NEXT: shrl $24, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $24, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_8
; SSE2-NEXT: ## %bb.7: ## %cond.store7
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $24, %eax
; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_8: ## %else8
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: pextrw $2, %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $2, %xmm0, %eax
+; SSE2-NEXT: pextrw $2, %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_10
; SSE2-NEXT: ## %bb.9: ## %cond.store10
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $2, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_10: ## %else11
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_12
; SSE2-NEXT: ## %bb.11: ## %cond.store13
+; SSE2-NEXT: pextrw $2, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_12: ## %else14
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: pextrw $3, %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $3, %xmm0, %eax
+; SSE2-NEXT: pextrw $3, %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_14
; SSE2-NEXT: ## %bb.13: ## %cond.store16
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $3, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_14: ## %else17
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_16
; SSE2-NEXT: ## %bb.15: ## %cond.store19
+; SSE2-NEXT: pextrw $3, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_16: ## %else20
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: pextrw $4, %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $4, %xmm0, %eax
+; SSE2-NEXT: pextrw $4, %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_18
; SSE2-NEXT: ## %bb.17: ## %cond.store22
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $4, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_18: ## %else23
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_20
; SSE2-NEXT: ## %bb.19: ## %cond.store25
+; SSE2-NEXT: pextrw $4, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_20: ## %else26
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: pextrw $5, %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $5, %xmm0, %eax
+; SSE2-NEXT: pextrw $5, %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_22
; SSE2-NEXT: ## %bb.21: ## %cond.store28
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $5, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_22: ## %else29
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_24
; SSE2-NEXT: ## %bb.23: ## %cond.store31
+; SSE2-NEXT: pextrw $5, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_24: ## %else32
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
-; SSE2-NEXT: pextrw $6, %xmm2, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $6, %xmm0, %eax
+; SSE2-NEXT: pextrw $6, %xmm2, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_26
; SSE2-NEXT: ## %bb.25: ## %cond.store34
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $6, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_26: ## %else35
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_28
; SSE2-NEXT: ## %bb.27: ## %cond.store37
+; SSE2-NEXT: pextrw $6, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_28: ## %else38
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
-; SSE2-NEXT: pextrw $7, %xmm1, %ecx
-; SSE2-NEXT: testb $1, %cl
-; SSE2-NEXT: pextrw $7, %xmm0, %eax
+; SSE2-NEXT: pextrw $7, %xmm1, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_30
; SSE2-NEXT: ## %bb.29: ## %cond.store40
-; SSE2-NEXT: movb %al, (%rdi)
+; SSE2-NEXT: pextrw $7, %xmm0, %ecx
+; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_30: ## %else41
-; SSE2-NEXT: shrl $8, %ecx
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: shrl $8, %eax
+; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je LBB12_32
; SSE2-NEXT: ## %bb.31: ## %cond.store43
+; SSE2-NEXT: pextrw $7, %xmm0, %eax
; SSE2-NEXT: movb %ah, (%rdi)
; SSE2-NEXT: LBB12_32: ## %else44
; SSE2-NEXT: retq
OpenPOWER on IntegriCloud