[llvm] [X86] combineVectorSizedSetCCEquality - convert to mayFoldIntoVector helper (PR #172215)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 14 07:32:46 PST 2025
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/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
>From 6a2cc671245add5aee2511c759ee3de87d2fae9e Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Sun, 14 Dec 2025 15:31:36 +0000
Subject: [PATCH] [X86] combineVectorSizedSetCCEquality - convert to
mayFoldIntoVector helper
Add AssumeSingleUse (default = false) argument to mayFoldIntoVector to allow us to match combineVectorSizedSetCCEquality AssumeSingleUse=true behaviour
Hopefully we can drop the AssumeSingleUse entirely soon, but there are a number of messy test regressions that need handling first
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
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