[llvm] 277b2b6 - [X86] combineCastedMaskArithmetic - convert to SDPatternMatch matching. NFC. (#144472)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 17 02:39:57 PDT 2025
Author: Simon Pilgrim
Date: 2025-06-17T10:39:54+01:00
New Revision: 277b2b6da70b488e08b0f0eecba2a4cd1dd01129
URL: https://github.com/llvm/llvm-project/commit/277b2b6da70b488e08b0f0eecba2a4cd1dd01129
DIFF: https://github.com/llvm/llvm-project/commit/277b2b6da70b488e08b0f0eecba2a4cd1dd01129.diff
LOG: [X86] combineCastedMaskArithmetic - convert to SDPatternMatch matching. NFC. (#144472)
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 820b9c53a5089..2eadcc5416c28 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -45513,6 +45513,7 @@ static SDValue combinevXi1ConstantToInteger(SDValue Op, SelectionDAG &DAG) {
static SDValue combineCastedMaskArithmetic(SDNode *N, SelectionDAG &DAG,
TargetLowering::DAGCombinerInfo &DCI,
const X86Subtarget &Subtarget) {
+ using namespace SDPatternMatch;
assert(N->getOpcode() == ISD::BITCAST && "Expected a bitcast");
if (!DCI.isBeforeLegalizeOps())
@@ -45526,15 +45527,6 @@ static SDValue combineCastedMaskArithmetic(SDNode *N, SelectionDAG &DAG,
SDValue Op = N->getOperand(0);
EVT SrcVT = Op.getValueType();
- if (!Op.hasOneUse())
- return SDValue();
-
- // Look for logic ops.
- if (Op.getOpcode() != ISD::AND &&
- Op.getOpcode() != ISD::OR &&
- Op.getOpcode() != ISD::XOR)
- return SDValue();
-
// Make sure we have a bitcast between mask registers and a scalar type.
if (!(SrcVT.isVector() && SrcVT.getVectorElementType() == MVT::i1 &&
DstVT.isScalarInteger()) &&
@@ -45542,18 +45534,18 @@ static SDValue combineCastedMaskArithmetic(SDNode *N, SelectionDAG &DAG,
SrcVT.isScalarInteger()))
return SDValue();
- SDValue LHS = Op.getOperand(0);
- SDValue RHS = Op.getOperand(1);
+ SDValue LHS, RHS;
- if (LHS.hasOneUse() && LHS.getOpcode() == ISD::BITCAST &&
- LHS.getOperand(0).getValueType() == DstVT)
- return DAG.getNode(Op.getOpcode(), SDLoc(N), DstVT, LHS.getOperand(0),
- DAG.getBitcast(DstVT, RHS));
+ // Look for logic ops.
+ if (!sd_match(Op, m_OneUse(m_BitwiseLogic(m_Value(LHS), m_Value(RHS)))))
+ return SDValue();
- if (RHS.hasOneUse() && RHS.getOpcode() == ISD::BITCAST &&
- RHS.getOperand(0).getValueType() == DstVT)
+ // If either operand was bitcast from DstVT, then perform logic with DstVT (at
+ // least one of the getBitcast() will fold away).
+ if (sd_match(LHS, m_OneUse(m_BitCast(m_SpecificVT(DstVT)))) ||
+ sd_match(RHS, m_OneUse(m_BitCast(m_SpecificVT(DstVT)))))
return DAG.getNode(Op.getOpcode(), SDLoc(N), DstVT,
- DAG.getBitcast(DstVT, LHS), RHS.getOperand(0));
+ DAG.getBitcast(DstVT, LHS), DAG.getBitcast(DstVT, RHS));
// If the RHS is a vXi1 build vector, this is a good reason to flip too.
// Most of these have to move a constant from the scalar domain anyway.
More information about the llvm-commits
mailing list