[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