[llvm] 56a9332 - [X86][SSE] Fold MOVMSK(PCMPEQ(X,0)) != -1 -> !PTESTZ(X,X) allof patterns
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 20 04:17:44 PDT 2020
Author: Simon Pilgrim
Date: 2020-06-20T12:17:32+01:00
New Revision: 56a9332328bee8208d03b6c8269fdd5dad44b523
URL: https://github.com/llvm/llvm-project/commit/56a9332328bee8208d03b6c8269fdd5dad44b523
DIFF: https://github.com/llvm/llvm-project/commit/56a9332328bee8208d03b6c8269fdd5dad44b523.diff
LOG: [X86][SSE] Fold MOVMSK(PCMPEQ(X,0)) != -1 -> !PTESTZ(X,X) allof patterns
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/movmsk-cmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index c5debd6ef7a8..9ce8245898de 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -40561,7 +40561,8 @@ static SDValue combineSetCCMOVMSK(SDValue EFLAGS, X86::CondCode &CC,
}
// MOVMSK(PCMPEQ(X,0)) == -1 -> PTESTZ(X,X).
- if ((IsAllOf && CC == X86::COND_E) && Subtarget.hasSSE41()) {
+ // MOVMSK(PCMPEQ(X,0)) != -1 -> !PTESTZ(X,X).
+ if (IsAllOf && Subtarget.hasSSE41()) {
SDValue BC = peekThroughBitcasts(Vec);
if (BC.getOpcode() == X86ISD::PCMPEQ &&
ISD::isBuildVectorAllZeros(BC.getOperand(1).getNode())) {
diff --git a/llvm/test/CodeGen/X86/movmsk-cmp.ll b/llvm/test/CodeGen/X86/movmsk-cmp.ll
index bc2edf43be38..288069bedd94 100644
--- a/llvm/test/CodeGen/X86/movmsk-cmp.ll
+++ b/llvm/test/CodeGen/X86/movmsk-cmp.ll
@@ -998,30 +998,30 @@ define i1 @allones_v16i8_and1(<16 x i8> %arg) {
}
define i1 @allzeros_v16i8_not(<16 x i8> %a0) {
-; SSE-LABEL: allzeros_v16i8_not:
-; SSE: # %bb.0:
-; SSE-NEXT: pxor %xmm1, %xmm1
-; SSE-NEXT: pcmpeqb %xmm0, %xmm1
-; SSE-NEXT: pmovmskb %xmm1, %eax
-; SSE-NEXT: cmpw $-1, %ax
-; SSE-NEXT: setne %al
-; SSE-NEXT: retq
+; SSE2-LABEL: allzeros_v16i8_not:
+; SSE2: # %bb.0:
+; SSE2-NEXT: pxor %xmm1, %xmm1
+; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
+; SSE2-NEXT: pmovmskb %xmm1, %eax
+; SSE2-NEXT: cmpw $-1, %ax
+; SSE2-NEXT: setne %al
+; SSE2-NEXT: retq
+;
+; SSE41-LABEL: allzeros_v16i8_not:
+; SSE41: # %bb.0:
+; SSE41-NEXT: ptest %xmm0, %xmm0
+; SSE41-NEXT: setne %al
+; SSE41-NEXT: retq
;
; AVX1OR2-LABEL: allzeros_v16i8_not:
; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
-; AVX1OR2-NEXT: vpmovmskb %xmm0, %eax
-; AVX1OR2-NEXT: cmpw $-1, %ax
+; AVX1OR2-NEXT: vptest %xmm0, %xmm0
; AVX1OR2-NEXT: setne %al
; AVX1OR2-NEXT: retq
;
; KNL-LABEL: allzeros_v16i8_not:
; KNL: # %bb.0:
-; KNL-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; KNL-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
-; KNL-NEXT: vpmovmskb %xmm0, %eax
-; KNL-NEXT: cmpw $-1, %ax
+; KNL-NEXT: vptest %xmm0, %xmm0
; KNL-NEXT: setne %al
; KNL-NEXT: retq
;
@@ -1051,19 +1051,13 @@ define i1 @allzeros_v2i64_not(<2 x i64> %a0) {
;
; SSE41-LABEL: allzeros_v2i64_not:
; SSE41: # %bb.0:
-; SSE41-NEXT: pxor %xmm1, %xmm1
-; SSE41-NEXT: pcmpeqq %xmm0, %xmm1
-; SSE41-NEXT: movmskpd %xmm1, %eax
-; SSE41-NEXT: cmpb $3, %al
+; SSE41-NEXT: ptest %xmm0, %xmm0
; SSE41-NEXT: setne %al
; SSE41-NEXT: retq
;
; AVX1OR2-LABEL: allzeros_v2i64_not:
; AVX1OR2: # %bb.0:
-; AVX1OR2-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; AVX1OR2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
-; AVX1OR2-NEXT: vmovmskpd %xmm0, %eax
-; AVX1OR2-NEXT: cmpb $3, %al
+; AVX1OR2-NEXT: vptest %xmm0, %xmm0
; AVX1OR2-NEXT: setne %al
; AVX1OR2-NEXT: retq
;
@@ -1119,10 +1113,7 @@ define i1 @allzeros_v8i32_not(<8 x i32> %a0) {
;
; AVX2-LABEL: allzeros_v8i32_not:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vmovmskps %ymm0, %eax
-; AVX2-NEXT: cmpb $-1, %al
+; AVX2-NEXT: vptest %ymm0, %ymm0
; AVX2-NEXT: setne %al
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
More information about the llvm-commits
mailing list