diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/masked_compressstore.ll')
| -rw-r--r-- | llvm/test/CodeGen/X86/masked_compressstore.ll | 1013 |
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 |

