[llvm] 65d590e - [X86] combineLogicBlendIntoConditionalNegate - convert to SDPatternMatch matching. NFC. (#144536)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 17 09:25:13 PDT 2025
Author: Simon Pilgrim
Date: 2025-06-17T17:25:09+01:00
New Revision: 65d590e8d012df9dabbf8b3ec929fd1543c7398a
URL: https://github.com/llvm/llvm-project/commit/65d590e8d012df9dabbf8b3ec929fd1543c7398a
DIFF: https://github.com/llvm/llvm-project/commit/65d590e8d012df9dabbf8b3ec929fd1543c7398a.diff
LOG: [X86] combineLogicBlendIntoConditionalNegate - convert to SDPatternMatch matching. NFC. (#144536)
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 12fcc614ab254..4cff42c2ac464 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -47591,27 +47591,19 @@ static SDValue combineVSelectToBLENDV(SDNode *N, SelectionDAG &DAG,
static SDValue combineLogicBlendIntoConditionalNegate(
EVT VT, SDValue Mask, SDValue X, SDValue Y, const SDLoc &DL,
SelectionDAG &DAG, const X86Subtarget &Subtarget) {
+ using namespace SDPatternMatch;
EVT MaskVT = Mask.getValueType();
assert(MaskVT.isInteger() &&
DAG.ComputeNumSignBits(Mask) == MaskVT.getScalarSizeInBits() &&
"Mask must be zero/all-bits");
- if (X.getValueType() != MaskVT || Y.getValueType() != MaskVT)
- return SDValue();
- if (!DAG.getTargetLoweringInfo().isOperationLegal(ISD::SUB, MaskVT))
+ if (X.getValueType() != MaskVT || Y.getValueType() != MaskVT ||
+ !DAG.getTargetLoweringInfo().isOperationLegal(ISD::SUB, MaskVT))
return SDValue();
- auto IsNegV = [](SDNode *N, SDValue V) {
- return N->getOpcode() == ISD::SUB && N->getOperand(1) == V &&
- ISD::isBuildVectorAllZeros(N->getOperand(0).getNode());
- };
-
SDValue V;
- if (IsNegV(Y.getNode(), X))
- V = X;
- else if (IsNegV(X.getNode(), Y))
- V = Y;
- else
+ if (!sd_match(Y, m_Neg(m_AllOf(m_Specific(X), m_Value(V)))) &&
+ !sd_match(X, m_Neg(m_AllOf(m_Specific(Y), m_Value(V)))))
return SDValue();
SDValue SubOp1 = DAG.getNode(ISD::XOR, DL, MaskVT, V, Mask);
More information about the llvm-commits
mailing list