[llvm] [X86] combineLogicBlendIntoConditionalNegate - convert to SDPatternMatch matching. NFC. (PR #144536)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 17 07:47:53 PDT 2025
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/144536
None
>From a0b56812598e1d1e3a2490ce4fe6216435de9f76 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Tue, 17 Jun 2025 15:46:49 +0100
Subject: [PATCH] [X86] combineLogicBlendIntoConditionalNegate - convert to
SDPatternMatch matching. NFC.
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
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