[llvm] dd33690 - [X86] combineVectorSizedSetCCEquality - convert to mayFoldIntoVector helper (#172215)

via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 14 08:11:35 PST 2025


Author: Simon Pilgrim
Date: 2025-12-14T16:11:31Z
New Revision: dd33690686e69b8fd7802cdd7e875f3e362d268b

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

LOG: [X86] combineVectorSizedSetCCEquality - convert to mayFoldIntoVector helper (#172215)

Add AssumeSingleUse (default = false) argument to mayFoldIntoVector to
allow us to match combineVectorSizedSetCCEquality behaviour with
AssumeSingleUse=true

Hopefully we can drop the AssumeSingleUse entirely soon, but there are a
number of messy test regressions that need handling first

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 c28584cc14991..a85ed96e11158 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -2860,12 +2860,13 @@ bool X86::mayFoldIntoZeroExtend(SDValue Op) {
 }
 
 // Return true if its cheap to bitcast this to a vector type.
-static bool mayFoldIntoVector(SDValue Op, const X86Subtarget &Subtarget) {
+static bool mayFoldIntoVector(SDValue Op, const X86Subtarget &Subtarget,
+                              bool AssumeSingleUse = false) {
   if (peekThroughBitcasts(Op).getValueType().isVector())
     return true;
   if (isa<ConstantSDNode>(Op) || isa<ConstantFPSDNode>(Op))
     return true;
-  return X86::mayFoldLoad(Op, Subtarget, /*AssumeSingleUse=*/false,
+  return X86::mayFoldLoad(Op, Subtarget, AssumeSingleUse,
                           /*IgnoreAlignment=*/true);
 }
 
@@ -23122,12 +23123,9 @@ static SDValue combineVectorSizedSetCCEquality(EVT VT, SDValue X, SDValue Y,
     return SDValue();
 
   // Don't perform this combine if constructing the vector will be expensive.
-  auto IsVectorBitCastCheap = [](SDValue X) {
-    X = peekThroughBitcasts(X);
-    return isa<ConstantSDNode>(X) || X.getValueType().isVector() ||
-           ISD::isNormalLoad(X.getNode());
-  };
-  if ((!IsVectorBitCastCheap(X) || !IsVectorBitCastCheap(Y)) &&
+  // TODO: Drop AssumeSingleUse = true override.
+  if ((!mayFoldIntoVector(X, Subtarget, /*AssumeSingleUse=*/true) ||
+       !mayFoldIntoVector(Y, Subtarget, /*AssumeSingleUse=*/true)) &&
       !IsOrXorXorTreeCCZero)
     return SDValue();
 


        


More information about the llvm-commits mailing list