[llvm] r372544 - [X86] Canonicalize all zeroes vector to RHS in X86DAGToDAGISel::tryVPTESTM.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 22 22:35:23 PDT 2019
Author: ctopper
Date: Sun Sep 22 22:35:23 2019
New Revision: 372544
URL: http://llvm.org/viewvc/llvm-project?rev=372544&view=rev
Log:
[X86] Canonicalize all zeroes vector to RHS in X86DAGToDAGISel::tryVPTESTM.
Modified:
llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
llvm/trunk/test/CodeGen/X86/avx512f-vec-test-testn.ll
Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=372544&r1=372543&r2=372544&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Sun Sep 22 22:35:23 2019
@@ -4098,12 +4098,18 @@ bool X86DAGToDAGISel::tryVPTESTM(SDNode
if (CC != ISD::SETEQ && CC != ISD::SETNE)
return false;
+ SDValue SetccOp0 = Setcc.getOperand(0);
+ SDValue SetccOp1 = Setcc.getOperand(1);
+
+ // Canonicalize the all zero vector to the RHS.
+ if (ISD::isBuildVectorAllZeros(SetccOp0.getNode()))
+ std::swap(SetccOp0, SetccOp1);
+
// See if we're comparing against zero.
- // FIXME: Handle all zeros on LHS.
- if (!ISD::isBuildVectorAllZeros(Setcc.getOperand(1).getNode()))
+ if (!ISD::isBuildVectorAllZeros(SetccOp1.getNode()))
return false;
- SDValue N0 = Setcc.getOperand(0);
+ SDValue N0 = SetccOp0;
MVT CmpVT = N0.getSimpleValueType();
MVT CmpSVT = CmpVT.getVectorElementType();
Modified: llvm/trunk/test/CodeGen/X86/avx512f-vec-test-testn.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512f-vec-test-testn.ll?rev=372544&r1=372543&r2=372544&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/avx512f-vec-test-testn.ll (original)
+++ llvm/trunk/test/CodeGen/X86/avx512f-vec-test-testn.ll Sun Sep 22 22:35:23 2019
@@ -215,27 +215,16 @@ entry:
}
define <2 x i64> @setcc_commute(<2 x i64> %a) {
-; X64-LABEL: setcc_commute:
-; X64: # %bb.0:
-; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
-; X64-NEXT: vpsubq %xmm0, %xmm1, %xmm1
-; X64-NEXT: vptestnmq %zmm0, %zmm0, %k1
-; X64-NEXT: vmovdqa64 %zmm0, %zmm1 {%k1}
-; X64-NEXT: vmovdqa %xmm1, %xmm0
-; X64-NEXT: vzeroupper
-; X64-NEXT: retq
-;
-; X86-LABEL: setcc_commute:
-; X86: # %bb.0:
-; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; X86-NEXT: vpxor %xmm2, %xmm2, %xmm2
-; X86-NEXT: vpsubq %xmm0, %xmm2, %xmm1
-; X86-NEXT: vpcmpeqq %zmm0, %zmm2, %k1
-; X86-NEXT: vmovdqa64 %zmm0, %zmm1 {%k1}
-; X86-NEXT: vmovdqa %xmm1, %xmm0
-; X86-NEXT: vzeroupper
-; X86-NEXT: retl
+; CHECK-LABEL: setcc_commute:
+; CHECK: # %bb.0:
+; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
+; CHECK-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; CHECK-NEXT: vpsubq %xmm0, %xmm1, %xmm1
+; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k1
+; CHECK-NEXT: vmovdqa64 %zmm0, %zmm1 {%k1}
+; CHECK-NEXT: vmovdqa %xmm1, %xmm0
+; CHECK-NEXT: vzeroupper
+; CHECK-NEXT: ret{{[l|q]}}
%1 = sub <2 x i64> zeroinitializer, %a
%2 = icmp eq <2 x i64> %a, zeroinitializer
%3 = select <2 x i1> %2, <2 x i64> %a, <2 x i64> %1
More information about the llvm-commits
mailing list