[PATCH] D123652: Add use condition for combine SetCCMOVMSK

Xiang Zhang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 22:24:32 PDT 2022


xiangzhangllvm created this revision.
xiangzhangllvm added a reviewer: RKSimon.
Herald added subscribers: pengfei, hiraditya.
Herald added a project: All.
xiangzhangllvm requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

We encounter a performance drop caused by

6997f4d07fa4b462dd3a02838a2cfed45db9c8a0 <https://reviews.llvm.org/rG6997f4d07fa4b462dd3a02838a2cfed45db9c8a0>

We should not try fold allof(cmpeq(x,y)) -> ptest(sub(x,y)) if the cmpeq has other users.


https://reviews.llvm.org/D123652

Files:
  llvm/lib/Target/X86/X86ISelLowering.cpp


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -44999,9 +44999,11 @@
   unsigned NumElts = VecVT.getVectorNumElements();
   unsigned NumEltBits = VecVT.getScalarSizeInBits();
 
-  bool IsAnyOf = CmpOpcode == X86ISD::CMP && CmpVal.isZero();
+  bool IsAnyOf = CmpOpcode == X86ISD::CMP && CmpVal.isZero() &&
+                 CmpOp.getNode()->hasOneUse();
   bool IsAllOf = (CmpOpcode == X86ISD::SUB || CmpOpcode == X86ISD::CMP) &&
-                 NumElts <= CmpBits && CmpVal.isMask(NumElts);
+                 NumElts <= CmpBits && CmpVal.isMask(NumElts) &&
+                 CmpOp.getNode()->hasOneUse();
   if (!IsAnyOf && !IsAllOf)
     return SDValue();
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123652.422397.patch
Type: text/x-patch
Size: 820 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220413/18f17b11/attachment.bin>


More information about the llvm-commits mailing list