[llvm] 741298a - [X86] combineX86ShufflesConstants - move hasOneUse check as late as possible. NFC.

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 2 11:16:40 PDT 2023


Author: Simon Pilgrim
Date: 2023-04-02T19:16:24+01:00
New Revision: 741298ad06e3a8aa9c68d6ff50ba71d16891e00e

URL: https://github.com/llvm/llvm-project/commit/741298ad06e3a8aa9c68d6ff50ba71d16891e00e
DIFF: https://github.com/llvm/llvm-project/commit/741298ad06e3a8aa9c68d6ff50ba71d16891e00e.diff

LOG: [X86] combineX86ShufflesConstants - move hasOneUse check as late as possible. NFC.

We only need to check hasOneUse if we're optimizing for size, so move the call at the end of the if check.

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index fc6ab0630cb3..64057de11af5 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -40532,22 +40532,19 @@ static SDValue combineX86ShufflesConstants(ArrayRef<SDValue> Ops,
   unsigned NumOps = Ops.size();
 
   // Extract constant bits from each source op.
-  bool OneUseConstantOp = false;
   SmallVector<APInt, 16> UndefEltsOps(NumOps);
   SmallVector<SmallVector<APInt, 16>, 16> RawBitsOps(NumOps);
-  for (unsigned i = 0; i != NumOps; ++i) {
-    SDValue SrcOp = Ops[i];
-    OneUseConstantOp |= SrcOp.hasOneUse();
-    if (!getTargetConstantBitsFromNode(SrcOp, MaskSizeInBits, UndefEltsOps[i],
-                                       RawBitsOps[i]))
+  for (unsigned I = 0; I != NumOps; ++I)
+    if (!getTargetConstantBitsFromNode(Ops[I], MaskSizeInBits, UndefEltsOps[I],
+                                       RawBitsOps[I]))
       return SDValue();
-  }
 
   // If we're optimizing for size, only fold if at least one of the constants is
   // only used once or the combined shuffle has included a variable mask
   // shuffle, this is to avoid constant pool bloat.
   bool IsOptimizingSize = DAG.shouldOptForSize();
-  if (IsOptimizingSize && !OneUseConstantOp && !HasVariableMask)
+  if (IsOptimizingSize && !HasVariableMask &&
+      llvm::none_of(Ops, [](SDValue SrcOp) { return SrcOp->hasOneUse(); }))
     return SDValue();
 
   // Shuffle the constant bits according to the mask.


        


More information about the llvm-commits mailing list