[llvm] adc7c58 - [SDAG] try to convert bit set/clear to signbit test when trunc is free
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 6 08:36:45 PST 2022
Author: Sanjay Patel
Date: 2022-12-06T11:34:48-05:00
New Revision: adc7c589c3dd35af5991ee481fa4667094bca548
URL: https://github.com/llvm/llvm-project/commit/adc7c589c3dd35af5991ee481fa4667094bca548
DIFF: https://github.com/llvm/llvm-project/commit/adc7c589c3dd35af5991ee481fa4667094bca548.diff
LOG: [SDAG] try to convert bit set/clear to signbit test when trunc is free
(X & Pow2MaskC) == 0 --> (trunc X) >= 0
(X & Pow2MaskC) != 0 --> (trunc X) < 0
This was noted as a regression in the post-commit feedback for D112634
(where we canonicalized IR differently).
For x86, this saves a few instruction bytes. AArch64 seems neutral.
Differential Revision: https://reviews.llvm.org/D139363
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/test/CodeGen/AArch64/signbit-test.ll
llvm/test/CodeGen/X86/btq.ll
llvm/test/CodeGen/X86/masked_compressstore.ll
llvm/test/CodeGen/X86/masked_expandload.ll
llvm/test/CodeGen/X86/masked_gather.ll
llvm/test/CodeGen/X86/masked_load.ll
llvm/test/CodeGen/X86/masked_store.ll
llvm/test/CodeGen/X86/masked_store_trunc.ll
llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll
llvm/test/CodeGen/X86/masked_store_trunc_usat.ll
llvm/test/CodeGen/X86/omit-urem-of-power-of-two-or-zero-when-comparing-with-zero.ll
llvm/test/CodeGen/X86/signbit-test.ll
llvm/test/CodeGen/X86/test-vs-bittest.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index 553facc40d233..30f925e565745 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -3739,6 +3739,26 @@ SDValue TargetLowering::foldSetCCWithAnd(EVT VT, SDValue N0, SDValue N1,
return DAG.getBoolExtOrTrunc(N0, DL, VT, OpVT);
}
+ // Try to eliminate a power-of-2 mask constant by converting to a signbit
+ // test in a narrow type that we can truncate to with no cost. Examples:
+ // (i32 X & 32768) == 0 --> (trunc X to i16) >= 0
+ // (i32 X & 32768) != 0 --> (trunc X to i16) < 0
+ // TODO: This conservatively checks for type legality on the source and
+ // destination types. That may inhibit optimizations, but it also
+ // allows setcc->shift transforms that may be more beneficial.
+ auto *AndC = dyn_cast<ConstantSDNode>(N0.getOperand(1));
+ if (AndC && isNullConstant(N1) && AndC->getAPIntValue().isPowerOf2() &&
+ isTypeLegal(OpVT) && N0.hasOneUse()) {
+ EVT NarrowVT = EVT::getIntegerVT(*DAG.getContext(),
+ AndC->getAPIntValue().getActiveBits());
+ if (isTruncateFree(OpVT, NarrowVT) && isTypeLegal(NarrowVT)) {
+ SDValue Trunc = DAG.getZExtOrTrunc(N0.getOperand(0), DL, NarrowVT);
+ SDValue Zero = DAG.getConstant(0, DL, NarrowVT);
+ return DAG.getSetCC(DL, VT, Trunc, Zero,
+ Cond == ISD::SETEQ ? ISD::SETGE : ISD::SETLT);
+ }
+ }
+
// Match these patterns in any of their permutations:
// (X & Y) == Y
// (X & Y) != Y
diff --git a/llvm/test/CodeGen/AArch64/signbit-test.ll b/llvm/test/CodeGen/AArch64/signbit-test.ll
index 624027b88ab66..f5eaf80cf7f8d 100644
--- a/llvm/test/CodeGen/AArch64/signbit-test.ll
+++ b/llvm/test/CodeGen/AArch64/signbit-test.ll
@@ -5,8 +5,8 @@ define i64 @test_clear_mask_i64_i32(i64 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i64_i32:
; CHECK: // %bb.0: // %entry
; CHECK-NEXT: mov w8, #42
-; CHECK-NEXT: tst x0, #0x80000000
-; CHECK-NEXT: csel x0, x8, x0, eq
+; CHECK-NEXT: cmp w0, #0
+; CHECK-NEXT: csel x0, x8, x0, ge
; CHECK-NEXT: ret
entry:
%a = and i64 %x, 2147483648
diff --git a/llvm/test/CodeGen/X86/btq.ll b/llvm/test/CodeGen/X86/btq.ll
index 33ff5a8d57faa..204090108e8e6 100644
--- a/llvm/test/CodeGen/X86/btq.ll
+++ b/llvm/test/CodeGen/X86/btq.ll
@@ -27,8 +27,8 @@ if.end:
define void @test2(i64 %foo) nounwind {
; CHECK-LABEL: test2:
; CHECK: # %bb.0:
-; CHECK-NEXT: testl $-2147483648, %edi # imm = 0x80000000
-; CHECK-NEXT: jne .LBB1_2
+; CHECK-NEXT: testl %edi, %edi
+; CHECK-NEXT: js .LBB1_2
; CHECK-NEXT: # %bb.1: # %if.end
; CHECK-NEXT: retq
; CHECK-NEXT: .LBB1_2: # %if.then
diff --git a/llvm/test/CodeGen/X86/masked_compressstore.ll b/llvm/test/CodeGen/X86/masked_compressstore.ll
index 9c75a13be5d7e..dedae2893e2ad 100644
--- a/llvm/test/CodeGen/X86/masked_compressstore.ll
+++ b/llvm/test/CodeGen/X86/masked_compressstore.ll
@@ -273,8 +273,8 @@ define void @compressstore_v16f64_v16i1(ptr %base, <16 x double> %V, <16 x i1> %
; SSE-NEXT: testb $64, %al
; SSE-NEXT: jne LBB1_13
; SSE-NEXT: LBB1_14: ## %else17
-; SSE-NEXT: testb $-128, %al
-; SSE-NEXT: jne LBB1_15
+; SSE-NEXT: testb %al, %al
+; SSE-NEXT: js LBB1_15
; SSE-NEXT: LBB1_16: ## %else20
; SSE-NEXT: testl $256, %eax ## imm = 0x100
; SSE-NEXT: jne LBB1_17
@@ -334,8 +334,8 @@ define void @compressstore_v16f64_v16i1(ptr %base, <16 x double> %V, <16 x i1> %
; SSE-NEXT: LBB1_13: ## %cond.store16
; SSE-NEXT: movlps %xmm3, (%rdi)
; SSE-NEXT: addq $8, %rdi
-; SSE-NEXT: testb $-128, %al
-; SSE-NEXT: je LBB1_16
+; SSE-NEXT: testb %al, %al
+; SSE-NEXT: jns LBB1_16
; SSE-NEXT: LBB1_15: ## %cond.store19
; SSE-NEXT: movhps %xmm3, (%rdi)
; SSE-NEXT: addq $8, %rdi
@@ -416,8 +416,8 @@ define void @compressstore_v16f64_v16i1(ptr %base, <16 x double> %V, <16 x i1> %
; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
; AVX1OR2-NEXT: jne LBB1_13
; AVX1OR2-NEXT: ## %bb.14: ## %else17
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: jne LBB1_15
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: js LBB1_15
; AVX1OR2-NEXT: LBB1_16: ## %else20
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
; AVX1OR2-NEXT: jne LBB1_17
@@ -472,8 +472,8 @@ define void @compressstore_v16f64_v16i1(ptr %base, <16 x double> %V, <16 x i1> %
; AVX1OR2-NEXT: LBB1_13: ## %cond.store16
; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi)
; AVX1OR2-NEXT: addq $8, %rdi
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: je LBB1_16
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: jns LBB1_16
; AVX1OR2-NEXT: LBB1_15: ## %cond.store19
; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi)
; AVX1OR2-NEXT: addq $8, %rdi
@@ -1311,8 +1311,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB6_13
; SSE2-NEXT: LBB6_14: ## %else17
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB6_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB6_15
; SSE2-NEXT: LBB6_16: ## %else20
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB6_17
@@ -1335,8 +1335,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
; SSE2-NEXT: jne LBB6_29
; SSE2-NEXT: LBB6_30: ## %else41
-; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE2-NEXT: jne LBB6_31
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: js LBB6_31
; SSE2-NEXT: LBB6_32: ## %else44
; SSE2-NEXT: testl $65536, %eax ## imm = 0x10000
; SSE2-NEXT: jne LBB6_33
@@ -1429,8 +1429,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
; SSE2-NEXT: movss %xmm0, (%rdi)
; SSE2-NEXT: addq $4, %rdi
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB6_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB6_16
; SSE2-NEXT: LBB6_15: ## %cond.store19
; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]
; SSE2-NEXT: movss %xmm1, (%rdi)
@@ -1479,8 +1479,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm3[1]
; SSE2-NEXT: movss %xmm0, (%rdi)
; SSE2-NEXT: addq $4, %rdi
-; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE2-NEXT: je LBB6_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns LBB6_32
; SSE2-NEXT: LBB6_31: ## %cond.store43
; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
; SSE2-NEXT: movss %xmm3, (%rdi)
@@ -1635,8 +1635,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE42-NEXT: testb $64, %al
; SSE42-NEXT: jne LBB6_13
; SSE42-NEXT: LBB6_14: ## %else17
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: jne LBB6_15
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: js LBB6_15
; SSE42-NEXT: LBB6_16: ## %else20
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
; SSE42-NEXT: jne LBB6_17
@@ -1659,8 +1659,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000
; SSE42-NEXT: jne LBB6_29
; SSE42-NEXT: LBB6_30: ## %else41
-; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE42-NEXT: jne LBB6_31
+; SSE42-NEXT: testw %ax, %ax
+; SSE42-NEXT: js LBB6_31
; SSE42-NEXT: LBB6_32: ## %else44
; SSE42-NEXT: testl $65536, %eax ## imm = 0x10000
; SSE42-NEXT: jne LBB6_33
@@ -1744,8 +1744,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE42-NEXT: LBB6_13: ## %cond.store16
; SSE42-NEXT: extractps $2, %xmm1, (%rdi)
; SSE42-NEXT: addq $4, %rdi
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: je LBB6_16
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: jns LBB6_16
; SSE42-NEXT: LBB6_15: ## %cond.store19
; SSE42-NEXT: extractps $3, %xmm1, (%rdi)
; SSE42-NEXT: addq $4, %rdi
@@ -1784,8 +1784,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; SSE42-NEXT: LBB6_29: ## %cond.store40
; SSE42-NEXT: extractps $2, %xmm3, (%rdi)
; SSE42-NEXT: addq $4, %rdi
-; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE42-NEXT: je LBB6_32
+; SSE42-NEXT: testw %ax, %ax
+; SSE42-NEXT: jns LBB6_32
; SSE42-NEXT: LBB6_31: ## %cond.store43
; SSE42-NEXT: extractps $3, %xmm3, (%rdi)
; SSE42-NEXT: addq $4, %rdi
@@ -1920,8 +1920,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB6_13
; AVX1-NEXT: LBB6_14: ## %else17
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB6_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB6_15
; AVX1-NEXT: LBB6_16: ## %else20
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB6_17
@@ -1948,8 +1948,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX1-NEXT: jne LBB6_29
; AVX1-NEXT: LBB6_30: ## %else41
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: jne LBB6_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js LBB6_31
; AVX1-NEXT: LBB6_32: ## %else44
; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX1-NEXT: jne LBB6_33
@@ -2038,8 +2038,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX1-NEXT: LBB6_13: ## %cond.store16
; AVX1-NEXT: vextractps $2, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB6_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB6_16
; AVX1-NEXT: LBB6_15: ## %cond.store19
; AVX1-NEXT: vextractps $3, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
@@ -2074,8 +2074,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX1-NEXT: LBB6_29: ## %cond.store40
; AVX1-NEXT: vextractps $2, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: je LBB6_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns LBB6_32
; AVX1-NEXT: LBB6_31: ## %cond.store43
; AVX1-NEXT: vextractps $3, %xmm0, (%rdi)
; AVX1-NEXT: addq $4, %rdi
@@ -2192,8 +2192,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB6_13
; AVX2-NEXT: LBB6_14: ## %else17
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB6_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB6_15
; AVX2-NEXT: LBB6_16: ## %else20
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB6_17
@@ -2220,8 +2220,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX2-NEXT: jne LBB6_29
; AVX2-NEXT: LBB6_30: ## %else41
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: jne LBB6_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js LBB6_31
; AVX2-NEXT: LBB6_32: ## %else44
; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX2-NEXT: jne LBB6_33
@@ -2310,8 +2310,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX2-NEXT: LBB6_13: ## %cond.store16
; AVX2-NEXT: vextractps $2, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB6_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB6_16
; AVX2-NEXT: LBB6_15: ## %cond.store19
; AVX2-NEXT: vextractps $3, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
@@ -2346,8 +2346,8 @@ define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32>
; AVX2-NEXT: LBB6_29: ## %cond.store40
; AVX2-NEXT: vextractps $2, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: je LBB6_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns LBB6_32
; AVX2-NEXT: LBB6_31: ## %cond.store43
; AVX2-NEXT: vextractps $3, %xmm0, (%rdi)
; AVX2-NEXT: addq $4, %rdi
@@ -3659,8 +3659,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; SSE2-NEXT: movb %cl, (%rdi)
; SSE2-NEXT: incq %rdi
; SSE2-NEXT: LBB12_14: ## %else17
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB12_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB12_16
; SSE2-NEXT: ## %bb.15: ## %cond.store19
; SSE2-NEXT: movb %ch, (%rdi)
; SSE2-NEXT: incq %rdi
@@ -3765,8 +3765,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; SSE42-NEXT: testb $64, %al
; SSE42-NEXT: jne LBB12_13
; SSE42-NEXT: LBB12_14: ## %else17
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: jne LBB12_15
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: js LBB12_15
; SSE42-NEXT: LBB12_16: ## %else20
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
; SSE42-NEXT: jne LBB12_17
@@ -3826,8 +3826,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; SSE42-NEXT: LBB12_13: ## %cond.store16
; SSE42-NEXT: pextrb $6, %xmm0, (%rdi)
; SSE42-NEXT: incq %rdi
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: je LBB12_16
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: jns LBB12_16
; SSE42-NEXT: LBB12_15: ## %cond.store19
; SSE42-NEXT: pextrb $7, %xmm0, (%rdi)
; SSE42-NEXT: incq %rdi
@@ -3898,8 +3898,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX1OR2-NEXT: testb $64, %al
; AVX1OR2-NEXT: jne LBB12_13
; AVX1OR2-NEXT: LBB12_14: ## %else17
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: jne LBB12_15
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: js LBB12_15
; AVX1OR2-NEXT: LBB12_16: ## %else20
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
; AVX1OR2-NEXT: jne LBB12_17
@@ -3959,8 +3959,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX1OR2-NEXT: LBB12_13: ## %cond.store16
; AVX1OR2-NEXT: vpextrb $6, %xmm0, (%rdi)
; AVX1OR2-NEXT: incq %rdi
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: je LBB12_16
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: jns LBB12_16
; AVX1OR2-NEXT: LBB12_15: ## %cond.store19
; AVX1OR2-NEXT: vpextrb $7, %xmm0, (%rdi)
; AVX1OR2-NEXT: incq %rdi
@@ -4031,8 +4031,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB12_13
; AVX512F-NEXT: LBB12_14: ## %else17
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB12_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB12_15
; AVX512F-NEXT: LBB12_16: ## %else20
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB12_17
@@ -4092,8 +4092,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512F-NEXT: LBB12_13: ## %cond.store16
; AVX512F-NEXT: vpextrb $6, %xmm0, (%rdi)
; AVX512F-NEXT: incq %rdi
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB12_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB12_16
; AVX512F-NEXT: LBB12_15: ## %cond.store19
; AVX512F-NEXT: vpextrb $7, %xmm0, (%rdi)
; AVX512F-NEXT: incq %rdi
@@ -4164,8 +4164,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB12_13
; AVX512VLDQ-NEXT: LBB12_14: ## %else17
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB12_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB12_15
; AVX512VLDQ-NEXT: LBB12_16: ## %else20
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB12_17
@@ -4225,8 +4225,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512VLDQ-NEXT: LBB12_13: ## %cond.store16
; AVX512VLDQ-NEXT: vpextrb $6, %xmm0, (%rdi)
; AVX512VLDQ-NEXT: incq %rdi
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB12_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB12_16
; AVX512VLDQ-NEXT: LBB12_15: ## %cond.store19
; AVX512VLDQ-NEXT: vpextrb $7, %xmm0, (%rdi)
; AVX512VLDQ-NEXT: incq %rdi
@@ -4296,8 +4296,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512VLBW-NEXT: testb $64, %al
; AVX512VLBW-NEXT: jne LBB12_13
; AVX512VLBW-NEXT: LBB12_14: ## %else17
-; AVX512VLBW-NEXT: testb $-128, %al
-; AVX512VLBW-NEXT: jne LBB12_15
+; AVX512VLBW-NEXT: testb %al, %al
+; AVX512VLBW-NEXT: js LBB12_15
; AVX512VLBW-NEXT: LBB12_16: ## %else20
; AVX512VLBW-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLBW-NEXT: jne LBB12_17
@@ -4357,8 +4357,8 @@ define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigg
; AVX512VLBW-NEXT: LBB12_13: ## %cond.store16
; AVX512VLBW-NEXT: vpextrb $6, %xmm0, (%rdi)
; AVX512VLBW-NEXT: incq %rdi
-; AVX512VLBW-NEXT: testb $-128, %al
-; AVX512VLBW-NEXT: je LBB12_16
+; AVX512VLBW-NEXT: testb %al, %al
+; AVX512VLBW-NEXT: jns LBB12_16
; AVX512VLBW-NEXT: LBB12_15: ## %cond.store19
; AVX512VLBW-NEXT: vpextrb $7, %xmm0, (%rdi)
; AVX512VLBW-NEXT: incq %rdi
diff --git a/llvm/test/CodeGen/X86/masked_expandload.ll b/llvm/test/CodeGen/X86/masked_expandload.ll
index ae2ef409ab0c8..cafbc7b5a8ac1 100644
--- a/llvm/test/CodeGen/X86/masked_expandload.ll
+++ b/llvm/test/CodeGen/X86/masked_expandload.ll
@@ -575,8 +575,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; SSE-NEXT: testb $64, %cl
; SSE-NEXT: jne LBB3_13
; SSE-NEXT: LBB3_14: ## %else22
-; SSE-NEXT: testb $-128, %cl
-; SSE-NEXT: jne LBB3_15
+; SSE-NEXT: testb %cl, %cl
+; SSE-NEXT: js LBB3_15
; SSE-NEXT: LBB3_16: ## %else26
; SSE-NEXT: testl $256, %ecx ## imm = 0x100
; SSE-NEXT: jne LBB3_17
@@ -646,8 +646,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; SSE-NEXT: LBB3_13: ## %cond.load21
; SSE-NEXT: movlps (%rsi), %xmm3 ## xmm3 = mem[0,1],xmm3[2,3]
; SSE-NEXT: addq $8, %rsi
-; SSE-NEXT: testb $-128, %cl
-; SSE-NEXT: je LBB3_16
+; SSE-NEXT: testb %cl, %cl
+; SSE-NEXT: jns LBB3_16
; SSE-NEXT: LBB3_15: ## %cond.load25
; SSE-NEXT: movhps (%rsi), %xmm3 ## xmm3 = xmm3[0,1],mem[0,1]
; SSE-NEXT: addq $8, %rsi
@@ -724,8 +724,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB3_13
; AVX1-NEXT: LBB3_14: ## %else22
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB3_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB3_15
; AVX1-NEXT: LBB3_16: ## %else26
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB3_17
@@ -792,8 +792,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; AVX1-NEXT: vbroadcastsd (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm4[4,5],ymm1[6,7]
; AVX1-NEXT: addq $8, %rdi
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB3_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB3_16
; AVX1-NEXT: LBB3_15: ## %cond.load25
; AVX1-NEXT: vbroadcastsd (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm4[6,7]
@@ -878,8 +878,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB3_13
; AVX2-NEXT: LBB3_14: ## %else22
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB3_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB3_15
; AVX2-NEXT: LBB3_16: ## %else26
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB3_17
@@ -946,8 +946,8 @@ define <16 x double> @expandload_v16f64_v16i32(ptr %base, <16 x double> %src0, <
; AVX2-NEXT: vpbroadcastq (%rdi), %ymm4
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm4[4,5],ymm1[6,7]
; AVX2-NEXT: addq $8, %rdi
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB3_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB3_16
; AVX2-NEXT: LBB3_15: ## %cond.load25
; AVX2-NEXT: vpbroadcastq (%rdi), %ymm4
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm4[6,7]
@@ -1410,8 +1410,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE2-NEXT: testb $64, %cl
; SSE2-NEXT: jne LBB8_13
; SSE2-NEXT: LBB8_14: ## %else22
-; SSE2-NEXT: testb $-128, %cl
-; SSE2-NEXT: jne LBB8_15
+; SSE2-NEXT: testb %cl, %cl
+; SSE2-NEXT: js LBB8_15
; SSE2-NEXT: LBB8_16: ## %else26
; SSE2-NEXT: testl $256, %ecx ## imm = 0x100
; SSE2-NEXT: jne LBB8_17
@@ -1434,8 +1434,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE2-NEXT: testl $16384, %ecx ## imm = 0x4000
; SSE2-NEXT: jne LBB8_29
; SSE2-NEXT: LBB8_30: ## %else54
-; SSE2-NEXT: testl $32768, %ecx ## imm = 0x8000
-; SSE2-NEXT: jne LBB8_31
+; SSE2-NEXT: testw %cx, %cx
+; SSE2-NEXT: js LBB8_31
; SSE2-NEXT: LBB8_32: ## %else58
; SSE2-NEXT: testl $65536, %ecx ## imm = 0x10000
; SSE2-NEXT: jne LBB8_33
@@ -1545,8 +1545,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE2-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,0],xmm1[3,0]
; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm8[0,2]
; SSE2-NEXT: addq $4, %rsi
-; SSE2-NEXT: testb $-128, %cl
-; SSE2-NEXT: je LBB8_16
+; SSE2-NEXT: testb %cl, %cl
+; SSE2-NEXT: jns LBB8_16
; SSE2-NEXT: LBB8_15: ## %cond.load25
; SSE2-NEXT: movss (%rsi), %xmm8 ## xmm8 = mem[0],zero,zero,zero
; SSE2-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,1],xmm1[2,3]
@@ -1601,8 +1601,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE2-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,0],xmm3[3,0]
; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,1],xmm8[0,2]
; SSE2-NEXT: addq $4, %rsi
-; SSE2-NEXT: testl $32768, %ecx ## imm = 0x8000
-; SSE2-NEXT: je LBB8_32
+; SSE2-NEXT: testw %cx, %cx
+; SSE2-NEXT: jns LBB8_32
; SSE2-NEXT: LBB8_31: ## %cond.load57
; SSE2-NEXT: movss (%rsi), %xmm8 ## xmm8 = mem[0],zero,zero,zero
; SSE2-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,1],xmm3[2,3]
@@ -1767,8 +1767,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE42-NEXT: testb $64, %cl
; SSE42-NEXT: jne LBB8_13
; SSE42-NEXT: LBB8_14: ## %else22
-; SSE42-NEXT: testb $-128, %cl
-; SSE42-NEXT: jne LBB8_15
+; SSE42-NEXT: testb %cl, %cl
+; SSE42-NEXT: js LBB8_15
; SSE42-NEXT: LBB8_16: ## %else26
; SSE42-NEXT: testl $256, %ecx ## imm = 0x100
; SSE42-NEXT: jne LBB8_17
@@ -1791,8 +1791,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE42-NEXT: testl $16384, %ecx ## imm = 0x4000
; SSE42-NEXT: jne LBB8_29
; SSE42-NEXT: LBB8_30: ## %else54
-; SSE42-NEXT: testl $32768, %ecx ## imm = 0x8000
-; SSE42-NEXT: jne LBB8_31
+; SSE42-NEXT: testw %cx, %cx
+; SSE42-NEXT: js LBB8_31
; SSE42-NEXT: LBB8_32: ## %else58
; SSE42-NEXT: testl $65536, %ecx ## imm = 0x10000
; SSE42-NEXT: jne LBB8_33
@@ -1888,8 +1888,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE42-NEXT: LBB8_13: ## %cond.load21
; SSE42-NEXT: insertps $32, (%rsi), %xmm1 ## xmm1 = xmm1[0,1],mem[0],xmm1[3]
; SSE42-NEXT: addq $4, %rsi
-; SSE42-NEXT: testb $-128, %cl
-; SSE42-NEXT: je LBB8_16
+; SSE42-NEXT: testb %cl, %cl
+; SSE42-NEXT: jns LBB8_16
; SSE42-NEXT: LBB8_15: ## %cond.load25
; SSE42-NEXT: insertps $48, (%rsi), %xmm1 ## xmm1 = xmm1[0,1,2],mem[0]
; SSE42-NEXT: addq $4, %rsi
@@ -1930,8 +1930,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; SSE42-NEXT: LBB8_29: ## %cond.load53
; SSE42-NEXT: insertps $32, (%rsi), %xmm3 ## xmm3 = xmm3[0,1],mem[0],xmm3[3]
; SSE42-NEXT: addq $4, %rsi
-; SSE42-NEXT: testl $32768, %ecx ## imm = 0x8000
-; SSE42-NEXT: je LBB8_32
+; SSE42-NEXT: testw %cx, %cx
+; SSE42-NEXT: jns LBB8_32
; SSE42-NEXT: LBB8_31: ## %cond.load57
; SSE42-NEXT: insertps $48, (%rsi), %xmm3 ## xmm3 = xmm3[0,1,2],mem[0]
; SSE42-NEXT: addq $4, %rsi
@@ -2064,8 +2064,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB8_13
; AVX1-NEXT: LBB8_14: ## %else22
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB8_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB8_15
; AVX1-NEXT: LBB8_16: ## %else26
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB8_17
@@ -2088,8 +2088,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX1-NEXT: jne LBB8_29
; AVX1-NEXT: LBB8_30: ## %else54
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: jne LBB8_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js LBB8_31
; AVX1-NEXT: LBB8_32: ## %else58
; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX1-NEXT: jne LBB8_33
@@ -2180,8 +2180,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX1-NEXT: vbroadcastss (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm4[6],ymm0[7]
; AVX1-NEXT: addq $4, %rdi
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB8_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB8_16
; AVX1-NEXT: LBB8_15: ## %cond.load25
; AVX1-NEXT: vbroadcastss (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm4[7]
@@ -2228,8 +2228,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX1-NEXT: vbroadcastss (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm4[6],ymm1[7]
; AVX1-NEXT: addq $4, %rdi
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: je LBB8_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns LBB8_32
; AVX1-NEXT: LBB8_31: ## %cond.load57
; AVX1-NEXT: vbroadcastss (%rdi), %ymm4
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm4[7]
@@ -2366,8 +2366,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB8_13
; AVX2-NEXT: LBB8_14: ## %else22
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB8_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB8_15
; AVX2-NEXT: LBB8_16: ## %else26
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB8_17
@@ -2390,8 +2390,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX2-NEXT: jne LBB8_29
; AVX2-NEXT: LBB8_30: ## %else54
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: jne LBB8_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js LBB8_31
; AVX2-NEXT: LBB8_32: ## %else58
; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX2-NEXT: jne LBB8_33
@@ -2482,8 +2482,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX2-NEXT: vbroadcastss (%rdi), %ymm4
; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm4[6],ymm0[7]
; AVX2-NEXT: addq $4, %rdi
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB8_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB8_16
; AVX2-NEXT: LBB8_15: ## %cond.load25
; AVX2-NEXT: vbroadcastss (%rdi), %ymm4
; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm4[7]
@@ -2530,8 +2530,8 @@ define <32 x float> @expandload_v32f32_v32i32(ptr %base, <32 x float> %src0, <32
; AVX2-NEXT: vbroadcastss (%rdi), %ymm4
; AVX2-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm4[6],ymm1[7]
; AVX2-NEXT: addq $4, %rdi
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: je LBB8_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns LBB8_32
; AVX2-NEXT: LBB8_31: ## %cond.load57
; AVX2-NEXT: vbroadcastss (%rdi), %ymm4
; AVX2-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm4[7]
@@ -3249,8 +3249,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB12_13
; SSE2-NEXT: LBB12_14: ## %else22
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB12_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB12_15
; SSE2-NEXT: LBB12_16: ## %else26
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB12_17
@@ -3351,8 +3351,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; SSE2-NEXT: pandn %xmm2, %xmm1
; SSE2-NEXT: por %xmm1, %xmm0
; SSE2-NEXT: incq %rdi
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB12_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB12_16
; SSE2-NEXT: LBB12_15: ## %cond.load25
; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
; SSE2-NEXT: pand %xmm1, %xmm0
@@ -3475,8 +3475,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; SSE42-NEXT: testb $64, %al
; SSE42-NEXT: jne LBB12_13
; SSE42-NEXT: LBB12_14: ## %else22
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: jne LBB12_15
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: js LBB12_15
; SSE42-NEXT: LBB12_16: ## %else26
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
; SSE42-NEXT: jne LBB12_17
@@ -3536,8 +3536,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; SSE42-NEXT: LBB12_13: ## %cond.load21
; SSE42-NEXT: pinsrb $6, (%rdi), %xmm0
; SSE42-NEXT: incq %rdi
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: je LBB12_16
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: jns LBB12_16
; SSE42-NEXT: LBB12_15: ## %cond.load25
; SSE42-NEXT: pinsrb $7, (%rdi), %xmm0
; SSE42-NEXT: incq %rdi
@@ -3608,8 +3608,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX1OR2-NEXT: testb $64, %al
; AVX1OR2-NEXT: jne LBB12_13
; AVX1OR2-NEXT: LBB12_14: ## %else22
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: jne LBB12_15
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: js LBB12_15
; AVX1OR2-NEXT: LBB12_16: ## %else26
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
; AVX1OR2-NEXT: jne LBB12_17
@@ -3669,8 +3669,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX1OR2-NEXT: LBB12_13: ## %cond.load21
; AVX1OR2-NEXT: vpinsrb $6, (%rdi), %xmm0, %xmm0
; AVX1OR2-NEXT: incq %rdi
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: je LBB12_16
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: jns LBB12_16
; AVX1OR2-NEXT: LBB12_15: ## %cond.load25
; AVX1OR2-NEXT: vpinsrb $7, (%rdi), %xmm0, %xmm0
; AVX1OR2-NEXT: incq %rdi
@@ -3741,8 +3741,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB12_13
; AVX512F-NEXT: LBB12_14: ## %else22
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB12_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB12_15
; AVX512F-NEXT: LBB12_16: ## %else26
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB12_17
@@ -3802,8 +3802,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512F-NEXT: LBB12_13: ## %cond.load21
; AVX512F-NEXT: vpinsrb $6, (%rdi), %xmm0, %xmm0
; AVX512F-NEXT: incq %rdi
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB12_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB12_16
; AVX512F-NEXT: LBB12_15: ## %cond.load25
; AVX512F-NEXT: vpinsrb $7, (%rdi), %xmm0, %xmm0
; AVX512F-NEXT: incq %rdi
@@ -3874,8 +3874,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB12_13
; AVX512VLDQ-NEXT: LBB12_14: ## %else22
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB12_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB12_15
; AVX512VLDQ-NEXT: LBB12_16: ## %else26
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB12_17
@@ -3935,8 +3935,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512VLDQ-NEXT: LBB12_13: ## %cond.load21
; AVX512VLDQ-NEXT: vpinsrb $6, (%rdi), %xmm0, %xmm0
; AVX512VLDQ-NEXT: incq %rdi
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB12_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB12_16
; AVX512VLDQ-NEXT: LBB12_15: ## %cond.load25
; AVX512VLDQ-NEXT: vpinsrb $7, (%rdi), %xmm0, %xmm0
; AVX512VLDQ-NEXT: incq %rdi
@@ -4006,8 +4006,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512VLBW-NEXT: testb $64, %al
; AVX512VLBW-NEXT: jne LBB12_13
; AVX512VLBW-NEXT: LBB12_14: ## %else22
-; AVX512VLBW-NEXT: testb $-128, %al
-; AVX512VLBW-NEXT: jne LBB12_15
+; AVX512VLBW-NEXT: testb %al, %al
+; AVX512VLBW-NEXT: js LBB12_15
; AVX512VLBW-NEXT: LBB12_16: ## %else26
; AVX512VLBW-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLBW-NEXT: jne LBB12_17
@@ -4067,8 +4067,8 @@ define <16 x i8> @expandload_v16i8_v16i8(ptr %base, <16 x i8> %src0, <16 x i8> %
; AVX512VLBW-NEXT: LBB12_13: ## %cond.load21
; AVX512VLBW-NEXT: vpinsrb $6, (%rdi), %xmm0, %xmm0
; AVX512VLBW-NEXT: incq %rdi
-; AVX512VLBW-NEXT: testb $-128, %al
-; AVX512VLBW-NEXT: je LBB12_16
+; AVX512VLBW-NEXT: testb %al, %al
+; AVX512VLBW-NEXT: jns LBB12_16
; AVX512VLBW-NEXT: LBB12_15: ## %cond.load25
; AVX512VLBW-NEXT: vpinsrb $7, (%rdi), %xmm0, %xmm0
; AVX512VLBW-NEXT: incq %rdi
diff --git a/llvm/test/CodeGen/X86/masked_gather.ll b/llvm/test/CodeGen/X86/masked_gather.ll
index b20ce3a616098..513b608e9ae3c 100644
--- a/llvm/test/CodeGen/X86/masked_gather.ll
+++ b/llvm/test/CodeGen/X86/masked_gather.ll
@@ -650,8 +650,8 @@ define <16 x i8> @gather_v16i8_v16i32_v16i8(ptr %base, <16 x i32> %idx, <16 x i8
; SSE-NEXT: pinsrb $6, (%rcx), %xmm5
; SSE-NEXT: .LBB3_14: # %else17
; SSE-NEXT: pmovsxdq %xmm2, %xmm0
-; SSE-NEXT: testb $-128, %al
-; SSE-NEXT: je .LBB3_16
+; SSE-NEXT: testb %al, %al
+; SSE-NEXT: jns .LBB3_16
; SSE-NEXT: # %bb.15: # %cond.load19
; SSE-NEXT: pextrq $1, %xmm1, %rcx
; SSE-NEXT: pinsrb $7, (%rcx), %xmm5
@@ -789,8 +789,8 @@ define <16 x i8> @gather_v16i8_v16i32_v16i8(ptr %base, <16 x i32> %idx, <16 x i8
; AVX1-NEXT: vpinsrb $6, (%rcx), %xmm3, %xmm3
; AVX1-NEXT: .LBB3_14: # %else17
; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm5
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB3_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB3_16
; AVX1-NEXT: # %bb.15: # %cond.load19
; AVX1-NEXT: vpextrq $1, %xmm0, %rcx
; AVX1-NEXT: vpinsrb $7, (%rcx), %xmm3, %xmm3
@@ -919,8 +919,8 @@ define <16 x i8> @gather_v16i8_v16i32_v16i8(ptr %base, <16 x i32> %idx, <16 x i8
; AVX2-NEXT: vpinsrb $6, (%rcx), %xmm3, %xmm3
; AVX2-NEXT: .LBB3_14: # %else17
; AVX2-NEXT: vpmovsxdq %xmm1, %ymm2
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB3_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB3_16
; AVX2-NEXT: # %bb.15: # %cond.load19
; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
; AVX2-NEXT: vpinsrb $7, (%rcx), %xmm3, %xmm3
@@ -1034,8 +1034,8 @@ define <16 x i8> @gather_v16i8_v16i32_v16i8(ptr %base, <16 x i32> %idx, <16 x i8
; AVX512-NEXT: vpinsrb $6, (%rcx), %xmm2, %xmm2
; AVX512-NEXT: .LBB3_14: # %else17
; AVX512-NEXT: vpmovsxdq %ymm1, %zmm1
-; AVX512-NEXT: testb $-128, %al
-; AVX512-NEXT: je .LBB3_16
+; AVX512-NEXT: testb %al, %al
+; AVX512-NEXT: jns .LBB3_16
; AVX512-NEXT: # %bb.15: # %cond.load19
; AVX512-NEXT: vpextrq $1, %xmm0, %rcx
; AVX512-NEXT: vpinsrb $7, (%rcx), %xmm2, %xmm2
diff --git a/llvm/test/CodeGen/X86/masked_load.ll b/llvm/test/CodeGen/X86/masked_load.ll
index e226279164a01..e12cfff24bf88 100644
--- a/llvm/test/CodeGen/X86/masked_load.ll
+++ b/llvm/test/CodeGen/X86/masked_load.ll
@@ -3118,8 +3118,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; SSE-NEXT: testb $64, %al
; SSE-NEXT: jne LBB22_13
; SSE-NEXT: LBB22_14: ## %else17
-; SSE-NEXT: testb $-128, %al
-; SSE-NEXT: jne LBB22_15
+; SSE-NEXT: testb %al, %al
+; SSE-NEXT: js LBB22_15
; SSE-NEXT: LBB22_16: ## %else20
; SSE-NEXT: testl $256, %eax ## imm = 0x100
; SSE-NEXT: jne LBB22_17
@@ -3176,8 +3176,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; SSE-NEXT: je LBB22_14
; SSE-NEXT: LBB22_13: ## %cond.load16
; SSE-NEXT: pinsrw $6, 12(%rdi), %xmm2
-; SSE-NEXT: testb $-128, %al
-; SSE-NEXT: je LBB22_16
+; SSE-NEXT: testb %al, %al
+; SSE-NEXT: jns LBB22_16
; SSE-NEXT: LBB22_15: ## %cond.load19
; SSE-NEXT: pinsrw $7, 14(%rdi), %xmm2
; SSE-NEXT: testl $256, %eax ## imm = 0x100
@@ -3238,8 +3238,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB22_13
; AVX1-NEXT: LBB22_14: ## %else17
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB22_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB22_15
; AVX1-NEXT: LBB22_16: ## %else20
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB22_17
@@ -3300,8 +3300,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX1-NEXT: LBB22_13: ## %cond.load16
; AVX1-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB22_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB22_16
; AVX1-NEXT: LBB22_15: ## %cond.load19
; AVX1-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -3382,8 +3382,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB22_13
; AVX2-NEXT: LBB22_14: ## %else17
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB22_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB22_15
; AVX2-NEXT: LBB22_16: ## %else20
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB22_17
@@ -3444,8 +3444,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX2-NEXT: LBB22_13: ## %cond.load16
; AVX2-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB22_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB22_16
; AVX2-NEXT: LBB22_15: ## %cond.load19
; AVX2-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -3528,8 +3528,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB22_13
; AVX512F-NEXT: LBB22_14: ## %else17
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB22_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB22_15
; AVX512F-NEXT: LBB22_16: ## %else20
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB22_17
@@ -3590,8 +3590,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX512F-NEXT: LBB22_13: ## %cond.load16
; AVX512F-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB22_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB22_16
; AVX512F-NEXT: LBB22_15: ## %cond.load19
; AVX512F-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -3674,8 +3674,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB22_13
; AVX512VLDQ-NEXT: LBB22_14: ## %else17
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB22_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB22_15
; AVX512VLDQ-NEXT: LBB22_16: ## %else20
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB22_17
@@ -3736,8 +3736,8 @@ define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16>
; AVX512VLDQ-NEXT: LBB22_13: ## %cond.load16
; AVX512VLDQ-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB22_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB22_16
; AVX512VLDQ-NEXT: LBB22_15: ## %cond.load19
; AVX512VLDQ-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -3838,8 +3838,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB23_13
; SSE2-NEXT: LBB23_14: ## %else17
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB23_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB23_15
; SSE2-NEXT: LBB23_16: ## %else20
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB23_17
@@ -3934,8 +3934,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; SSE2-NEXT: psllq $48, %xmm2
; SSE2-NEXT: pandn %xmm2, %xmm0
; SSE2-NEXT: por %xmm0, %xmm1
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB23_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB23_16
; SSE2-NEXT: LBB23_15: ## %cond.load19
; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
; SSE2-NEXT: pand %xmm0, %xmm1
@@ -4049,8 +4049,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; SSE42-NEXT: testb $64, %al
; SSE42-NEXT: jne LBB23_13
; SSE42-NEXT: LBB23_14: ## %else17
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: jne LBB23_15
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: js LBB23_15
; SSE42-NEXT: LBB23_16: ## %else20
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
; SSE42-NEXT: jne LBB23_17
@@ -4104,8 +4104,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; SSE42-NEXT: je LBB23_14
; SSE42-NEXT: LBB23_13: ## %cond.load16
; SSE42-NEXT: pinsrb $6, 6(%rdi), %xmm1
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: je LBB23_16
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: jns LBB23_16
; SSE42-NEXT: LBB23_15: ## %cond.load19
; SSE42-NEXT: pinsrb $7, 7(%rdi), %xmm1
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
@@ -4167,8 +4167,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX1OR2-NEXT: testb $64, %al
; AVX1OR2-NEXT: jne LBB23_13
; AVX1OR2-NEXT: LBB23_14: ## %else17
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: jne LBB23_15
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: js LBB23_15
; AVX1OR2-NEXT: LBB23_16: ## %else20
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
; AVX1OR2-NEXT: jne LBB23_17
@@ -4222,8 +4222,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX1OR2-NEXT: je LBB23_14
; AVX1OR2-NEXT: LBB23_13: ## %cond.load16
; AVX1OR2-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm1
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: je LBB23_16
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: jns LBB23_16
; AVX1OR2-NEXT: LBB23_15: ## %cond.load19
; AVX1OR2-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm1
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
@@ -4285,8 +4285,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB23_13
; AVX512F-NEXT: LBB23_14: ## %else17
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB23_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB23_15
; AVX512F-NEXT: LBB23_16: ## %else20
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB23_17
@@ -4340,8 +4340,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX512F-NEXT: je LBB23_14
; AVX512F-NEXT: LBB23_13: ## %cond.load16
; AVX512F-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm1
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB23_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB23_16
; AVX512F-NEXT: LBB23_15: ## %cond.load19
; AVX512F-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm1
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
@@ -4403,8 +4403,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB23_13
; AVX512VLDQ-NEXT: LBB23_14: ## %else17
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB23_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB23_15
; AVX512VLDQ-NEXT: LBB23_16: ## %else20
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB23_17
@@ -4458,8 +4458,8 @@ define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst
; AVX512VLDQ-NEXT: je LBB23_14
; AVX512VLDQ-NEXT: LBB23_13: ## %cond.load16
; AVX512VLDQ-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm1
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB23_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB23_16
; AVX512VLDQ-NEXT: LBB23_15: ## %cond.load19
; AVX512VLDQ-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm1
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
@@ -4542,8 +4542,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB24_13
; SSE2-NEXT: LBB24_14: ## %else17
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB24_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB24_15
; SSE2-NEXT: LBB24_16: ## %else20
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB24_17
@@ -4566,8 +4566,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
; SSE2-NEXT: jne LBB24_29
; SSE2-NEXT: LBB24_30: ## %else41
-; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE2-NEXT: jne LBB24_31
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: js LBB24_31
; SSE2-NEXT: LBB24_32: ## %else44
; SSE2-NEXT: testl $65536, %eax ## imm = 0x10000
; SSE2-NEXT: jne LBB24_33
@@ -4693,8 +4693,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE2-NEXT: psllq $48, %xmm1
; SSE2-NEXT: pandn %xmm1, %xmm0
; SSE2-NEXT: por %xmm0, %xmm2
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB24_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB24_16
; SSE2-NEXT: LBB24_15: ## %cond.load19
; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
; SSE2-NEXT: pand %xmm0, %xmm2
@@ -4773,8 +4773,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]
; SSE2-NEXT: pandn %xmm1, %xmm0
; SSE2-NEXT: por %xmm0, %xmm2
-; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE2-NEXT: je LBB24_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns LBB24_32
; SSE2-NEXT: LBB24_31: ## %cond.load43
; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE2-NEXT: movzbl 15(%rdi), %ecx
@@ -4961,8 +4961,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE42-NEXT: testb $64, %al
; SSE42-NEXT: jne LBB24_13
; SSE42-NEXT: LBB24_14: ## %else17
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: jne LBB24_15
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: js LBB24_15
; SSE42-NEXT: LBB24_16: ## %else20
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
; SSE42-NEXT: jne LBB24_17
@@ -4985,8 +4985,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000
; SSE42-NEXT: jne LBB24_29
; SSE42-NEXT: LBB24_30: ## %else41
-; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE42-NEXT: jne LBB24_31
+; SSE42-NEXT: testw %ax, %ax
+; SSE42-NEXT: js LBB24_31
; SSE42-NEXT: LBB24_32: ## %else44
; SSE42-NEXT: testl $65536, %eax ## imm = 0x10000
; SSE42-NEXT: jne LBB24_33
@@ -5067,8 +5067,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE42-NEXT: je LBB24_14
; SSE42-NEXT: LBB24_13: ## %cond.load16
; SSE42-NEXT: pinsrb $6, 6(%rdi), %xmm2
-; SSE42-NEXT: testb $-128, %al
-; SSE42-NEXT: je LBB24_16
+; SSE42-NEXT: testb %al, %al
+; SSE42-NEXT: jns LBB24_16
; SSE42-NEXT: LBB24_15: ## %cond.load19
; SSE42-NEXT: pinsrb $7, 7(%rdi), %xmm2
; SSE42-NEXT: testl $256, %eax ## imm = 0x100
@@ -5099,8 +5099,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; SSE42-NEXT: je LBB24_30
; SSE42-NEXT: LBB24_29: ## %cond.load40
; SSE42-NEXT: pinsrb $14, 14(%rdi), %xmm2
-; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE42-NEXT: je LBB24_32
+; SSE42-NEXT: testw %ax, %ax
+; SSE42-NEXT: jns LBB24_32
; SSE42-NEXT: LBB24_31: ## %cond.load43
; SSE42-NEXT: pinsrb $15, 15(%rdi), %xmm2
; SSE42-NEXT: testl $65536, %eax ## imm = 0x10000
@@ -5195,8 +5195,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB24_13
; AVX1-NEXT: LBB24_14: ## %else17
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB24_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB24_15
; AVX1-NEXT: LBB24_16: ## %else20
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB24_17
@@ -5219,8 +5219,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX1-NEXT: jne LBB24_29
; AVX1-NEXT: LBB24_30: ## %else41
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: jne LBB24_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js LBB24_31
; AVX1-NEXT: LBB24_32: ## %else44
; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX1-NEXT: jne LBB24_33
@@ -5305,8 +5305,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX1-NEXT: LBB24_13: ## %cond.load16
; AVX1-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB24_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB24_16
; AVX1-NEXT: LBB24_15: ## %cond.load19
; AVX1-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -5345,8 +5345,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX1-NEXT: LBB24_29: ## %cond.load40
; AVX1-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: je LBB24_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns LBB24_32
; AVX1-NEXT: LBB24_31: ## %cond.load43
; AVX1-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm0
; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -5473,8 +5473,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB24_13
; AVX2-NEXT: LBB24_14: ## %else17
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB24_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB24_15
; AVX2-NEXT: LBB24_16: ## %else20
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB24_17
@@ -5497,8 +5497,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX2-NEXT: jne LBB24_29
; AVX2-NEXT: LBB24_30: ## %else41
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: jne LBB24_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js LBB24_31
; AVX2-NEXT: LBB24_32: ## %else44
; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX2-NEXT: jne LBB24_33
@@ -5583,8 +5583,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX2-NEXT: LBB24_13: ## %cond.load16
; AVX2-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB24_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB24_16
; AVX2-NEXT: LBB24_15: ## %cond.load19
; AVX2-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -5623,8 +5623,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX2-NEXT: LBB24_29: ## %cond.load40
; AVX2-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: je LBB24_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns LBB24_32
; AVX2-NEXT: LBB24_31: ## %cond.load43
; AVX2-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm0
; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -5751,8 +5751,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB24_13
; AVX512F-NEXT: LBB24_14: ## %else17
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB24_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB24_15
; AVX512F-NEXT: LBB24_16: ## %else20
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB24_17
@@ -5775,8 +5775,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX512F-NEXT: jne LBB24_29
; AVX512F-NEXT: LBB24_30: ## %else41
-; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512F-NEXT: jne LBB24_31
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: js LBB24_31
; AVX512F-NEXT: LBB24_32: ## %else44
; AVX512F-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX512F-NEXT: jne LBB24_33
@@ -5861,8 +5861,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512F-NEXT: LBB24_13: ## %cond.load16
; AVX512F-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB24_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB24_16
; AVX512F-NEXT: LBB24_15: ## %cond.load19
; AVX512F-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -5901,8 +5901,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512F-NEXT: LBB24_29: ## %cond.load40
; AVX512F-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512F-NEXT: je LBB24_32
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: jns LBB24_32
; AVX512F-NEXT: LBB24_31: ## %cond.load43
; AVX512F-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm0
; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -6029,8 +6029,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB24_13
; AVX512VLDQ-NEXT: LBB24_14: ## %else17
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB24_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB24_15
; AVX512VLDQ-NEXT: LBB24_16: ## %else20
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB24_17
@@ -6053,8 +6053,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX512VLDQ-NEXT: jne LBB24_29
; AVX512VLDQ-NEXT: LBB24_30: ## %else41
-; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512VLDQ-NEXT: jne LBB24_31
+; AVX512VLDQ-NEXT: testw %ax, %ax
+; AVX512VLDQ-NEXT: js LBB24_31
; AVX512VLDQ-NEXT: LBB24_32: ## %else44
; AVX512VLDQ-NEXT: testl $65536, %eax ## imm = 0x10000
; AVX512VLDQ-NEXT: jne LBB24_33
@@ -6139,8 +6139,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512VLDQ-NEXT: LBB24_13: ## %cond.load16
; AVX512VLDQ-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB24_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB24_16
; AVX512VLDQ-NEXT: LBB24_15: ## %cond.load19
; AVX512VLDQ-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
@@ -6179,8 +6179,8 @@ define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst
; AVX512VLDQ-NEXT: LBB24_29: ## %cond.load40
; AVX512VLDQ-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
-; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512VLDQ-NEXT: je LBB24_32
+; AVX512VLDQ-NEXT: testw %ax, %ax
+; AVX512VLDQ-NEXT: jns LBB24_32
; AVX512VLDQ-NEXT: LBB24_31: ## %cond.load43
; AVX512VLDQ-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm0
; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]
diff --git a/llvm/test/CodeGen/X86/masked_store.ll b/llvm/test/CodeGen/X86/masked_store.ll
index 5bf48ce1bfc89..f71667d49080a 100644
--- a/llvm/test/CodeGen/X86/masked_store.ll
+++ b/llvm/test/CodeGen/X86/masked_store.ll
@@ -602,8 +602,8 @@ define void @store_v16f32_v16i32(<16 x float> %x, ptr %ptr, <16 x float> %y, <16
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB6_13
; SSE2-NEXT: LBB6_14: ## %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB6_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB6_15
; SSE2-NEXT: LBB6_16: ## %else14
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB6_17
@@ -665,8 +665,8 @@ define void @store_v16f32_v16i32(<16 x float> %x, ptr %ptr, <16 x float> %y, <16
; SSE2-NEXT: movaps %xmm1, %xmm0
; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
; SSE2-NEXT: movss %xmm0, 24(%rdi)
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB6_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB6_16
; SSE2-NEXT: LBB6_15: ## %cond.store13
; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]
; SSE2-NEXT: movss %xmm1, 28(%rdi)
@@ -743,8 +743,8 @@ define void @store_v16f32_v16i32(<16 x float> %x, ptr %ptr, <16 x float> %y, <16
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne LBB6_13
; SSE4-NEXT: LBB6_14: ## %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne LBB6_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js LBB6_15
; SSE4-NEXT: LBB6_16: ## %else14
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
; SSE4-NEXT: jne LBB6_17
@@ -797,8 +797,8 @@ define void @store_v16f32_v16i32(<16 x float> %x, ptr %ptr, <16 x float> %y, <16
; SSE4-NEXT: je LBB6_14
; SSE4-NEXT: LBB6_13: ## %cond.store11
; SSE4-NEXT: extractps $2, %xmm1, 24(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je LBB6_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns LBB6_16
; SSE4-NEXT: LBB6_15: ## %cond.store13
; SSE4-NEXT: extractps $3, %xmm1, 28(%rdi)
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
@@ -1903,8 +1903,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne LBB14_13
; SSE2-NEXT: LBB14_14: ## %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne LBB14_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js LBB14_15
; SSE2-NEXT: LBB14_16: ## %else14
; SSE2-NEXT: testl $256, %eax ## imm = 0x100
; SSE2-NEXT: jne LBB14_17
@@ -1964,8 +1964,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; SSE2-NEXT: LBB14_13: ## %cond.store11
; SSE2-NEXT: pextrw $6, %xmm2, %ecx
; SSE2-NEXT: movw %cx, 12(%rdi)
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB14_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB14_16
; SSE2-NEXT: LBB14_15: ## %cond.store13
; SSE2-NEXT: pextrw $7, %xmm2, %ecx
; SSE2-NEXT: movw %cx, 14(%rdi)
@@ -2039,8 +2039,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne LBB14_13
; SSE4-NEXT: LBB14_14: ## %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne LBB14_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js LBB14_15
; SSE4-NEXT: LBB14_16: ## %else14
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
; SSE4-NEXT: jne LBB14_17
@@ -2093,8 +2093,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; SSE4-NEXT: je LBB14_14
; SSE4-NEXT: LBB14_13: ## %cond.store11
; SSE4-NEXT: pextrw $6, %xmm2, 12(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je LBB14_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns LBB14_16
; SSE4-NEXT: LBB14_15: ## %cond.store13
; SSE4-NEXT: pextrw $7, %xmm2, 14(%rdi)
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
@@ -2160,8 +2160,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB14_13
; AVX1-NEXT: LBB14_14: ## %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB14_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB14_16
; AVX1-NEXT: LBB14_15: ## %cond.store13
; AVX1-NEXT: vpextrw $7, %xmm1, 14(%rdi)
; AVX1-NEXT: LBB14_16: ## %else14
@@ -2218,8 +2218,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX1-NEXT: je LBB14_14
; AVX1-NEXT: LBB14_13: ## %cond.store11
; AVX1-NEXT: vpextrw $6, %xmm1, 12(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB14_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB14_15
; AVX1-NEXT: jmp LBB14_16
; AVX1-NEXT: LBB14_17: ## %cond.store15
; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2282,8 +2282,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB14_13
; AVX2-NEXT: LBB14_14: ## %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB14_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB14_16
; AVX2-NEXT: LBB14_15: ## %cond.store13
; AVX2-NEXT: vpextrw $7, %xmm1, 14(%rdi)
; AVX2-NEXT: LBB14_16: ## %else14
@@ -2340,8 +2340,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX2-NEXT: je LBB14_14
; AVX2-NEXT: LBB14_13: ## %cond.store11
; AVX2-NEXT: vpextrw $6, %xmm1, 12(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB14_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB14_15
; AVX2-NEXT: jmp LBB14_16
; AVX2-NEXT: LBB14_17: ## %cond.store15
; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2404,8 +2404,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB14_13
; AVX512F-NEXT: LBB14_14: ## %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB14_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB14_16
; AVX512F-NEXT: LBB14_15: ## %cond.store13
; AVX512F-NEXT: vpextrw $7, %xmm1, 14(%rdi)
; AVX512F-NEXT: LBB14_16: ## %else14
@@ -2462,8 +2462,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX512F-NEXT: je LBB14_14
; AVX512F-NEXT: LBB14_13: ## %cond.store11
; AVX512F-NEXT: vpextrw $6, %xmm1, 12(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB14_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB14_15
; AVX512F-NEXT: jmp LBB14_16
; AVX512F-NEXT: LBB14_17: ## %cond.store15
; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2526,8 +2526,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB14_13
; AVX512VLDQ-NEXT: LBB14_14: ## %else12
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB14_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB14_16
; AVX512VLDQ-NEXT: LBB14_15: ## %cond.store13
; AVX512VLDQ-NEXT: vpextrw $7, %xmm1, 14(%rdi)
; AVX512VLDQ-NEXT: LBB14_16: ## %else14
@@ -2584,8 +2584,8 @@ define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val
; AVX512VLDQ-NEXT: je LBB14_14
; AVX512VLDQ-NEXT: LBB14_13: ## %cond.store11
; AVX512VLDQ-NEXT: vpextrw $6, %xmm1, 12(%rdi)
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB14_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB14_15
; AVX512VLDQ-NEXT: jmp LBB14_16
; AVX512VLDQ-NEXT: LBB14_17: ## %cond.store15
; AVX512VLDQ-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2682,8 +2682,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; SSE2-NEXT: ## %bb.13: ## %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: LBB15_14: ## %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB15_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB15_16
; SSE2-NEXT: ## %bb.15: ## %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: LBB15_16: ## %else14
@@ -2777,8 +2777,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne LBB15_13
; SSE4-NEXT: LBB15_14: ## %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne LBB15_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js LBB15_15
; SSE4-NEXT: LBB15_16: ## %else14
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
; SSE4-NEXT: jne LBB15_17
@@ -2831,8 +2831,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; SSE4-NEXT: je LBB15_14
; SSE4-NEXT: LBB15_13: ## %cond.store11
; SSE4-NEXT: pextrb $6, %xmm1, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je LBB15_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns LBB15_16
; SSE4-NEXT: LBB15_15: ## %cond.store13
; SSE4-NEXT: pextrb $7, %xmm1, 7(%rdi)
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
@@ -2895,8 +2895,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX1OR2-NEXT: testb $64, %al
; AVX1OR2-NEXT: jne LBB15_13
; AVX1OR2-NEXT: LBB15_14: ## %else12
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: jne LBB15_15
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: js LBB15_15
; AVX1OR2-NEXT: LBB15_16: ## %else14
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
; AVX1OR2-NEXT: jne LBB15_17
@@ -2949,8 +2949,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX1OR2-NEXT: je LBB15_14
; AVX1OR2-NEXT: LBB15_13: ## %cond.store11
; AVX1OR2-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX1OR2-NEXT: testb $-128, %al
-; AVX1OR2-NEXT: je LBB15_16
+; AVX1OR2-NEXT: testb %al, %al
+; AVX1OR2-NEXT: jns LBB15_16
; AVX1OR2-NEXT: LBB15_15: ## %cond.store13
; AVX1OR2-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
@@ -3013,8 +3013,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB15_13
; AVX512F-NEXT: LBB15_14: ## %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB15_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB15_15
; AVX512F-NEXT: LBB15_16: ## %else14
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB15_17
@@ -3067,8 +3067,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX512F-NEXT: je LBB15_14
; AVX512F-NEXT: LBB15_13: ## %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB15_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB15_16
; AVX512F-NEXT: LBB15_15: ## %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
@@ -3131,8 +3131,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB15_13
; AVX512VLDQ-NEXT: LBB15_14: ## %else12
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB15_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB15_15
; AVX512VLDQ-NEXT: LBB15_16: ## %else14
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB15_17
@@ -3185,8 +3185,8 @@ define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
; AVX512VLDQ-NEXT: je LBB15_14
; AVX512VLDQ-NEXT: LBB15_13: ## %cond.store11
; AVX512VLDQ-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB15_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB15_16
; AVX512VLDQ-NEXT: LBB15_15: ## %cond.store13
; AVX512VLDQ-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
@@ -3283,8 +3283,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE2-NEXT: ## %bb.13: ## %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: LBB16_14: ## %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je LBB16_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns LBB16_16
; SSE2-NEXT: ## %bb.15: ## %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: LBB16_16: ## %else14
@@ -3327,8 +3327,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE2-NEXT: ## %bb.29: ## %cond.store27
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: LBB16_30: ## %else28
-; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE2-NEXT: je LBB16_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns LBB16_32
; SSE2-NEXT: ## %bb.31: ## %cond.store29
; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: LBB16_32: ## %else30
@@ -3479,8 +3479,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne LBB16_13
; SSE4-NEXT: LBB16_14: ## %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne LBB16_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js LBB16_15
; SSE4-NEXT: LBB16_16: ## %else14
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
; SSE4-NEXT: jne LBB16_17
@@ -3503,8 +3503,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
; SSE4-NEXT: jne LBB16_29
; SSE4-NEXT: LBB16_30: ## %else28
-; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE4-NEXT: jne LBB16_31
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: js LBB16_31
; SSE4-NEXT: LBB16_32: ## %else30
; SSE4-NEXT: testl $65536, %eax ## imm = 0x10000
; SSE4-NEXT: jne LBB16_33
@@ -3581,8 +3581,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE4-NEXT: je LBB16_14
; SSE4-NEXT: LBB16_13: ## %cond.store11
; SSE4-NEXT: pextrb $6, %xmm2, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je LBB16_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns LBB16_16
; SSE4-NEXT: LBB16_15: ## %cond.store13
; SSE4-NEXT: pextrb $7, %xmm2, 7(%rdi)
; SSE4-NEXT: testl $256, %eax ## imm = 0x100
@@ -3613,8 +3613,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; SSE4-NEXT: je LBB16_30
; SSE4-NEXT: LBB16_29: ## %cond.store27
; SSE4-NEXT: pextrb $14, %xmm2, 14(%rdi)
-; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
-; SSE4-NEXT: je LBB16_32
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: jns LBB16_32
; SSE4-NEXT: LBB16_31: ## %cond.store29
; SSE4-NEXT: pextrb $15, %xmm2, 15(%rdi)
; SSE4-NEXT: testl $65536, %eax ## imm = 0x10000
@@ -3714,8 +3714,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne LBB16_13
; AVX1-NEXT: LBB16_14: ## %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne LBB16_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js LBB16_15
; AVX1-NEXT: LBB16_16: ## %else14
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
; AVX1-NEXT: jne LBB16_17
@@ -3738,8 +3738,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX1-NEXT: jne LBB16_29
; AVX1-NEXT: LBB16_30: ## %else28
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: je LBB16_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns LBB16_32
; AVX1-NEXT: LBB16_31: ## %cond.store29
; AVX1-NEXT: vpextrb $15, %xmm1, 15(%rdi)
; AVX1-NEXT: LBB16_32: ## %else30
@@ -3820,8 +3820,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX1-NEXT: je LBB16_14
; AVX1-NEXT: LBB16_13: ## %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je LBB16_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns LBB16_16
; AVX1-NEXT: LBB16_15: ## %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX1-NEXT: testl $256, %eax ## imm = 0x100
@@ -3852,8 +3852,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX1-NEXT: je LBB16_30
; AVX1-NEXT: LBB16_29: ## %cond.store27
; AVX1-NEXT: vpextrb $14, %xmm1, 14(%rdi)
-; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX1-NEXT: jne LBB16_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js LBB16_31
; AVX1-NEXT: jmp LBB16_32
; AVX1-NEXT: LBB16_33: ## %cond.store31
; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -3946,8 +3946,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne LBB16_13
; AVX2-NEXT: LBB16_14: ## %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne LBB16_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js LBB16_15
; AVX2-NEXT: LBB16_16: ## %else14
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
; AVX2-NEXT: jne LBB16_17
@@ -3970,8 +3970,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX2-NEXT: jne LBB16_29
; AVX2-NEXT: LBB16_30: ## %else28
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: je LBB16_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns LBB16_32
; AVX2-NEXT: LBB16_31: ## %cond.store29
; AVX2-NEXT: vpextrb $15, %xmm1, 15(%rdi)
; AVX2-NEXT: LBB16_32: ## %else30
@@ -4052,8 +4052,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX2-NEXT: je LBB16_14
; AVX2-NEXT: LBB16_13: ## %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je LBB16_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns LBB16_16
; AVX2-NEXT: LBB16_15: ## %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX2-NEXT: testl $256, %eax ## imm = 0x100
@@ -4084,8 +4084,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX2-NEXT: je LBB16_30
; AVX2-NEXT: LBB16_29: ## %cond.store27
; AVX2-NEXT: vpextrb $14, %xmm1, 14(%rdi)
-; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX2-NEXT: jne LBB16_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js LBB16_31
; AVX2-NEXT: jmp LBB16_32
; AVX2-NEXT: LBB16_33: ## %cond.store31
; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -4178,8 +4178,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne LBB16_13
; AVX512F-NEXT: LBB16_14: ## %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne LBB16_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js LBB16_15
; AVX512F-NEXT: LBB16_16: ## %else14
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
; AVX512F-NEXT: jne LBB16_17
@@ -4202,8 +4202,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX512F-NEXT: jne LBB16_29
; AVX512F-NEXT: LBB16_30: ## %else28
-; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512F-NEXT: je LBB16_32
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: jns LBB16_32
; AVX512F-NEXT: LBB16_31: ## %cond.store29
; AVX512F-NEXT: vpextrb $15, %xmm1, 15(%rdi)
; AVX512F-NEXT: LBB16_32: ## %else30
@@ -4284,8 +4284,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512F-NEXT: je LBB16_14
; AVX512F-NEXT: LBB16_13: ## %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je LBB16_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns LBB16_16
; AVX512F-NEXT: LBB16_15: ## %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
@@ -4316,8 +4316,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512F-NEXT: je LBB16_30
; AVX512F-NEXT: LBB16_29: ## %cond.store27
; AVX512F-NEXT: vpextrb $14, %xmm1, 14(%rdi)
-; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512F-NEXT: jne LBB16_31
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: js LBB16_31
; AVX512F-NEXT: jmp LBB16_32
; AVX512F-NEXT: LBB16_33: ## %cond.store31
; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -4410,8 +4410,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512VLDQ-NEXT: testb $64, %al
; AVX512VLDQ-NEXT: jne LBB16_13
; AVX512VLDQ-NEXT: LBB16_14: ## %else12
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: jne LBB16_15
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: js LBB16_15
; AVX512VLDQ-NEXT: LBB16_16: ## %else14
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
; AVX512VLDQ-NEXT: jne LBB16_17
@@ -4434,8 +4434,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
; AVX512VLDQ-NEXT: jne LBB16_29
; AVX512VLDQ-NEXT: LBB16_30: ## %else28
-; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512VLDQ-NEXT: je LBB16_32
+; AVX512VLDQ-NEXT: testw %ax, %ax
+; AVX512VLDQ-NEXT: jns LBB16_32
; AVX512VLDQ-NEXT: LBB16_31: ## %cond.store29
; AVX512VLDQ-NEXT: vpextrb $15, %xmm1, 15(%rdi)
; AVX512VLDQ-NEXT: LBB16_32: ## %else30
@@ -4516,8 +4516,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512VLDQ-NEXT: je LBB16_14
; AVX512VLDQ-NEXT: LBB16_13: ## %cond.store11
; AVX512VLDQ-NEXT: vpextrb $6, %xmm1, 6(%rdi)
-; AVX512VLDQ-NEXT: testb $-128, %al
-; AVX512VLDQ-NEXT: je LBB16_16
+; AVX512VLDQ-NEXT: testb %al, %al
+; AVX512VLDQ-NEXT: jns LBB16_16
; AVX512VLDQ-NEXT: LBB16_15: ## %cond.store13
; AVX512VLDQ-NEXT: vpextrb $7, %xmm1, 7(%rdi)
; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
@@ -4548,8 +4548,8 @@ define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
; AVX512VLDQ-NEXT: je LBB16_30
; AVX512VLDQ-NEXT: LBB16_29: ## %cond.store27
; AVX512VLDQ-NEXT: vpextrb $14, %xmm1, 14(%rdi)
-; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
-; AVX512VLDQ-NEXT: jne LBB16_31
+; AVX512VLDQ-NEXT: testw %ax, %ax
+; AVX512VLDQ-NEXT: js LBB16_31
; AVX512VLDQ-NEXT: jmp LBB16_32
; AVX512VLDQ-NEXT: LBB16_33: ## %cond.store31
; AVX512VLDQ-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -5680,8 +5680,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE2-NEXT: testb $64, %dil
; SSE2-NEXT: jne LBB31_13
; SSE2-NEXT: LBB31_14: ## %else12
-; SSE2-NEXT: testb $-128, %dil
-; SSE2-NEXT: jne LBB31_15
+; SSE2-NEXT: testb %dil, %dil
+; SSE2-NEXT: js LBB31_15
; SSE2-NEXT: LBB31_16: ## %else14
; SSE2-NEXT: testl $256, %edi ## imm = 0x100
; SSE2-NEXT: jne LBB31_17
@@ -5704,8 +5704,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE2-NEXT: testl $16384, %edi ## imm = 0x4000
; SSE2-NEXT: jne LBB31_29
; SSE2-NEXT: LBB31_30: ## %else28
-; SSE2-NEXT: testl $32768, %edi ## imm = 0x8000
-; SSE2-NEXT: jne LBB31_31
+; SSE2-NEXT: testw %di, %di
+; SSE2-NEXT: js LBB31_31
; SSE2-NEXT: LBB31_32: ## %else30
; SSE2-NEXT: testl $65536, %edi ## imm = 0x10000
; SSE2-NEXT: jne LBB31_33
@@ -5769,8 +5769,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]
; SSE2-NEXT: movd %xmm5, %esi
; SSE2-NEXT: movl %esi, 24(%rdx)
-; SSE2-NEXT: testb $-128, %dil
-; SSE2-NEXT: je LBB31_16
+; SSE2-NEXT: testb %dil, %dil
+; SSE2-NEXT: jns LBB31_16
; SSE2-NEXT: LBB31_15: ## %cond.store13
; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[3,3,3,3]
; SSE2-NEXT: movd %xmm4, %esi
@@ -5813,8 +5813,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[2,3,2,3]
; SSE2-NEXT: movd %xmm3, %esi
; SSE2-NEXT: movl %esi, 56(%rdx)
-; SSE2-NEXT: testl $32768, %edi ## imm = 0x8000
-; SSE2-NEXT: je LBB31_32
+; SSE2-NEXT: testw %di, %di
+; SSE2-NEXT: jns LBB31_32
; SSE2-NEXT: LBB31_31: ## %cond.store29
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
; SSE2-NEXT: movd %xmm2, %esi
@@ -5970,8 +5970,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE4-NEXT: testb $64, %dil
; SSE4-NEXT: jne LBB31_13
; SSE4-NEXT: LBB31_14: ## %else12
-; SSE4-NEXT: testb $-128, %dil
-; SSE4-NEXT: jne LBB31_15
+; SSE4-NEXT: testb %dil, %dil
+; SSE4-NEXT: js LBB31_15
; SSE4-NEXT: LBB31_16: ## %else14
; SSE4-NEXT: testl $256, %edi ## imm = 0x100
; SSE4-NEXT: jne LBB31_17
@@ -5994,8 +5994,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE4-NEXT: testl $16384, %edi ## imm = 0x4000
; SSE4-NEXT: jne LBB31_29
; SSE4-NEXT: LBB31_30: ## %else28
-; SSE4-NEXT: testl $32768, %edi ## imm = 0x8000
-; SSE4-NEXT: jne LBB31_31
+; SSE4-NEXT: testw %di, %di
+; SSE4-NEXT: js LBB31_31
; SSE4-NEXT: LBB31_32: ## %else30
; SSE4-NEXT: testl $65536, %edi ## imm = 0x10000
; SSE4-NEXT: jne LBB31_33
@@ -6058,8 +6058,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE4-NEXT: je LBB31_14
; SSE4-NEXT: LBB31_13: ## %cond.store11
; SSE4-NEXT: movl %r11d, 24(%rdx)
-; SSE4-NEXT: testb $-128, %dil
-; SSE4-NEXT: je LBB31_16
+; SSE4-NEXT: testb %dil, %dil
+; SSE4-NEXT: jns LBB31_16
; SSE4-NEXT: LBB31_15: ## %cond.store13
; SSE4-NEXT: movl %r10d, 28(%rdx)
; SSE4-NEXT: testl $256, %edi ## imm = 0x100
@@ -6092,8 +6092,8 @@ define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigge
; SSE4-NEXT: LBB31_29: ## %cond.store27
; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
; SSE4-NEXT: movl %eax, 56(%rdx)
-; SSE4-NEXT: testl $32768, %edi ## imm = 0x8000
-; SSE4-NEXT: je LBB31_32
+; SSE4-NEXT: testw %di, %di
+; SSE4-NEXT: jns LBB31_32
; SSE4-NEXT: LBB31_31: ## %cond.store29
; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
; SSE4-NEXT: movl %eax, 60(%rdx)
diff --git a/llvm/test/CodeGen/X86/masked_store_trunc.ll b/llvm/test/CodeGen/X86/masked_store_trunc.ll
index 5927e90b0dd5f..cb9aefb3f5321 100644
--- a/llvm/test/CodeGen/X86/masked_store_trunc.ll
+++ b/llvm/test/CodeGen/X86/masked_store_trunc.ll
@@ -1989,8 +1989,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: .LBB9_14: # %else12
; SSE2-NEXT: psrad $16, %xmm3
; SSE2-NEXT: psrad $16, %xmm2
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB9_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB9_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: movw %cx, 14(%rdi)
@@ -2131,8 +2131,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: .LBB9_14: # %else12
; SSE4-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0],xmm8[1],xmm3[2],xmm8[3],xmm3[4],xmm8[5],xmm3[6],xmm8[7]
; SSE4-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm8[1],xmm2[2],xmm8[3],xmm2[4],xmm8[5],xmm2[6],xmm8[7]
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB9_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB9_16
; SSE4-NEXT: # %bb.15: # %cond.store13
; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)
; SSE4-NEXT: .LBB9_16: # %else14
@@ -2266,8 +2266,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB9_13
; AVX1-NEXT: .LBB9_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB9_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB9_16
; AVX1-NEXT: .LBB9_15: # %cond.store13
; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX1-NEXT: .LBB9_16: # %else14
@@ -2324,8 +2324,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB9_14
; AVX1-NEXT: .LBB9_13: # %cond.store11
; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB9_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB9_15
; AVX1-NEXT: jmp .LBB9_16
; AVX1-NEXT: .LBB9_17: # %cond.store15
; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2398,8 +2398,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB9_13
; AVX2-NEXT: .LBB9_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB9_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB9_16
; AVX2-NEXT: .LBB9_15: # %cond.store13
; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX2-NEXT: .LBB9_16: # %else14
@@ -2456,8 +2456,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB9_14
; AVX2-NEXT: .LBB9_13: # %cond.store11
; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB9_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB9_15
; AVX2-NEXT: jmp .LBB9_16
; AVX2-NEXT: .LBB9_17: # %cond.store15
; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2518,8 +2518,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB9_13
; AVX512F-NEXT: .LBB9_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB9_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB9_16
; AVX512F-NEXT: .LBB9_15: # %cond.store13
; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX512F-NEXT: .LBB9_16: # %else14
@@ -2576,8 +2576,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB9_14
; AVX512F-NEXT: .LBB9_13: # %cond.store11
; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB9_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB9_15
; AVX512F-NEXT: jmp .LBB9_16
; AVX512F-NEXT: .LBB9_17: # %cond.store15
; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2689,8 +2689,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB10_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB10_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB10_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB10_16: # %else14
@@ -2803,8 +2803,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB10_13
; SSE4-NEXT: .LBB10_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB10_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB10_15
; SSE4-NEXT: .LBB10_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB10_17
@@ -2857,8 +2857,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: je .LBB10_14
; SSE4-NEXT: .LBB10_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB10_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB10_16
; SSE4-NEXT: .LBB10_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -2942,8 +2942,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB10_13
; AVX1-NEXT: .LBB10_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB10_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB10_15
; AVX1-NEXT: .LBB10_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB10_17
@@ -2997,8 +2997,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB10_14
; AVX1-NEXT: .LBB10_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB10_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB10_16
; AVX1-NEXT: .LBB10_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -3077,8 +3077,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB10_13
; AVX2-NEXT: .LBB10_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB10_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB10_15
; AVX2-NEXT: .LBB10_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB10_17
@@ -3132,8 +3132,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB10_14
; AVX2-NEXT: .LBB10_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB10_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB10_16
; AVX2-NEXT: .LBB10_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -3197,8 +3197,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB10_13
; AVX512F-NEXT: .LBB10_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB10_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB10_15
; AVX512F-NEXT: .LBB10_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB10_17
@@ -3252,8 +3252,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB10_14
; AVX512F-NEXT: .LBB10_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB10_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB10_16
; AVX512F-NEXT: .LBB10_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -4468,8 +4468,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB15_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB15_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB15_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB15_16: # %else14
@@ -4515,8 +4515,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: .LBB15_30: # %else28
; SSE2-NEXT: packuswb %xmm3, %xmm2
-; SSE2-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE2-NEXT: je .LBB15_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns .LBB15_32
; SSE2-NEXT: # %bb.31: # %cond.store29
; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: .LBB15_32: # %else30
@@ -4673,8 +4673,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB15_13
; SSE4-NEXT: .LBB15_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB15_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB15_15
; SSE4-NEXT: .LBB15_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB15_17
@@ -4701,8 +4701,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: .LBB15_30: # %else28
; SSE4-NEXT: pand %xmm6, %xmm3
; SSE4-NEXT: pand %xmm6, %xmm2
-; SSE4-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE4-NEXT: je .LBB15_32
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: jns .LBB15_32
; SSE4-NEXT: # %bb.31: # %cond.store29
; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)
; SSE4-NEXT: .LBB15_32: # %else30
@@ -4782,8 +4782,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: je .LBB15_14
; SSE4-NEXT: .LBB15_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB15_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB15_16
; SSE4-NEXT: .LBB15_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -4918,8 +4918,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB15_13
; AVX1-NEXT: .LBB15_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB15_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB15_15
; AVX1-NEXT: .LBB15_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB15_17
@@ -4942,8 +4942,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testl $16384, %eax # imm = 0x4000
; AVX1-NEXT: jne .LBB15_29
; AVX1-NEXT: .LBB15_30: # %else28
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: je .LBB15_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns .LBB15_32
; AVX1-NEXT: .LBB15_31: # %cond.store29
; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX1-NEXT: .LBB15_32: # %else30
@@ -5024,8 +5024,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_14
; AVX1-NEXT: .LBB15_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB15_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB15_16
; AVX1-NEXT: .LBB15_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -5056,8 +5056,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_30
; AVX1-NEXT: .LBB15_29: # %cond.store27
; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: jne .LBB15_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js .LBB15_31
; AVX1-NEXT: jmp .LBB15_32
; AVX1-NEXT: .LBB15_33: # %cond.store31
; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -5156,8 +5156,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB15_13
; AVX2-NEXT: .LBB15_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB15_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB15_15
; AVX2-NEXT: .LBB15_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB15_17
@@ -5180,8 +5180,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testl $16384, %eax # imm = 0x4000
; AVX2-NEXT: jne .LBB15_29
; AVX2-NEXT: .LBB15_30: # %else28
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: je .LBB15_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns .LBB15_32
; AVX2-NEXT: .LBB15_31: # %cond.store29
; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX2-NEXT: .LBB15_32: # %else30
@@ -5262,8 +5262,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_14
; AVX2-NEXT: .LBB15_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB15_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB15_16
; AVX2-NEXT: .LBB15_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -5294,8 +5294,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_30
; AVX2-NEXT: .LBB15_29: # %cond.store27
; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: jne .LBB15_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js .LBB15_31
; AVX2-NEXT: jmp .LBB15_32
; AVX2-NEXT: .LBB15_33: # %cond.store31
; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -5395,8 +5395,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB15_13
; AVX512F-NEXT: .LBB15_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB15_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB15_15
; AVX512F-NEXT: .LBB15_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB15_17
@@ -5419,8 +5419,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testl $16384, %eax # imm = 0x4000
; AVX512F-NEXT: jne .LBB15_29
; AVX512F-NEXT: .LBB15_30: # %else28
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: je .LBB15_32
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: jns .LBB15_32
; AVX512F-NEXT: .LBB15_31: # %cond.store29
; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX512F-NEXT: .LBB15_32: # %else30
@@ -5501,8 +5501,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_14
; AVX512F-NEXT: .LBB15_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB15_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB15_16
; AVX512F-NEXT: .LBB15_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -5533,8 +5533,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_30
; AVX512F-NEXT: .LBB15_29: # %cond.store27
; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: jne .LBB15_31
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: js .LBB15_31
; AVX512F-NEXT: jmp .LBB15_32
; AVX512F-NEXT: .LBB15_33: # %cond.store31
; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -5665,8 +5665,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB16_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB16_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB16_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB16_16: # %else14
@@ -5765,8 +5765,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB16_13
; SSE4-NEXT: .LBB16_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB16_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB16_15
; SSE4-NEXT: .LBB16_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB16_17
@@ -5819,8 +5819,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: je .LBB16_14
; SSE4-NEXT: .LBB16_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB16_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB16_16
; SSE4-NEXT: .LBB16_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -5887,8 +5887,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB16_13
; AVX1-NEXT: .LBB16_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB16_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB16_15
; AVX1-NEXT: .LBB16_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB16_17
@@ -5942,8 +5942,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: je .LBB16_14
; AVX1-NEXT: .LBB16_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB16_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB16_16
; AVX1-NEXT: .LBB16_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -6011,8 +6011,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB16_13
; AVX2-NEXT: .LBB16_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB16_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB16_15
; AVX2-NEXT: .LBB16_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB16_17
@@ -6066,8 +6066,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: je .LBB16_14
; AVX2-NEXT: .LBB16_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB16_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB16_16
; AVX2-NEXT: .LBB16_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -6134,8 +6134,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB16_13
; AVX512F-NEXT: .LBB16_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB16_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB16_15
; AVX512F-NEXT: .LBB16_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB16_17
@@ -6189,8 +6189,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: je .LBB16_14
; AVX512F-NEXT: .LBB16_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB16_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB16_16
; AVX512F-NEXT: .LBB16_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
diff --git a/llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll b/llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll
index e0358dcc75747..b7eceecefe636 100644
--- a/llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll
+++ b/llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll
@@ -2876,8 +2876,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: testb $64, %al
; SSE2-NEXT: jne .LBB9_13
; SSE2-NEXT: .LBB9_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB9_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB9_16
; SSE2-NEXT: .LBB9_15: # %cond.store13
; SSE2-NEXT: pextrw $7, %xmm0, %ecx
; SSE2-NEXT: movw %cx, 14(%rdi)
@@ -2941,8 +2941,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: .LBB9_13: # %cond.store11
; SSE2-NEXT: pextrw $6, %xmm0, %ecx
; SSE2-NEXT: movw %cx, 12(%rdi)
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: jne .LBB9_15
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: js .LBB9_15
; SSE2-NEXT: jmp .LBB9_16
; SSE2-NEXT: .LBB9_17: # %cond.store15
; SSE2-NEXT: movd %xmm2, %ecx
@@ -3022,8 +3022,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB9_13
; SSE4-NEXT: .LBB9_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB9_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB9_16
; SSE4-NEXT: .LBB9_15: # %cond.store13
; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)
; SSE4-NEXT: .LBB9_16: # %else14
@@ -3079,8 +3079,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: je .LBB9_14
; SSE4-NEXT: .LBB9_13: # %cond.store11
; SSE4-NEXT: pextrw $6, %xmm0, 12(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB9_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB9_15
; SSE4-NEXT: jmp .LBB9_16
; SSE4-NEXT: .LBB9_17: # %cond.store15
; SSE4-NEXT: pextrw $0, %xmm2, 16(%rdi)
@@ -3158,8 +3158,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB9_13
; AVX1-NEXT: .LBB9_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB9_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB9_16
; AVX1-NEXT: .LBB9_15: # %cond.store13
; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX1-NEXT: .LBB9_16: # %else14
@@ -3216,8 +3216,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB9_14
; AVX1-NEXT: .LBB9_13: # %cond.store11
; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB9_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB9_15
; AVX1-NEXT: jmp .LBB9_16
; AVX1-NEXT: .LBB9_17: # %cond.store15
; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -3288,8 +3288,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB9_13
; AVX2-NEXT: .LBB9_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB9_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB9_16
; AVX2-NEXT: .LBB9_15: # %cond.store13
; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX2-NEXT: .LBB9_16: # %else14
@@ -3346,8 +3346,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB9_14
; AVX2-NEXT: .LBB9_13: # %cond.store11
; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB9_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB9_15
; AVX2-NEXT: jmp .LBB9_16
; AVX2-NEXT: .LBB9_17: # %cond.store15
; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -3408,8 +3408,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB9_13
; AVX512F-NEXT: .LBB9_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB9_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB9_16
; AVX512F-NEXT: .LBB9_15: # %cond.store13
; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX512F-NEXT: .LBB9_16: # %else14
@@ -3466,8 +3466,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB9_14
; AVX512F-NEXT: .LBB9_13: # %cond.store11
; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB9_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB9_15
; AVX512F-NEXT: jmp .LBB9_16
; AVX512F-NEXT: .LBB9_17: # %cond.store15
; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -3582,8 +3582,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB10_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB10_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB10_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB10_16: # %else14
@@ -3691,8 +3691,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB10_13
; SSE4-NEXT: .LBB10_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB10_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB10_15
; SSE4-NEXT: .LBB10_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB10_17
@@ -3745,8 +3745,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: je .LBB10_14
; SSE4-NEXT: .LBB10_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB10_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB10_16
; SSE4-NEXT: .LBB10_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -3827,8 +3827,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB10_13
; AVX1-NEXT: .LBB10_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB10_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB10_15
; AVX1-NEXT: .LBB10_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB10_17
@@ -3882,8 +3882,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB10_14
; AVX1-NEXT: .LBB10_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB10_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB10_16
; AVX1-NEXT: .LBB10_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -3959,8 +3959,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB10_13
; AVX2-NEXT: .LBB10_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB10_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB10_15
; AVX2-NEXT: .LBB10_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB10_17
@@ -4014,8 +4014,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB10_14
; AVX2-NEXT: .LBB10_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB10_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB10_16
; AVX2-NEXT: .LBB10_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -4079,8 +4079,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB10_13
; AVX512F-NEXT: .LBB10_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB10_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB10_15
; AVX512F-NEXT: .LBB10_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB10_17
@@ -4134,8 +4134,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB10_14
; AVX512F-NEXT: .LBB10_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB10_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB10_16
; AVX512F-NEXT: .LBB10_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -5424,8 +5424,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB15_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB15_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB15_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB15_16: # %else14
@@ -5469,8 +5469,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: .LBB15_30: # %else28
; SSE2-NEXT: packsswb %xmm3, %xmm2
-; SSE2-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE2-NEXT: je .LBB15_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns .LBB15_32
; SSE2-NEXT: # %bb.31: # %cond.store29
; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: .LBB15_32: # %else30
@@ -5624,8 +5624,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB15_13
; SSE4-NEXT: .LBB15_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB15_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB15_15
; SSE4-NEXT: .LBB15_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB15_17
@@ -5648,8 +5648,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: testl $16384, %eax # imm = 0x4000
; SSE4-NEXT: jne .LBB15_29
; SSE4-NEXT: .LBB15_30: # %else28
-; SSE4-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE4-NEXT: je .LBB15_32
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: jns .LBB15_32
; SSE4-NEXT: .LBB15_31: # %cond.store29
; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)
; SSE4-NEXT: .LBB15_32: # %else30
@@ -5729,8 +5729,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: je .LBB15_14
; SSE4-NEXT: .LBB15_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB15_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB15_16
; SSE4-NEXT: .LBB15_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -5761,8 +5761,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: je .LBB15_30
; SSE4-NEXT: .LBB15_29: # %cond.store27
; SSE4-NEXT: pextrb $14, %xmm0, 14(%rdi)
-; SSE4-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE4-NEXT: jne .LBB15_31
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: js .LBB15_31
; SSE4-NEXT: jmp .LBB15_32
; SSE4-NEXT: .LBB15_33: # %cond.store31
; SSE4-NEXT: pextrb $0, %xmm2, 16(%rdi)
@@ -5866,8 +5866,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB15_13
; AVX1-NEXT: .LBB15_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB15_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB15_15
; AVX1-NEXT: .LBB15_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB15_17
@@ -5890,8 +5890,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testl $16384, %eax # imm = 0x4000
; AVX1-NEXT: jne .LBB15_29
; AVX1-NEXT: .LBB15_30: # %else28
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: je .LBB15_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns .LBB15_32
; AVX1-NEXT: .LBB15_31: # %cond.store29
; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX1-NEXT: .LBB15_32: # %else30
@@ -5972,8 +5972,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_14
; AVX1-NEXT: .LBB15_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB15_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB15_16
; AVX1-NEXT: .LBB15_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -6004,8 +6004,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_30
; AVX1-NEXT: .LBB15_29: # %cond.store27
; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: jne .LBB15_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js .LBB15_31
; AVX1-NEXT: jmp .LBB15_32
; AVX1-NEXT: .LBB15_33: # %cond.store31
; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -6101,8 +6101,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB15_13
; AVX2-NEXT: .LBB15_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB15_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB15_15
; AVX2-NEXT: .LBB15_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB15_17
@@ -6125,8 +6125,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testl $16384, %eax # imm = 0x4000
; AVX2-NEXT: jne .LBB15_29
; AVX2-NEXT: .LBB15_30: # %else28
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: je .LBB15_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns .LBB15_32
; AVX2-NEXT: .LBB15_31: # %cond.store29
; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX2-NEXT: .LBB15_32: # %else30
@@ -6207,8 +6207,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_14
; AVX2-NEXT: .LBB15_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB15_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB15_16
; AVX2-NEXT: .LBB15_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -6239,8 +6239,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_30
; AVX2-NEXT: .LBB15_29: # %cond.store27
; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: jne .LBB15_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js .LBB15_31
; AVX2-NEXT: jmp .LBB15_32
; AVX2-NEXT: .LBB15_33: # %cond.store31
; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -6337,8 +6337,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB15_13
; AVX512F-NEXT: .LBB15_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB15_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB15_15
; AVX512F-NEXT: .LBB15_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB15_17
@@ -6361,8 +6361,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testl $16384, %eax # imm = 0x4000
; AVX512F-NEXT: jne .LBB15_29
; AVX512F-NEXT: .LBB15_30: # %else28
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: je .LBB15_32
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: jns .LBB15_32
; AVX512F-NEXT: .LBB15_31: # %cond.store29
; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX512F-NEXT: .LBB15_32: # %else30
@@ -6443,8 +6443,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_14
; AVX512F-NEXT: .LBB15_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB15_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB15_16
; AVX512F-NEXT: .LBB15_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -6475,8 +6475,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_30
; AVX512F-NEXT: .LBB15_29: # %cond.store27
; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: jne .LBB15_31
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: js .LBB15_31
; AVX512F-NEXT: jmp .LBB15_32
; AVX512F-NEXT: .LBB15_33: # %cond.store31
; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -6612,8 +6612,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB16_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB16_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB16_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB16_16: # %else14
@@ -6709,8 +6709,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB16_13
; SSE4-NEXT: .LBB16_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB16_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB16_15
; SSE4-NEXT: .LBB16_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB16_17
@@ -6763,8 +6763,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: je .LBB16_14
; SSE4-NEXT: .LBB16_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB16_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB16_16
; SSE4-NEXT: .LBB16_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -6830,8 +6830,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB16_13
; AVX1-NEXT: .LBB16_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB16_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB16_15
; AVX1-NEXT: .LBB16_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB16_17
@@ -6885,8 +6885,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: je .LBB16_14
; AVX1-NEXT: .LBB16_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB16_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB16_16
; AVX1-NEXT: .LBB16_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -6953,8 +6953,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB16_13
; AVX2-NEXT: .LBB16_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB16_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB16_15
; AVX2-NEXT: .LBB16_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB16_17
@@ -7008,8 +7008,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: je .LBB16_14
; AVX2-NEXT: .LBB16_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB16_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB16_16
; AVX2-NEXT: .LBB16_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -7076,8 +7076,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB16_13
; AVX512F-NEXT: .LBB16_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB16_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB16_15
; AVX512F-NEXT: .LBB16_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB16_17
@@ -7131,8 +7131,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: je .LBB16_14
; AVX512F-NEXT: .LBB16_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB16_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB16_16
; AVX512F-NEXT: .LBB16_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
diff --git a/llvm/test/CodeGen/X86/masked_store_trunc_usat.ll b/llvm/test/CodeGen/X86/masked_store_trunc_usat.ll
index b2129a0cc0b95..1d75b59da9a20 100644
--- a/llvm/test/CodeGen/X86/masked_store_trunc_usat.ll
+++ b/llvm/test/CodeGen/X86/masked_store_trunc_usat.ll
@@ -2593,8 +2593,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: .LBB9_14: # %else12
; SSE2-NEXT: psrad $16, %xmm3
; SSE2-NEXT: psrad $16, %xmm2
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB9_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB9_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: pextrw $7, %xmm8, %ecx
; SSE2-NEXT: movw %cx, 14(%rdi)
@@ -2710,8 +2710,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: .LBB9_14: # %else12
; SSE4-NEXT: pminud %xmm8, %xmm3
; SSE4-NEXT: pminud %xmm8, %xmm2
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB9_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB9_16
; SSE4-NEXT: # %bb.15: # %cond.store13
; SSE4-NEXT: pextrw $7, %xmm0, 14(%rdi)
; SSE4-NEXT: .LBB9_16: # %else14
@@ -2847,8 +2847,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB9_13
; AVX1-NEXT: .LBB9_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB9_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB9_16
; AVX1-NEXT: .LBB9_15: # %cond.store13
; AVX1-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX1-NEXT: .LBB9_16: # %else14
@@ -2905,8 +2905,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB9_14
; AVX1-NEXT: .LBB9_13: # %cond.store11
; AVX1-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB9_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB9_15
; AVX1-NEXT: jmp .LBB9_16
; AVX1-NEXT: .LBB9_17: # %cond.store15
; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -2980,8 +2980,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB9_13
; AVX2-NEXT: .LBB9_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB9_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB9_16
; AVX2-NEXT: .LBB9_15: # %cond.store13
; AVX2-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX2-NEXT: .LBB9_16: # %else14
@@ -3038,8 +3038,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB9_14
; AVX2-NEXT: .LBB9_13: # %cond.store11
; AVX2-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB9_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB9_15
; AVX2-NEXT: jmp .LBB9_16
; AVX2-NEXT: .LBB9_17: # %cond.store15
; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -3100,8 +3100,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB9_13
; AVX512F-NEXT: .LBB9_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB9_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB9_16
; AVX512F-NEXT: .LBB9_15: # %cond.store13
; AVX512F-NEXT: vpextrw $7, %xmm0, 14(%rdi)
; AVX512F-NEXT: .LBB9_16: # %else14
@@ -3158,8 +3158,8 @@ define void @truncstore_v16i32_v16i16(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB9_14
; AVX512F-NEXT: .LBB9_13: # %cond.store11
; AVX512F-NEXT: vpextrw $6, %xmm0, 12(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB9_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB9_15
; AVX512F-NEXT: jmp .LBB9_16
; AVX512F-NEXT: .LBB9_17: # %cond.store15
; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
@@ -3299,8 +3299,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB10_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB10_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB10_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB10_16: # %else14
@@ -3413,8 +3413,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB10_13
; SSE4-NEXT: .LBB10_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB10_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB10_15
; SSE4-NEXT: .LBB10_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB10_17
@@ -3467,8 +3467,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; SSE4-NEXT: je .LBB10_14
; SSE4-NEXT: .LBB10_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB10_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB10_16
; SSE4-NEXT: .LBB10_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -3554,8 +3554,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB10_13
; AVX1-NEXT: .LBB10_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB10_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB10_15
; AVX1-NEXT: .LBB10_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB10_17
@@ -3609,8 +3609,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX1-NEXT: je .LBB10_14
; AVX1-NEXT: .LBB10_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB10_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB10_16
; AVX1-NEXT: .LBB10_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -3689,8 +3689,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB10_13
; AVX2-NEXT: .LBB10_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB10_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB10_15
; AVX2-NEXT: .LBB10_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB10_17
@@ -3744,8 +3744,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX2-NEXT: je .LBB10_14
; AVX2-NEXT: .LBB10_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB10_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB10_16
; AVX2-NEXT: .LBB10_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -3809,8 +3809,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB10_13
; AVX512F-NEXT: .LBB10_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB10_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB10_15
; AVX512F-NEXT: .LBB10_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB10_17
@@ -3864,8 +3864,8 @@ define void @truncstore_v16i32_v16i8(<16 x i32> %x, ptr %p, <16 x i32> %mask) {
; AVX512F-NEXT: je .LBB10_14
; AVX512F-NEXT: .LBB10_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB10_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB10_16
; AVX512F-NEXT: .LBB10_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -5234,8 +5234,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB15_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB15_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB15_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB15_16: # %else14
@@ -5285,8 +5285,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE2-NEXT: movb %cl, 14(%rdi)
; SSE2-NEXT: .LBB15_30: # %else28
; SSE2-NEXT: packuswb %xmm3, %xmm2
-; SSE2-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE2-NEXT: je .LBB15_32
+; SSE2-NEXT: testw %ax, %ax
+; SSE2-NEXT: jns .LBB15_32
; SSE2-NEXT: # %bb.31: # %cond.store29
; SSE2-NEXT: movb %ch, 15(%rdi)
; SSE2-NEXT: .LBB15_32: # %else30
@@ -5443,8 +5443,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB15_13
; SSE4-NEXT: .LBB15_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB15_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB15_15
; SSE4-NEXT: .LBB15_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB15_17
@@ -5471,8 +5471,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: .LBB15_30: # %else28
; SSE4-NEXT: pminuw %xmm6, %xmm3
; SSE4-NEXT: pminuw %xmm6, %xmm2
-; SSE4-NEXT: testl $32768, %eax # imm = 0x8000
-; SSE4-NEXT: je .LBB15_32
+; SSE4-NEXT: testw %ax, %ax
+; SSE4-NEXT: jns .LBB15_32
; SSE4-NEXT: # %bb.31: # %cond.store29
; SSE4-NEXT: pextrb $15, %xmm0, 15(%rdi)
; SSE4-NEXT: .LBB15_32: # %else30
@@ -5552,8 +5552,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; SSE4-NEXT: je .LBB15_14
; SSE4-NEXT: .LBB15_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB15_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB15_16
; SSE4-NEXT: .LBB15_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -5690,8 +5690,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB15_13
; AVX1-NEXT: .LBB15_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB15_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB15_15
; AVX1-NEXT: .LBB15_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB15_17
@@ -5714,8 +5714,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: testl $16384, %eax # imm = 0x4000
; AVX1-NEXT: jne .LBB15_29
; AVX1-NEXT: .LBB15_30: # %else28
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: je .LBB15_32
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: jns .LBB15_32
; AVX1-NEXT: .LBB15_31: # %cond.store29
; AVX1-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX1-NEXT: .LBB15_32: # %else30
@@ -5796,8 +5796,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_14
; AVX1-NEXT: .LBB15_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB15_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB15_16
; AVX1-NEXT: .LBB15_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -5828,8 +5828,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX1-NEXT: je .LBB15_30
; AVX1-NEXT: .LBB15_29: # %cond.store27
; AVX1-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX1-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX1-NEXT: jne .LBB15_31
+; AVX1-NEXT: testw %ax, %ax
+; AVX1-NEXT: js .LBB15_31
; AVX1-NEXT: jmp .LBB15_32
; AVX1-NEXT: .LBB15_33: # %cond.store31
; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -5928,8 +5928,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB15_13
; AVX2-NEXT: .LBB15_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB15_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB15_15
; AVX2-NEXT: .LBB15_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB15_17
@@ -5952,8 +5952,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: testl $16384, %eax # imm = 0x4000
; AVX2-NEXT: jne .LBB15_29
; AVX2-NEXT: .LBB15_30: # %else28
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: je .LBB15_32
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: jns .LBB15_32
; AVX2-NEXT: .LBB15_31: # %cond.store29
; AVX2-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX2-NEXT: .LBB15_32: # %else30
@@ -6034,8 +6034,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_14
; AVX2-NEXT: .LBB15_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB15_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB15_16
; AVX2-NEXT: .LBB15_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -6066,8 +6066,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX2-NEXT: je .LBB15_30
; AVX2-NEXT: .LBB15_29: # %cond.store27
; AVX2-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX2-NEXT: jne .LBB15_31
+; AVX2-NEXT: testw %ax, %ax
+; AVX2-NEXT: js .LBB15_31
; AVX2-NEXT: jmp .LBB15_32
; AVX2-NEXT: .LBB15_33: # %cond.store31
; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -6170,8 +6170,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB15_13
; AVX512F-NEXT: .LBB15_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB15_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB15_15
; AVX512F-NEXT: .LBB15_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB15_17
@@ -6194,8 +6194,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: testl $16384, %eax # imm = 0x4000
; AVX512F-NEXT: jne .LBB15_29
; AVX512F-NEXT: .LBB15_30: # %else28
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: je .LBB15_32
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: jns .LBB15_32
; AVX512F-NEXT: .LBB15_31: # %cond.store29
; AVX512F-NEXT: vpextrb $15, %xmm0, 15(%rdi)
; AVX512F-NEXT: .LBB15_32: # %else30
@@ -6276,8 +6276,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_14
; AVX512F-NEXT: .LBB15_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB15_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB15_16
; AVX512F-NEXT: .LBB15_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
@@ -6308,8 +6308,8 @@ define void @truncstore_v32i16_v32i8(<32 x i16> %x, ptr %p, <32 x i8> %mask) {
; AVX512F-NEXT: je .LBB15_30
; AVX512F-NEXT: .LBB15_29: # %cond.store27
; AVX512F-NEXT: vpextrb $14, %xmm0, 14(%rdi)
-; AVX512F-NEXT: testl $32768, %eax # imm = 0x8000
-; AVX512F-NEXT: jne .LBB15_31
+; AVX512F-NEXT: testw %ax, %ax
+; AVX512F-NEXT: js .LBB15_31
; AVX512F-NEXT: jmp .LBB15_32
; AVX512F-NEXT: .LBB15_33: # %cond.store31
; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
@@ -6448,8 +6448,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE2-NEXT: # %bb.13: # %cond.store11
; SSE2-NEXT: movb %cl, 6(%rdi)
; SSE2-NEXT: .LBB16_14: # %else12
-; SSE2-NEXT: testb $-128, %al
-; SSE2-NEXT: je .LBB16_16
+; SSE2-NEXT: testb %al, %al
+; SSE2-NEXT: jns .LBB16_16
; SSE2-NEXT: # %bb.15: # %cond.store13
; SSE2-NEXT: movb %ch, 7(%rdi)
; SSE2-NEXT: .LBB16_16: # %else14
@@ -6548,8 +6548,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: testb $64, %al
; SSE4-NEXT: jne .LBB16_13
; SSE4-NEXT: .LBB16_14: # %else12
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: jne .LBB16_15
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: js .LBB16_15
; SSE4-NEXT: .LBB16_16: # %else14
; SSE4-NEXT: testl $256, %eax # imm = 0x100
; SSE4-NEXT: jne .LBB16_17
@@ -6602,8 +6602,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; SSE4-NEXT: je .LBB16_14
; SSE4-NEXT: .LBB16_13: # %cond.store11
; SSE4-NEXT: pextrb $6, %xmm0, 6(%rdi)
-; SSE4-NEXT: testb $-128, %al
-; SSE4-NEXT: je .LBB16_16
+; SSE4-NEXT: testb %al, %al
+; SSE4-NEXT: jns .LBB16_16
; SSE4-NEXT: .LBB16_15: # %cond.store13
; SSE4-NEXT: pextrb $7, %xmm0, 7(%rdi)
; SSE4-NEXT: testl $256, %eax # imm = 0x100
@@ -6672,8 +6672,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: testb $64, %al
; AVX1-NEXT: jne .LBB16_13
; AVX1-NEXT: .LBB16_14: # %else12
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: jne .LBB16_15
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: js .LBB16_15
; AVX1-NEXT: .LBB16_16: # %else14
; AVX1-NEXT: testl $256, %eax # imm = 0x100
; AVX1-NEXT: jne .LBB16_17
@@ -6727,8 +6727,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX1-NEXT: je .LBB16_14
; AVX1-NEXT: .LBB16_13: # %cond.store11
; AVX1-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX1-NEXT: testb $-128, %al
-; AVX1-NEXT: je .LBB16_16
+; AVX1-NEXT: testb %al, %al
+; AVX1-NEXT: jns .LBB16_16
; AVX1-NEXT: .LBB16_15: # %cond.store13
; AVX1-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX1-NEXT: testl $256, %eax # imm = 0x100
@@ -6796,8 +6796,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: testb $64, %al
; AVX2-NEXT: jne .LBB16_13
; AVX2-NEXT: .LBB16_14: # %else12
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: jne .LBB16_15
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: js .LBB16_15
; AVX2-NEXT: .LBB16_16: # %else14
; AVX2-NEXT: testl $256, %eax # imm = 0x100
; AVX2-NEXT: jne .LBB16_17
@@ -6851,8 +6851,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX2-NEXT: je .LBB16_14
; AVX2-NEXT: .LBB16_13: # %cond.store11
; AVX2-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX2-NEXT: testb $-128, %al
-; AVX2-NEXT: je .LBB16_16
+; AVX2-NEXT: testb %al, %al
+; AVX2-NEXT: jns .LBB16_16
; AVX2-NEXT: .LBB16_15: # %cond.store13
; AVX2-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX2-NEXT: testl $256, %eax # imm = 0x100
@@ -6920,8 +6920,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: testb $64, %al
; AVX512F-NEXT: jne .LBB16_13
; AVX512F-NEXT: .LBB16_14: # %else12
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: jne .LBB16_15
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: js .LBB16_15
; AVX512F-NEXT: .LBB16_16: # %else14
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
; AVX512F-NEXT: jne .LBB16_17
@@ -6975,8 +6975,8 @@ define void @truncstore_v16i16_v16i8(<16 x i16> %x, ptr %p, <16 x i8> %mask) {
; AVX512F-NEXT: je .LBB16_14
; AVX512F-NEXT: .LBB16_13: # %cond.store11
; AVX512F-NEXT: vpextrb $6, %xmm0, 6(%rdi)
-; AVX512F-NEXT: testb $-128, %al
-; AVX512F-NEXT: je .LBB16_16
+; AVX512F-NEXT: testb %al, %al
+; AVX512F-NEXT: jns .LBB16_16
; AVX512F-NEXT: .LBB16_15: # %cond.store13
; AVX512F-NEXT: vpextrb $7, %xmm0, 7(%rdi)
; AVX512F-NEXT: testl $256, %eax # imm = 0x100
diff --git a/llvm/test/CodeGen/X86/omit-urem-of-power-of-two-or-zero-when-comparing-with-zero.ll b/llvm/test/CodeGen/X86/omit-urem-of-power-of-two-or-zero-when-comparing-with-zero.ll
index 25ffed9009c0e..83dd0b5b9dbfd 100644
--- a/llvm/test/CodeGen/X86/omit-urem-of-power-of-two-or-zero-when-comparing-with-zero.ll
+++ b/llvm/test/CodeGen/X86/omit-urem-of-power-of-two-or-zero-when-comparing-with-zero.ll
@@ -16,8 +16,8 @@
define i1 @p0_scalar_urem_by_const(i32 %x, i32 %y) {
; CHECK-LABEL: p0_scalar_urem_by_const:
; CHECK: # %bb.0:
-; CHECK-NEXT: testb $-128, %dil
-; CHECK-NEXT: sete %al
+; CHECK-NEXT: testb %dil, %dil
+; CHECK-NEXT: setns %al
; CHECK-NEXT: retq
%t0 = and i32 %x, 128 ; clearly a power-of-two or zero
%t1 = urem i32 %t0, 6 ; '6' is clearly not a power of two
@@ -28,8 +28,8 @@ define i1 @p0_scalar_urem_by_const(i32 %x, i32 %y) {
define i1 @p1_scalar_urem_by_nonconst(i32 %x, i32 %y) {
; CHECK-LABEL: p1_scalar_urem_by_nonconst:
; CHECK: # %bb.0:
-; CHECK-NEXT: testb $-128, %dil
-; CHECK-NEXT: sete %al
+; CHECK-NEXT: testb %dil, %dil
+; CHECK-NEXT: setns %al
; CHECK-NEXT: retq
%t0 = and i32 %x, 128 ; clearly a power-of-two or zero
%t1 = or i32 %y, 6 ; two bits set, clearly not a power of two
diff --git a/llvm/test/CodeGen/X86/signbit-test.ll b/llvm/test/CodeGen/X86/signbit-test.ll
index eca3494eb5ccb..4e134d783ee49 100644
--- a/llvm/test/CodeGen/X86/signbit-test.ll
+++ b/llvm/test/CodeGen/X86/signbit-test.ll
@@ -5,8 +5,8 @@ define i64 @test_clear_mask_i64_i32(i64 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i64_i32:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testl $-2147483648, %eax # imm = 0x80000000
-; CHECK-NEXT: jne .LBB0_2
+; CHECK-NEXT: testl %eax, %eax
+; CHECK-NEXT: js .LBB0_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB0_2: # %f
@@ -26,8 +26,8 @@ define i64 @test_set_mask_i64_i32(i64 %x) nounwind {
; CHECK-LABEL: test_set_mask_i64_i32:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testl $-2147483648, %eax # imm = 0x80000000
-; CHECK-NEXT: je .LBB1_2
+; CHECK-NEXT: testl %eax, %eax
+; CHECK-NEXT: jns .LBB1_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB1_2: # %f
@@ -47,8 +47,8 @@ define i64 @test_clear_mask_i64_i16(i64 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i64_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testl $32768, %eax # imm = 0x8000
-; CHECK-NEXT: jne .LBB2_2
+; CHECK-NEXT: testw %ax, %ax
+; CHECK-NEXT: js .LBB2_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB2_2: # %f
@@ -68,8 +68,8 @@ define i64 @test_set_mask_i64_i16(i64 %x) nounwind {
; CHECK-LABEL: test_set_mask_i64_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testl $32768, %eax # imm = 0x8000
-; CHECK-NEXT: je .LBB3_2
+; CHECK-NEXT: testw %ax, %ax
+; CHECK-NEXT: jns .LBB3_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB3_2: # %f
@@ -89,8 +89,8 @@ define i64 @test_clear_mask_i64_i8(i64 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i64_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: jne .LBB4_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: js .LBB4_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB4_2: # %f
@@ -110,8 +110,8 @@ define i64 @test_set_mask_i64_i8(i64 %x) nounwind {
; CHECK-LABEL: test_set_mask_i64_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: je .LBB5_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: jns .LBB5_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB5_2: # %f
@@ -131,8 +131,8 @@ define i32 @test_clear_mask_i32_i16(i32 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i32_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testl $32768, %edi # imm = 0x8000
-; CHECK-NEXT: jne .LBB6_2
+; CHECK-NEXT: testw %ax, %ax
+; CHECK-NEXT: js .LBB6_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB6_2: # %f
@@ -152,8 +152,8 @@ define i32 @test_set_mask_i32_i16(i32 %x) nounwind {
; CHECK-LABEL: test_set_mask_i32_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testl $32768, %edi # imm = 0x8000
-; CHECK-NEXT: je .LBB7_2
+; CHECK-NEXT: testw %ax, %ax
+; CHECK-NEXT: jns .LBB7_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB7_2: # %f
@@ -173,8 +173,8 @@ define i32 @test_clear_mask_i32_i8(i32 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i32_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: jne .LBB8_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: js .LBB8_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB8_2: # %f
@@ -194,8 +194,8 @@ define i32 @test_set_mask_i32_i8(i32 %x) nounwind {
; CHECK-LABEL: test_set_mask_i32_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: je .LBB9_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: jns .LBB9_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: .LBB9_2: # %f
@@ -215,8 +215,8 @@ define i16 @test_clear_mask_i16_i8(i16 %x) nounwind {
; CHECK-LABEL: test_clear_mask_i16_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: jne .LBB10_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: js .LBB10_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movw $42, %ax
; CHECK-NEXT: .LBB10_2: # %f
@@ -237,8 +237,8 @@ define i16 @test_set_mask_i16_i8(i16 %x) nounwind {
; CHECK-LABEL: test_set_mask_i16_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl %edi, %eax
-; CHECK-NEXT: testb $-128, %al
-; CHECK-NEXT: je .LBB11_2
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: jns .LBB11_2
; CHECK-NEXT: # %bb.1: # %t
; CHECK-NEXT: movw $42, %ax
; CHECK-NEXT: .LBB11_2: # %f
diff --git a/llvm/test/CodeGen/X86/test-vs-bittest.ll b/llvm/test/CodeGen/X86/test-vs-bittest.ll
index 77ec67ea1b9a6..b22336e62a14e 100644
--- a/llvm/test/CodeGen/X86/test-vs-bittest.ll
+++ b/llvm/test/CodeGen/X86/test-vs-bittest.ll
@@ -640,8 +640,8 @@ define i16 @is_bit_clear_i16(i16 %x) {
; CHECK-LABEL: is_bit_clear_i16:
; CHECK: # %bb.0:
; CHECK-NEXT: xorl %eax, %eax
-; CHECK-NEXT: testb $-128, %dil
-; CHECK-NEXT: sete %al
+; CHECK-NEXT: testb %dil, %dil
+; CHECK-NEXT: setns %al
; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
; CHECK-NEXT: retq
%sh = lshr i16 %x, 7
More information about the llvm-commits
mailing list