summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/masked_store_trunc.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/masked_store_trunc.ll')
-rw-r--r--llvm/test/CodeGen/X86/masked_store_trunc.ll531
1 files changed, 215 insertions, 316 deletions
diff --git a/llvm/test/CodeGen/X86/masked_store_trunc.ll b/llvm/test/CodeGen/X86/masked_store_trunc.ll
index b9a3dc2b298..5b3dc6a2e75 100644
--- a/llvm/test/CodeGen/X86/masked_store_trunc.ll
+++ b/llvm/test/CodeGen/X86/masked_store_trunc.ll
@@ -663,18 +663,17 @@ define void @truncstore_v8i64_v8i8(<8 x i64> %x, <8 x i8>* %p, <8 x i32> %mask)
; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
; SSE2-NEXT: movd %xmm7, %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB2_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB2_2: # %else
; SSE2-NEXT: psrlq $16, %xmm6
-; SSE2-NEXT: movd %xmm6, %eax
-; SSE2-NEXT: shrl $16, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm6, %ecx
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB2_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $16, %eax
; SSE2-NEXT: movb %al, 1(%rdi)
; SSE2-NEXT: .LBB2_4: # %else2
@@ -2298,10 +2297,10 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
; AVX1-NEXT: vpextrb $8, %xmm4, %eax
; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: je .LBB9_18
; AVX1-NEXT: # %bb.17: # %cond.store15
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
-; AVX1-NEXT: vpextrw $0, %xmm4, 16(%rdi)
+; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
; AVX1-NEXT: .LBB9_18: # %else16
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm3, %xmm1
; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
@@ -2311,8 +2310,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_20
; AVX1-NEXT: # %bb.19: # %cond.store17
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
-; AVX1-NEXT: vpextrw $1, %xmm1, 18(%rdi)
+; AVX1-NEXT: vpextrw $1, %xmm0, 18(%rdi)
; AVX1-NEXT: .LBB9_20: # %else18
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm3, %xmm4
@@ -2324,8 +2322,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_22
; AVX1-NEXT: # %bb.21: # %cond.store19
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
-; AVX1-NEXT: vpextrw $2, %xmm4, 20(%rdi)
+; AVX1-NEXT: vpextrw $2, %xmm0, 20(%rdi)
; AVX1-NEXT: .LBB9_22: # %else20
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm3, %xmm1
; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
@@ -2335,8 +2332,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_24
; AVX1-NEXT: # %bb.23: # %cond.store21
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
-; AVX1-NEXT: vpextrw $3, %xmm1, 22(%rdi)
+; AVX1-NEXT: vpextrw $3, %xmm0, 22(%rdi)
; AVX1-NEXT: .LBB9_24: # %else22
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm1
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
@@ -2349,8 +2345,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_26
; AVX1-NEXT: # %bb.25: # %cond.store23
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrw $4, %xmm3, 24(%rdi)
+; AVX1-NEXT: vpextrw $4, %xmm0, 24(%rdi)
; AVX1-NEXT: .LBB9_26: # %else24
; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm2
; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
@@ -2358,8 +2353,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_28
; AVX1-NEXT: # %bb.27: # %cond.store25
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrw $5, %xmm2, 26(%rdi)
+; AVX1-NEXT: vpextrw $5, %xmm0, 26(%rdi)
; AVX1-NEXT: .LBB9_28: # %else26
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
@@ -2371,8 +2365,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_30
; AVX1-NEXT: # %bb.29: # %cond.store27
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrw $6, %xmm2, 28(%rdi)
+; AVX1-NEXT: vpextrw $6, %xmm0, 28(%rdi)
; AVX1-NEXT: .LBB9_30: # %else28
; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
@@ -2380,7 +2373,6 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB9_32
; AVX1-NEXT: # %bb.31: # %cond.store29
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: vpextrw $7, %xmm0, 30(%rdi)
; AVX1-NEXT: .LBB9_32: # %else30
; AVX1-NEXT: vzeroupper
@@ -2486,10 +2478,10 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
; AVX2-NEXT: vpextrb $8, %xmm4, %eax
; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: je .LBB9_18
; AVX2-NEXT: # %bb.17: # %cond.store15
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4
-; AVX2-NEXT: vpextrw $0, %xmm4, 16(%rdi)
+; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
; AVX2-NEXT: .LBB9_18: # %else16
; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX2-NEXT: vpackssdw %xmm0, %xmm1, %xmm1
@@ -2498,8 +2490,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_20
; AVX2-NEXT: # %bb.19: # %cond.store17
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrw $1, %xmm1, 18(%rdi)
+; AVX2-NEXT: vpextrw $1, %xmm0, 18(%rdi)
; AVX2-NEXT: .LBB9_20: # %else18
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm3, %ymm1
@@ -2511,8 +2502,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_22
; AVX2-NEXT: # %bb.21: # %cond.store19
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4
-; AVX2-NEXT: vpextrw $2, %xmm4, 20(%rdi)
+; AVX2-NEXT: vpextrw $2, %xmm0, 20(%rdi)
; AVX2-NEXT: .LBB9_22: # %else20
; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
; AVX2-NEXT: vpackssdw %xmm0, %xmm1, %xmm1
@@ -2521,8 +2511,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_24
; AVX2-NEXT: # %bb.23: # %cond.store21
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrw $3, %xmm1, 22(%rdi)
+; AVX2-NEXT: vpextrw $3, %xmm0, 22(%rdi)
; AVX2-NEXT: .LBB9_24: # %else22
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm3, %ymm1
@@ -2535,8 +2524,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_26
; AVX2-NEXT: # %bb.25: # %cond.store23
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
-; AVX2-NEXT: vpextrw $4, %xmm2, 24(%rdi)
+; AVX2-NEXT: vpextrw $4, %xmm0, 24(%rdi)
; AVX2-NEXT: .LBB9_26: # %else24
; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
@@ -2544,8 +2532,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_28
; AVX2-NEXT: # %bb.27: # %cond.store25
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrw $5, %xmm1, 26(%rdi)
+; AVX2-NEXT: vpextrw $5, %xmm0, 26(%rdi)
; AVX2-NEXT: .LBB9_28: # %else26
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm3, %ymm1
@@ -2558,8 +2545,7 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_30
; AVX2-NEXT: # %bb.29: # %cond.store27
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
-; AVX2-NEXT: vpextrw $6, %xmm2, 28(%rdi)
+; AVX2-NEXT: vpextrw $6, %xmm0, 28(%rdi)
; AVX2-NEXT: .LBB9_30: # %else28
; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
@@ -2567,7 +2553,6 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB9_32
; AVX2-NEXT: # %bb.31: # %cond.store29
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: vpextrw $7, %xmm0, 30(%rdi)
; AVX2-NEXT: .LBB9_32: # %else30
; AVX2-NEXT: vzeroupper
@@ -2635,65 +2620,58 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32>
; AVX512F-NEXT: kshiftrw $8, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
+; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: je .LBB9_18
; AVX512F-NEXT: # %bb.17: # %cond.store15
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $0, %xmm1, 16(%rdi)
+; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
; AVX512F-NEXT: .LBB9_18: # %else16
; AVX512F-NEXT: kshiftrw $9, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_20
; AVX512F-NEXT: # %bb.19: # %cond.store17
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $1, %xmm1, 18(%rdi)
+; AVX512F-NEXT: vpextrw $1, %xmm0, 18(%rdi)
; AVX512F-NEXT: .LBB9_20: # %else18
; AVX512F-NEXT: kshiftrw $10, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_22
; AVX512F-NEXT: # %bb.21: # %cond.store19
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $2, %xmm1, 20(%rdi)
+; AVX512F-NEXT: vpextrw $2, %xmm0, 20(%rdi)
; AVX512F-NEXT: .LBB9_22: # %else20
; AVX512F-NEXT: kshiftrw $11, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_24
; AVX512F-NEXT: # %bb.23: # %cond.store21
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $3, %xmm1, 22(%rdi)
+; AVX512F-NEXT: vpextrw $3, %xmm0, 22(%rdi)
; AVX512F-NEXT: .LBB9_24: # %else22
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_26
; AVX512F-NEXT: # %bb.25: # %cond.store23
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $4, %xmm1, 24(%rdi)
+; AVX512F-NEXT: vpextrw $4, %xmm0, 24(%rdi)
; AVX512F-NEXT: .LBB9_26: # %else24
; AVX512F-NEXT: kshiftrw $13, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_28
; AVX512F-NEXT: # %bb.27: # %cond.store25
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $5, %xmm1, 26(%rdi)
+; AVX512F-NEXT: vpextrw $5, %xmm0, 26(%rdi)
; AVX512F-NEXT: .LBB9_28: # %else26
; AVX512F-NEXT: kshiftrw $14, %k0, %k1
; AVX512F-NEXT: kmovw %k1, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_30
; AVX512F-NEXT: # %bb.29: # %cond.store27
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrw $6, %xmm1, 28(%rdi)
+; AVX512F-NEXT: vpextrw $6, %xmm0, 28(%rdi)
; AVX512F-NEXT: .LBB9_30: # %else28
; AVX512F-NEXT: kshiftrw $15, %k0, %k0
; AVX512F-NEXT: kmovw %k0, %eax
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB9_32
; AVX512F-NEXT: # %bb.31: # %cond.store29
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vpextrw $7, %xmm0, 30(%rdi)
; AVX512F-NEXT: .LBB9_32: # %else30
; AVX512F-NEXT: vzeroupper
@@ -2734,38 +2712,36 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: movd %xmm8, %eax
; SSE2-NEXT: notl %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB10_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB10_2: # %else
; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
; SSE2-NEXT: pxor %xmm1, %xmm8
-; SSE2-NEXT: pextrw $2, %xmm8, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $2, %xmm8, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %ah, 1(%rdi)
; SSE2-NEXT: .LBB10_4: # %else2
; SSE2-NEXT: pxor %xmm2, %xmm2
; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
; SSE2-NEXT: pxor %xmm4, %xmm1
-; SSE2-NEXT: pextrw $4, %xmm1, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $4, %xmm1, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_6
; SSE2-NEXT: # %bb.5: # %cond.store3
-; SSE2-NEXT: movd %xmm0, %eax
-; SSE2-NEXT: shrl $16, %eax
-; SSE2-NEXT: movb %al, 2(%rdi)
+; SSE2-NEXT: movl %eax, %ecx
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: movb %cl, 2(%rdi)
; SSE2-NEXT: .LBB10_6: # %else4
; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
; SSE2-NEXT: pxor %xmm1, %xmm4
-; SSE2-NEXT: pextrw $6, %xmm4, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $6, %xmm4, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_8
; SSE2-NEXT: # %bb.7: # %cond.store5
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $24, %eax
; SSE2-NEXT: movb %al, 3(%rdi)
; SSE2-NEXT: .LBB10_8: # %else6
@@ -2774,18 +2750,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: movd %xmm1, %eax
; SSE2-NEXT: notl %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $2, %xmm0, %eax
; SSE2-NEXT: je .LBB10_10
; SSE2-NEXT: # %bb.9: # %cond.store7
-; SSE2-NEXT: pextrw $2, %xmm0, %eax
; SSE2-NEXT: movb %al, 4(%rdi)
; SSE2-NEXT: .LBB10_10: # %else8
; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
; SSE2-NEXT: pxor %xmm2, %xmm1
-; SSE2-NEXT: pextrw $2, %xmm1, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $2, %xmm1, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_12
; SSE2-NEXT: # %bb.11: # %cond.store9
-; SSE2-NEXT: pextrw $2, %xmm0, %eax
; SSE2-NEXT: movb %ah, 5(%rdi)
; SSE2-NEXT: .LBB10_12: # %else10
; SSE2-NEXT: pxor %xmm1, %xmm1
@@ -2793,18 +2768,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: pxor %xmm5, %xmm2
; SSE2-NEXT: pextrw $4, %xmm2, %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $3, %xmm0, %eax
; SSE2-NEXT: je .LBB10_14
; SSE2-NEXT: # %bb.13: # %cond.store11
-; SSE2-NEXT: pextrw $3, %xmm0, %eax
; SSE2-NEXT: movb %al, 6(%rdi)
; SSE2-NEXT: .LBB10_14: # %else12
; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: pextrw $6, %xmm5, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $6, %xmm5, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_16
; SSE2-NEXT: # %bb.15: # %cond.store13
-; SSE2-NEXT: pextrw $3, %xmm0, %eax
; SSE2-NEXT: movb %ah, 7(%rdi)
; SSE2-NEXT: .LBB10_16: # %else14
; SSE2-NEXT: pxor %xmm1, %xmm1
@@ -2812,18 +2786,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: movd %xmm1, %eax
; SSE2-NEXT: notl %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $4, %xmm0, %eax
; SSE2-NEXT: je .LBB10_18
; SSE2-NEXT: # %bb.17: # %cond.store15
-; SSE2-NEXT: pextrw $4, %xmm0, %eax
; SSE2-NEXT: movb %al, 8(%rdi)
; SSE2-NEXT: .LBB10_18: # %else16
; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
; SSE2-NEXT: pxor %xmm2, %xmm1
-; SSE2-NEXT: pextrw $2, %xmm1, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $2, %xmm1, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_20
; SSE2-NEXT: # %bb.19: # %cond.store17
-; SSE2-NEXT: pextrw $4, %xmm0, %eax
; SSE2-NEXT: movb %ah, 9(%rdi)
; SSE2-NEXT: .LBB10_20: # %else18
; SSE2-NEXT: pxor %xmm1, %xmm1
@@ -2831,18 +2804,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: pxor %xmm6, %xmm2
; SSE2-NEXT: pextrw $4, %xmm2, %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $5, %xmm0, %eax
; SSE2-NEXT: je .LBB10_22
; SSE2-NEXT: # %bb.21: # %cond.store19
-; SSE2-NEXT: pextrw $5, %xmm0, %eax
; SSE2-NEXT: movb %al, 10(%rdi)
; SSE2-NEXT: .LBB10_22: # %else20
; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: pextrw $6, %xmm6, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $6, %xmm6, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_24
; SSE2-NEXT: # %bb.23: # %cond.store21
-; SSE2-NEXT: pextrw $5, %xmm0, %eax
; SSE2-NEXT: movb %ah, 11(%rdi)
; SSE2-NEXT: .LBB10_24: # %else22
; SSE2-NEXT: pxor %xmm1, %xmm1
@@ -2850,18 +2822,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: movd %xmm1, %eax
; SSE2-NEXT: notl %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $6, %xmm0, %eax
; SSE2-NEXT: je .LBB10_26
; SSE2-NEXT: # %bb.25: # %cond.store23
-; SSE2-NEXT: pextrw $6, %xmm0, %eax
; SSE2-NEXT: movb %al, 12(%rdi)
; SSE2-NEXT: .LBB10_26: # %else24
; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
; SSE2-NEXT: pxor %xmm2, %xmm1
-; SSE2-NEXT: pextrw $2, %xmm1, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $2, %xmm1, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_28
; SSE2-NEXT: # %bb.27: # %cond.store25
-; SSE2-NEXT: pextrw $6, %xmm0, %eax
; SSE2-NEXT: movb %ah, 13(%rdi)
; SSE2-NEXT: .LBB10_28: # %else26
; SSE2-NEXT: pxor %xmm1, %xmm1
@@ -2869,18 +2840,17 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %m
; SSE2-NEXT: pxor %xmm7, %xmm2
; SSE2-NEXT: pextrw $4, %xmm2, %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pextrw $7, %xmm0, %eax
; SSE2-NEXT: je .LBB10_30
; SSE2-NEXT: # %bb.29: # %cond.store27
-; SSE2-NEXT: pextrw $7, %xmm0, %eax
; SSE2-NEXT: movb %al, 14(%rdi)
; SSE2-NEXT: .LBB10_30: # %else28
-; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: pextrw $6, %xmm7, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
+; SSE2-NEXT: pxor %xmm0, %xmm7
+; SSE2-NEXT: pextrw $6, %xmm7, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB10_32
; SSE2-NEXT: # %bb.31: # %cond.store29
-; SSE2-NEXT: pextrw $7, %xmm0, %eax
; SSE2-NEXT: movb %ah, 15(%rdi)
; SSE2-NEXT: .LBB10_32: # %else30
; SSE2-NEXT: retq
@@ -3950,18 +3920,17 @@ define void @truncstore_v8i32_v8i8(<8 x i32> %x, <8 x i8>* %p, <8 x i32> %mask)
; SSE2-NEXT: packssdw %xmm1, %xmm0
; SSE2-NEXT: movd %xmm5, %eax
; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB12_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB12_2: # %else
; SSE2-NEXT: psrlq $16, %xmm4
-; SSE2-NEXT: movd %xmm4, %eax
-; SSE2-NEXT: shrl $16, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm4, %ecx
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB12_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $16, %eax
; SSE2-NEXT: movb %al, 1(%rdi)
; SSE2-NEXT: .LBB12_4: # %else2
@@ -4700,42 +4669,40 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: pand %xmm6, %xmm1
; SSE2-NEXT: pand %xmm6, %xmm0
; SSE2-NEXT: packuswb %xmm1, %xmm0
-; SSE2-NEXT: movd %xmm7, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm7, %ecx
+; SSE2-NEXT: movl %ecx, %eax
+; SSE2-NEXT: notb %al
+; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB15_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %ecx
-; SSE2-NEXT: movb %cl, (%rdi)
+; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB15_2: # %else
-; SSE2-NEXT: shrl $8, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $8, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB15_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %ah, 1(%rdi)
; SSE2-NEXT: .LBB15_4: # %else2
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
-; SSE2-NEXT: movd %xmm1, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm1, %ecx
+; SSE2-NEXT: movl %ecx, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: notb %dl
+; SSE2-NEXT: testb $1, %dl
; SSE2-NEXT: je .LBB15_6
; SSE2-NEXT: # %bb.5: # %cond.store3
-; SSE2-NEXT: movd %xmm0, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: movb %cl, 2(%rdi)
+; SSE2-NEXT: movl %eax, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: movb %dl, 2(%rdi)
; SSE2-NEXT: .LBB15_6: # %else4
-; SSE2-NEXT: shrl $24, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $24, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB15_8
; SSE2-NEXT: # %bb.7: # %cond.store5
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $24, %eax
; SSE2-NEXT: movb %al, 3(%rdi)
; SSE2-NEXT: .LBB15_8: # %else6
@@ -4745,9 +4712,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $2, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_10
; SSE2-NEXT: # %bb.9: # %cond.store7
-; SSE2-NEXT: pextrw $2, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 4(%rdi)
; SSE2-NEXT: .LBB15_10: # %else8
; SSE2-NEXT: shrl $8, %eax
@@ -4755,8 +4722,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_12
; SSE2-NEXT: # %bb.11: # %cond.store9
-; SSE2-NEXT: pextrw $2, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 5(%rdi)
+; SSE2-NEXT: movb %ch, 5(%rdi)
; SSE2-NEXT: .LBB15_12: # %else10
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
@@ -4764,9 +4730,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $3, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_14
; SSE2-NEXT: # %bb.13: # %cond.store11
-; SSE2-NEXT: pextrw $3, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB15_14: # %else12
; SSE2-NEXT: shrl $8, %eax
@@ -4774,8 +4740,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_16
; SSE2-NEXT: # %bb.15: # %cond.store13
-; SSE2-NEXT: pextrw $3, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 7(%rdi)
+; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB15_16: # %else14
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
@@ -4783,9 +4748,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $4, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_18
; SSE2-NEXT: # %bb.17: # %cond.store15
-; SSE2-NEXT: pextrw $4, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 8(%rdi)
; SSE2-NEXT: .LBB15_18: # %else16
; SSE2-NEXT: shrl $8, %eax
@@ -4793,8 +4758,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_20
; SSE2-NEXT: # %bb.19: # %cond.store17
-; SSE2-NEXT: pextrw $4, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 9(%rdi)
+; SSE2-NEXT: movb %ch, 9(%rdi)
; SSE2-NEXT: .LBB15_20: # %else18
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
@@ -4802,9 +4766,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $5, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_22
; SSE2-NEXT: # %bb.21: # %cond.store19
-; SSE2-NEXT: pextrw $5, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 10(%rdi)
; SSE2-NEXT: .LBB15_22: # %else20
; SSE2-NEXT: shrl $8, %eax
@@ -4812,8 +4776,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_24
; SSE2-NEXT: # %bb.23: # %cond.store21
-; SSE2-NEXT: pextrw $5, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 11(%rdi)
+; SSE2-NEXT: movb %ch, 11(%rdi)
; SSE2-NEXT: .LBB15_24: # %else22
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
@@ -4821,9 +4784,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $6, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_26
; SSE2-NEXT: # %bb.25: # %cond.store23
-; SSE2-NEXT: pextrw $6, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 12(%rdi)
; SSE2-NEXT: .LBB15_26: # %else24
; SSE2-NEXT: shrl $8, %eax
@@ -4831,69 +4794,65 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_28
; SSE2-NEXT: # %bb.27: # %cond.store25
-; SSE2-NEXT: pextrw $6, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 13(%rdi)
+; SSE2-NEXT: movb %ch, 13(%rdi)
; SSE2-NEXT: .LBB15_28: # %else26
+; SSE2-NEXT: pand %xmm6, %xmm3
+; SSE2-NEXT: pand %xmm6, %xmm2
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm1, %xmm4
; SSE2-NEXT: pextrw $7, %xmm4, %eax
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: je .LBB15_30
; SSE2-NEXT: # %bb.29: # %cond.store27
-; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: .LBB15_30: # %else28
-; SSE2-NEXT: pand %xmm6, %xmm3
-; SSE2-NEXT: pand %xmm6, %xmm2
+; SSE2-NEXT: packuswb %xmm3, %xmm2
; SSE2-NEXT: shrl $8, %eax
; SSE2-NEXT: notb %al
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_32
; SSE2-NEXT: # %bb.31: # %cond.store29
-; SSE2-NEXT: pextrw $7, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 15(%rdi)
+; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: .LBB15_32: # %else30
-; SSE2-NEXT: packuswb %xmm3, %xmm2
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
-; SSE2-NEXT: movd %xmm0, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm0, %ecx
+; SSE2-NEXT: movl %ecx, %eax
+; SSE2-NEXT: notb %al
+; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm2, %eax
; SSE2-NEXT: je .LBB15_34
; SSE2-NEXT: # %bb.33: # %cond.store31
-; SSE2-NEXT: movd %xmm2, %ecx
-; SSE2-NEXT: movb %cl, 16(%rdi)
+; SSE2-NEXT: movb %al, 16(%rdi)
; SSE2-NEXT: .LBB15_34: # %else32
-; SSE2-NEXT: shrl $8, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $8, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB15_36
; SSE2-NEXT: # %bb.35: # %cond.store33
-; SSE2-NEXT: movd %xmm2, %eax
; SSE2-NEXT: movb %ah, 17(%rdi)
; SSE2-NEXT: .LBB15_36: # %else34
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
-; SSE2-NEXT: movd %xmm0, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm0, %ecx
+; SSE2-NEXT: movl %ecx, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: notb %dl
+; SSE2-NEXT: testb $1, %dl
; SSE2-NEXT: je .LBB15_38
; SSE2-NEXT: # %bb.37: # %cond.store35
-; SSE2-NEXT: movd %xmm2, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: movb %cl, 18(%rdi)
+; SSE2-NEXT: movl %eax, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: movb %dl, 18(%rdi)
; SSE2-NEXT: .LBB15_38: # %else36
-; SSE2-NEXT: shrl $24, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $24, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB15_40
; SSE2-NEXT: # %bb.39: # %cond.store37
-; SSE2-NEXT: movd %xmm2, %eax
; SSE2-NEXT: shrl $24, %eax
; SSE2-NEXT: movb %al, 19(%rdi)
; SSE2-NEXT: .LBB15_40: # %else38
@@ -4903,9 +4862,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $2, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_42
; SSE2-NEXT: # %bb.41: # %cond.store39
-; SSE2-NEXT: pextrw $2, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 20(%rdi)
; SSE2-NEXT: .LBB15_42: # %else40
; SSE2-NEXT: shrl $8, %eax
@@ -4913,8 +4872,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_44
; SSE2-NEXT: # %bb.43: # %cond.store41
-; SSE2-NEXT: pextrw $2, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 21(%rdi)
+; SSE2-NEXT: movb %ch, 21(%rdi)
; SSE2-NEXT: .LBB15_44: # %else42
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
@@ -4922,9 +4880,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $3, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_46
; SSE2-NEXT: # %bb.45: # %cond.store43
-; SSE2-NEXT: pextrw $3, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 22(%rdi)
; SSE2-NEXT: .LBB15_46: # %else44
; SSE2-NEXT: shrl $8, %eax
@@ -4932,8 +4890,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_48
; SSE2-NEXT: # %bb.47: # %cond.store45
-; SSE2-NEXT: pextrw $3, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 23(%rdi)
+; SSE2-NEXT: movb %ch, 23(%rdi)
; SSE2-NEXT: .LBB15_48: # %else46
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
@@ -4941,9 +4898,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $4, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_50
; SSE2-NEXT: # %bb.49: # %cond.store47
-; SSE2-NEXT: pextrw $4, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 24(%rdi)
; SSE2-NEXT: .LBB15_50: # %else48
; SSE2-NEXT: shrl $8, %eax
@@ -4951,8 +4908,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_52
; SSE2-NEXT: # %bb.51: # %cond.store49
-; SSE2-NEXT: pextrw $4, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 25(%rdi)
+; SSE2-NEXT: movb %ch, 25(%rdi)
; SSE2-NEXT: .LBB15_52: # %else50
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
@@ -4960,9 +4916,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $5, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_54
; SSE2-NEXT: # %bb.53: # %cond.store51
-; SSE2-NEXT: pextrw $5, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 26(%rdi)
; SSE2-NEXT: .LBB15_54: # %else52
; SSE2-NEXT: shrl $8, %eax
@@ -4970,8 +4926,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_56
; SSE2-NEXT: # %bb.55: # %cond.store53
-; SSE2-NEXT: pextrw $5, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 27(%rdi)
+; SSE2-NEXT: movb %ch, 27(%rdi)
; SSE2-NEXT: .LBB15_56: # %else54
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm5, %xmm0
@@ -4979,9 +4934,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $6, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_58
; SSE2-NEXT: # %bb.57: # %cond.store55
-; SSE2-NEXT: pextrw $6, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 28(%rdi)
; SSE2-NEXT: .LBB15_58: # %else56
; SSE2-NEXT: shrl $8, %eax
@@ -4989,8 +4944,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_60
; SSE2-NEXT: # %bb.59: # %cond.store57
-; SSE2-NEXT: pextrw $6, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 29(%rdi)
+; SSE2-NEXT: movb %ch, 29(%rdi)
; SSE2-NEXT: .LBB15_60: # %else58
; SSE2-NEXT: pxor %xmm0, %xmm0
; SSE2-NEXT: pcmpeqb %xmm0, %xmm5
@@ -4998,9 +4952,9 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $7, %xmm2, %ecx
; SSE2-NEXT: je .LBB15_62
; SSE2-NEXT: # %bb.61: # %cond.store59
-; SSE2-NEXT: pextrw $7, %xmm2, %ecx
; SSE2-NEXT: movb %cl, 30(%rdi)
; SSE2-NEXT: .LBB15_62: # %else60
; SSE2-NEXT: shrl $8, %eax
@@ -5008,8 +4962,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB15_64
; SSE2-NEXT: # %bb.63: # %cond.store61
-; SSE2-NEXT: pextrw $7, %xmm2, %eax
-; SSE2-NEXT: movb %ah, 31(%rdi)
+; SSE2-NEXT: movb %ch, 31(%rdi)
; SSE2-NEXT: .LBB15_64: # %else62
; SSE2-NEXT: retq
;
@@ -5441,17 +5394,16 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
; AVX1-NEXT: vpextrb $0, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: je .LBB15_34
; AVX1-NEXT: # %bb.33: # %cond.store31
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $0, %xmm3, 16(%rdi)
+; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
; AVX1-NEXT: .LBB15_34: # %else32
; AVX1-NEXT: vpextrb $1, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_36
; AVX1-NEXT: # %bb.35: # %cond.store33
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $1, %xmm2, 17(%rdi)
+; AVX1-NEXT: vpextrb $1, %xmm0, 17(%rdi)
; AVX1-NEXT: .LBB15_36: # %else34
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5461,15 +5413,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_38
; AVX1-NEXT: # %bb.37: # %cond.store35
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $2, %xmm3, 18(%rdi)
+; AVX1-NEXT: vpextrb $2, %xmm0, 18(%rdi)
; AVX1-NEXT: .LBB15_38: # %else36
; AVX1-NEXT: vpextrb $3, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_40
; AVX1-NEXT: # %bb.39: # %cond.store37
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $3, %xmm2, 19(%rdi)
+; AVX1-NEXT: vpextrb $3, %xmm0, 19(%rdi)
; AVX1-NEXT: .LBB15_40: # %else38
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5479,15 +5429,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_42
; AVX1-NEXT: # %bb.41: # %cond.store39
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $4, %xmm3, 20(%rdi)
+; AVX1-NEXT: vpextrb $4, %xmm0, 20(%rdi)
; AVX1-NEXT: .LBB15_42: # %else40
; AVX1-NEXT: vpextrb $5, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_44
; AVX1-NEXT: # %bb.43: # %cond.store41
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $5, %xmm2, 21(%rdi)
+; AVX1-NEXT: vpextrb $5, %xmm0, 21(%rdi)
; AVX1-NEXT: .LBB15_44: # %else42
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5497,15 +5445,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_46
; AVX1-NEXT: # %bb.45: # %cond.store43
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $6, %xmm3, 22(%rdi)
+; AVX1-NEXT: vpextrb $6, %xmm0, 22(%rdi)
; AVX1-NEXT: .LBB15_46: # %else44
; AVX1-NEXT: vpextrb $7, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_48
; AVX1-NEXT: # %bb.47: # %cond.store45
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $7, %xmm2, 23(%rdi)
+; AVX1-NEXT: vpextrb $7, %xmm0, 23(%rdi)
; AVX1-NEXT: .LBB15_48: # %else46
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5515,15 +5461,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_50
; AVX1-NEXT: # %bb.49: # %cond.store47
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $8, %xmm3, 24(%rdi)
+; AVX1-NEXT: vpextrb $8, %xmm0, 24(%rdi)
; AVX1-NEXT: .LBB15_50: # %else48
; AVX1-NEXT: vpextrb $9, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_52
; AVX1-NEXT: # %bb.51: # %cond.store49
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $9, %xmm2, 25(%rdi)
+; AVX1-NEXT: vpextrb $9, %xmm0, 25(%rdi)
; AVX1-NEXT: .LBB15_52: # %else50
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5533,15 +5477,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_54
; AVX1-NEXT: # %bb.53: # %cond.store51
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $10, %xmm3, 26(%rdi)
+; AVX1-NEXT: vpextrb $10, %xmm0, 26(%rdi)
; AVX1-NEXT: .LBB15_54: # %else52
; AVX1-NEXT: vpextrb $11, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_56
; AVX1-NEXT: # %bb.55: # %cond.store53
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $11, %xmm2, 27(%rdi)
+; AVX1-NEXT: vpextrb $11, %xmm0, 27(%rdi)
; AVX1-NEXT: .LBB15_56: # %else54
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm2
@@ -5551,15 +5493,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_58
; AVX1-NEXT: # %bb.57: # %cond.store55
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
-; AVX1-NEXT: vpextrb $12, %xmm3, 28(%rdi)
+; AVX1-NEXT: vpextrb $12, %xmm0, 28(%rdi)
; AVX1-NEXT: .LBB15_58: # %else56
; AVX1-NEXT: vpextrb $13, %xmm2, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_60
; AVX1-NEXT: # %bb.59: # %cond.store57
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $13, %xmm2, 29(%rdi)
+; AVX1-NEXT: vpextrb $13, %xmm0, 29(%rdi)
; AVX1-NEXT: .LBB15_60: # %else58
; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1
@@ -5569,14 +5509,12 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_62
; AVX1-NEXT: # %bb.61: # %cond.store59
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
-; AVX1-NEXT: vpextrb $14, %xmm2, 30(%rdi)
+; AVX1-NEXT: vpextrb $14, %xmm0, 30(%rdi)
; AVX1-NEXT: .LBB15_62: # %else60
; AVX1-NEXT: vpextrb $15, %xmm1, %eax
; AVX1-NEXT: testb $1, %al
; AVX1-NEXT: je .LBB15_64
; AVX1-NEXT: # %bb.63: # %cond.store61
-; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX1-NEXT: vpextrb $15, %xmm0, 31(%rdi)
; AVX1-NEXT: .LBB15_64: # %else62
; AVX1-NEXT: vzeroupper
@@ -5725,18 +5663,17 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: vpextrb $0, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: je .LBB15_34
; AVX2-NEXT: # %bb.33: # %cond.store31
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $0, %xmm3, 16(%rdi)
+; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
; AVX2-NEXT: .LBB15_34: # %else32
; AVX2-NEXT: vpextrb $1, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_36
; AVX2-NEXT: # %bb.35: # %cond.store33
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $1, %xmm1, 17(%rdi)
+; AVX2-NEXT: vpextrb $1, %xmm0, 17(%rdi)
; AVX2-NEXT: .LBB15_36: # %else34
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5746,16 +5683,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_38
; AVX2-NEXT: # %bb.37: # %cond.store35
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $2, %xmm3, 18(%rdi)
+; AVX2-NEXT: vpextrb $2, %xmm0, 18(%rdi)
; AVX2-NEXT: .LBB15_38: # %else36
; AVX2-NEXT: vpextrb $3, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_40
; AVX2-NEXT: # %bb.39: # %cond.store37
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $3, %xmm1, 19(%rdi)
+; AVX2-NEXT: vpextrb $3, %xmm0, 19(%rdi)
; AVX2-NEXT: .LBB15_40: # %else38
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5765,16 +5700,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_42
; AVX2-NEXT: # %bb.41: # %cond.store39
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $4, %xmm3, 20(%rdi)
+; AVX2-NEXT: vpextrb $4, %xmm0, 20(%rdi)
; AVX2-NEXT: .LBB15_42: # %else40
; AVX2-NEXT: vpextrb $5, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_44
; AVX2-NEXT: # %bb.43: # %cond.store41
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $5, %xmm1, 21(%rdi)
+; AVX2-NEXT: vpextrb $5, %xmm0, 21(%rdi)
; AVX2-NEXT: .LBB15_44: # %else42
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5784,16 +5717,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_46
; AVX2-NEXT: # %bb.45: # %cond.store43
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $6, %xmm3, 22(%rdi)
+; AVX2-NEXT: vpextrb $6, %xmm0, 22(%rdi)
; AVX2-NEXT: .LBB15_46: # %else44
; AVX2-NEXT: vpextrb $7, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_48
; AVX2-NEXT: # %bb.47: # %cond.store45
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $7, %xmm1, 23(%rdi)
+; AVX2-NEXT: vpextrb $7, %xmm0, 23(%rdi)
; AVX2-NEXT: .LBB15_48: # %else46
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5803,16 +5734,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_50
; AVX2-NEXT: # %bb.49: # %cond.store47
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $8, %xmm3, 24(%rdi)
+; AVX2-NEXT: vpextrb $8, %xmm0, 24(%rdi)
; AVX2-NEXT: .LBB15_50: # %else48
; AVX2-NEXT: vpextrb $9, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_52
; AVX2-NEXT: # %bb.51: # %cond.store49
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $9, %xmm1, 25(%rdi)
+; AVX2-NEXT: vpextrb $9, %xmm0, 25(%rdi)
; AVX2-NEXT: .LBB15_52: # %else50
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5822,16 +5751,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_54
; AVX2-NEXT: # %bb.53: # %cond.store51
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $10, %xmm3, 26(%rdi)
+; AVX2-NEXT: vpextrb $10, %xmm0, 26(%rdi)
; AVX2-NEXT: .LBB15_54: # %else52
; AVX2-NEXT: vpextrb $11, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_56
; AVX2-NEXT: # %bb.55: # %cond.store53
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $11, %xmm1, 27(%rdi)
+; AVX2-NEXT: vpextrb $11, %xmm0, 27(%rdi)
; AVX2-NEXT: .LBB15_56: # %else54
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5841,16 +5768,14 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_58
; AVX2-NEXT: # %bb.57: # %cond.store55
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX2-NEXT: vpextrb $12, %xmm3, 28(%rdi)
+; AVX2-NEXT: vpextrb $12, %xmm0, 28(%rdi)
; AVX2-NEXT: .LBB15_58: # %else56
; AVX2-NEXT: vpextrb $13, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_60
; AVX2-NEXT: # %bb.59: # %cond.store57
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpextrb $13, %xmm1, 29(%rdi)
+; AVX2-NEXT: vpextrb $13, %xmm0, 29(%rdi)
; AVX2-NEXT: .LBB15_60: # %else58
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -5860,15 +5785,13 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_62
; AVX2-NEXT: # %bb.61: # %cond.store59
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
-; AVX2-NEXT: vpextrb $14, %xmm2, 30(%rdi)
+; AVX2-NEXT: vpextrb $14, %xmm0, 30(%rdi)
; AVX2-NEXT: .LBB15_62: # %else60
; AVX2-NEXT: vpextrb $15, %xmm1, %eax
; AVX2-NEXT: notb %al
; AVX2-NEXT: testb $1, %al
; AVX2-NEXT: je .LBB15_64
; AVX2-NEXT: # %bb.63: # %cond.store61
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX2-NEXT: vpextrb $15, %xmm0, 31(%rdi)
; AVX2-NEXT: .LBB15_64: # %else62
; AVX2-NEXT: vzeroupper
@@ -6073,10 +5996,10 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: vptestmd %zmm3, %zmm3, %k0
; AVX512F-NEXT: kmovw %k0, %eax
; AVX512F-NEXT: testb $1, %al
+; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: je .LBB15_34
; AVX512F-NEXT: # %bb.33: # %cond.store31
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $0, %xmm3, 16(%rdi)
+; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
; AVX512F-NEXT: .LBB15_34: # %else32
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6086,8 +6009,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_36
; AVX512F-NEXT: # %bb.35: # %cond.store33
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $1, %xmm1, 17(%rdi)
+; AVX512F-NEXT: vpextrb $1, %xmm0, 17(%rdi)
; AVX512F-NEXT: .LBB15_36: # %else34
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6101,8 +6023,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_38
; AVX512F-NEXT: # %bb.37: # %cond.store35
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $2, %xmm3, 18(%rdi)
+; AVX512F-NEXT: vpextrb $2, %xmm0, 18(%rdi)
; AVX512F-NEXT: .LBB15_38: # %else36
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6112,8 +6033,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_40
; AVX512F-NEXT: # %bb.39: # %cond.store37
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $3, %xmm1, 19(%rdi)
+; AVX512F-NEXT: vpextrb $3, %xmm0, 19(%rdi)
; AVX512F-NEXT: .LBB15_40: # %else38
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6127,8 +6047,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_42
; AVX512F-NEXT: # %bb.41: # %cond.store39
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $4, %xmm3, 20(%rdi)
+; AVX512F-NEXT: vpextrb $4, %xmm0, 20(%rdi)
; AVX512F-NEXT: .LBB15_42: # %else40
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6138,8 +6057,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_44
; AVX512F-NEXT: # %bb.43: # %cond.store41
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $5, %xmm1, 21(%rdi)
+; AVX512F-NEXT: vpextrb $5, %xmm0, 21(%rdi)
; AVX512F-NEXT: .LBB15_44: # %else42
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6153,8 +6071,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_46
; AVX512F-NEXT: # %bb.45: # %cond.store43
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $6, %xmm3, 22(%rdi)
+; AVX512F-NEXT: vpextrb $6, %xmm0, 22(%rdi)
; AVX512F-NEXT: .LBB15_46: # %else44
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6164,8 +6081,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_48
; AVX512F-NEXT: # %bb.47: # %cond.store45
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $7, %xmm1, 23(%rdi)
+; AVX512F-NEXT: vpextrb $7, %xmm0, 23(%rdi)
; AVX512F-NEXT: .LBB15_48: # %else46
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6179,8 +6095,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_50
; AVX512F-NEXT: # %bb.49: # %cond.store47
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $8, %xmm3, 24(%rdi)
+; AVX512F-NEXT: vpextrb $8, %xmm0, 24(%rdi)
; AVX512F-NEXT: .LBB15_50: # %else48
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6190,8 +6105,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_52
; AVX512F-NEXT: # %bb.51: # %cond.store49
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $9, %xmm1, 25(%rdi)
+; AVX512F-NEXT: vpextrb $9, %xmm0, 25(%rdi)
; AVX512F-NEXT: .LBB15_52: # %else50
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6205,8 +6119,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_54
; AVX512F-NEXT: # %bb.53: # %cond.store51
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $10, %xmm3, 26(%rdi)
+; AVX512F-NEXT: vpextrb $10, %xmm0, 26(%rdi)
; AVX512F-NEXT: .LBB15_54: # %else52
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6216,8 +6129,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_56
; AVX512F-NEXT: # %bb.55: # %cond.store53
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $11, %xmm1, 27(%rdi)
+; AVX512F-NEXT: vpextrb $11, %xmm0, 27(%rdi)
; AVX512F-NEXT: .LBB15_56: # %else54
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6231,8 +6143,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_58
; AVX512F-NEXT: # %bb.57: # %cond.store55
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
-; AVX512F-NEXT: vpextrb $12, %xmm3, 28(%rdi)
+; AVX512F-NEXT: vpextrb $12, %xmm0, 28(%rdi)
; AVX512F-NEXT: .LBB15_58: # %else56
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6242,8 +6153,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_60
; AVX512F-NEXT: # %bb.59: # %cond.store57
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX512F-NEXT: vpextrb $13, %xmm1, 29(%rdi)
+; AVX512F-NEXT: vpextrb $13, %xmm0, 29(%rdi)
; AVX512F-NEXT: .LBB15_60: # %else58
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
@@ -6257,8 +6167,7 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_62
; AVX512F-NEXT: # %bb.61: # %cond.store59
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm2
-; AVX512F-NEXT: vpextrb $14, %xmm2, 30(%rdi)
+; AVX512F-NEXT: vpextrb $14, %xmm0, 30(%rdi)
; AVX512F-NEXT: .LBB15_62: # %else60
; AVX512F-NEXT: vpternlogq $15, %zmm1, %zmm1, %zmm1
; AVX512F-NEXT: vpmovsxbd %xmm1, %zmm1
@@ -6268,7 +6177,6 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %ma
; AVX512F-NEXT: testb $1, %al
; AVX512F-NEXT: je .LBB15_64
; AVX512F-NEXT: # %bb.63: # %cond.store61
-; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vpextrb $15, %xmm0, 31(%rdi)
; AVX512F-NEXT: .LBB15_64: # %else62
; AVX512F-NEXT: vzeroupper
@@ -6303,42 +6211,40 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: pand %xmm4, %xmm1
; SSE2-NEXT: pand %xmm4, %xmm0
; SSE2-NEXT: packuswb %xmm1, %xmm0
-; SSE2-NEXT: movd %xmm3, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm3, %ecx
+; SSE2-NEXT: movl %ecx, %eax
+; SSE2-NEXT: notb %al
+; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB16_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %ecx
-; SSE2-NEXT: movb %cl, (%rdi)
+; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB16_2: # %else
-; SSE2-NEXT: shrl $8, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $8, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB16_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: movb %ah, 1(%rdi)
; SSE2-NEXT: .LBB16_4: # %else2
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
-; SSE2-NEXT: movd %xmm1, %eax
-; SSE2-NEXT: movl %eax, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: notb %cl
-; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm1, %ecx
+; SSE2-NEXT: movl %ecx, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: notb %dl
+; SSE2-NEXT: testb $1, %dl
; SSE2-NEXT: je .LBB16_6
; SSE2-NEXT: # %bb.5: # %cond.store3
-; SSE2-NEXT: movd %xmm0, %ecx
-; SSE2-NEXT: shrl $16, %ecx
-; SSE2-NEXT: movb %cl, 2(%rdi)
+; SSE2-NEXT: movl %eax, %edx
+; SSE2-NEXT: shrl $16, %edx
+; SSE2-NEXT: movb %dl, 2(%rdi)
; SSE2-NEXT: .LBB16_6: # %else4
-; SSE2-NEXT: shrl $24, %eax
-; SSE2-NEXT: notb %al
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $24, %ecx
+; SSE2-NEXT: notb %cl
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB16_8
; SSE2-NEXT: # %bb.7: # %cond.store5
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $24, %eax
; SSE2-NEXT: movb %al, 3(%rdi)
; SSE2-NEXT: .LBB16_8: # %else6
@@ -6348,9 +6254,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $2, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_10
; SSE2-NEXT: # %bb.9: # %cond.store7
-; SSE2-NEXT: pextrw $2, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 4(%rdi)
; SSE2-NEXT: .LBB16_10: # %else8
; SSE2-NEXT: shrl $8, %eax
@@ -6358,8 +6264,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_12
; SSE2-NEXT: # %bb.11: # %cond.store9
-; SSE2-NEXT: pextrw $2, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 5(%rdi)
+; SSE2-NEXT: movb %ch, 5(%rdi)
; SSE2-NEXT: .LBB16_12: # %else10
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
@@ -6367,9 +6272,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $3, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_14
; SSE2-NEXT: # %bb.13: # %cond.store11
-; SSE2-NEXT: pextrw $3, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB16_14: # %else12
; SSE2-NEXT: shrl $8, %eax
@@ -6377,8 +6282,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_16
; SSE2-NEXT: # %bb.15: # %cond.store13
-; SSE2-NEXT: pextrw $3, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 7(%rdi)
+; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB16_16: # %else14
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
@@ -6386,9 +6290,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $4, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_18
; SSE2-NEXT: # %bb.17: # %cond.store15
-; SSE2-NEXT: pextrw $4, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 8(%rdi)
; SSE2-NEXT: .LBB16_18: # %else16
; SSE2-NEXT: shrl $8, %eax
@@ -6396,8 +6300,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_20
; SSE2-NEXT: # %bb.19: # %cond.store17
-; SSE2-NEXT: pextrw $4, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 9(%rdi)
+; SSE2-NEXT: movb %ch, 9(%rdi)
; SSE2-NEXT: .LBB16_20: # %else18
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
@@ -6405,9 +6308,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $5, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_22
; SSE2-NEXT: # %bb.21: # %cond.store19
-; SSE2-NEXT: pextrw $5, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 10(%rdi)
; SSE2-NEXT: .LBB16_22: # %else20
; SSE2-NEXT: shrl $8, %eax
@@ -6415,8 +6318,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_24
; SSE2-NEXT: # %bb.23: # %cond.store21
-; SSE2-NEXT: pextrw $5, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 11(%rdi)
+; SSE2-NEXT: movb %ch, 11(%rdi)
; SSE2-NEXT: .LBB16_24: # %else22
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
@@ -6424,9 +6326,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $6, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_26
; SSE2-NEXT: # %bb.25: # %cond.store23
-; SSE2-NEXT: pextrw $6, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 12(%rdi)
; SSE2-NEXT: .LBB16_26: # %else24
; SSE2-NEXT: shrl $8, %eax
@@ -6434,8 +6336,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_28
; SSE2-NEXT: # %bb.27: # %cond.store25
-; SSE2-NEXT: pextrw $6, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 13(%rdi)
+; SSE2-NEXT: movb %ch, 13(%rdi)
; SSE2-NEXT: .LBB16_28: # %else26
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
@@ -6443,9 +6344,9 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: notb %cl
; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: je .LBB16_30
; SSE2-NEXT: # %bb.29: # %cond.store27
-; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: .LBB16_30: # %else28
; SSE2-NEXT: shrl $8, %eax
@@ -6453,8 +6354,7 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %ma
; SSE2-NEXT: testb $1, %al
; SSE2-NEXT: je .LBB16_32
; SSE2-NEXT: # %bb.31: # %cond.store29
-; SSE2-NEXT: pextrw $7, %xmm0, %eax
-; SSE2-NEXT: movb %ah, 15(%rdi)
+; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: .LBB16_32: # %else30
; SSE2-NEXT: retq
;
@@ -7086,18 +6986,17 @@ define void @truncstore_v8i16_v8i8(<8 x i16> %x, <8 x i8>* %p, <8 x i16> %mask)
; SSE2-NEXT: pcmpeqw %xmm1, %xmm2
; SSE2-NEXT: pcmpeqd %xmm3, %xmm3
; SSE2-NEXT: pxor %xmm2, %xmm3
-; SSE2-NEXT: movd %xmm3, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: movd %xmm3, %ecx
+; SSE2-NEXT: testb $1, %cl
+; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: je .LBB17_2
; SSE2-NEXT: # %bb.1: # %cond.store
-; SSE2-NEXT: movd %xmm0, %ecx
-; SSE2-NEXT: movb %cl, (%rdi)
+; SSE2-NEXT: movb %al, (%rdi)
; SSE2-NEXT: .LBB17_2: # %else
-; SSE2-NEXT: shrl $16, %eax
-; SSE2-NEXT: testb $1, %al
+; SSE2-NEXT: shrl $16, %ecx
+; SSE2-NEXT: testb $1, %cl
; SSE2-NEXT: je .LBB17_4
; SSE2-NEXT: # %bb.3: # %cond.store1
-; SSE2-NEXT: movd %xmm0, %eax
; SSE2-NEXT: shrl $16, %eax
; SSE2-NEXT: movb %al, 1(%rdi)
; SSE2-NEXT: .LBB17_4: # %else2
OpenPOWER on IntegriCloud