From adc7c589c3dd35af5991ee481fa4667094bca548 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 6 Dec 2022 11:17:52 -0500 Subject: [PATCH] [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 --- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp | 20 ++ llvm/test/CodeGen/AArch64/signbit-test.ll | 4 +- llvm/test/CodeGen/X86/btq.ll | 4 +- llvm/test/CodeGen/X86/masked_compressstore.ll | 124 ++++++------ llvm/test/CodeGen/X86/masked_expandload.ll | 136 ++++++------- llvm/test/CodeGen/X86/masked_gather.ll | 16 +- llvm/test/CodeGen/X86/masked_load.ll | 176 ++++++++--------- llvm/test/CodeGen/X86/masked_store.ll | 220 ++++++++++----------- llvm/test/CodeGen/X86/masked_store_trunc.ll | 172 ++++++++-------- llvm/test/CodeGen/X86/masked_store_trunc_ssat.ll | 184 ++++++++--------- llvm/test/CodeGen/X86/masked_store_trunc_usat.ll | 172 ++++++++-------- ...ower-of-two-or-zero-when-comparing-with-zero.ll | 8 +- llvm/test/CodeGen/X86/signbit-test.ll | 48 ++--- llvm/test/CodeGen/X86/test-vs-bittest.ll | 4 +- 14 files changed, 654 insertions(+), 634 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index 553facc..30f925e 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(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 624027b..f5eaf80 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 33ff5a8..2040901 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 9c75a13..dedae28 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 ae2ef40..cafbc7b 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 b20ce3a..513b608 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 e226279..e12cfff2 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 5bf48ce..f71667d 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 5927e90..cb9aefb 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 e0358dc..b7eceec 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 b2129a0..1d75b59 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 25ffed9..83dd0b5 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 eca3494..4e134d7 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 77ec67e..b22336e 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 -- 2.7.4