[llvm] 0437895 - [X86] combineShiftToPMULH - convert matching to use SDPatternMatch. NFC.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 03:44:12 PDT 2025
Author: Simon Pilgrim
Date: 2025-07-04T11:13:29+01:00
New Revision: 043789519a118035534c66bacf0ed4b188b2d1a2
URL: https://github.com/llvm/llvm-project/commit/043789519a118035534c66bacf0ed4b188b2d1a2
DIFF: https://github.com/llvm/llvm-project/commit/043789519a118035534c66bacf0ed4b188b2d1a2.diff
LOG: [X86] combineShiftToPMULH - convert matching to use SDPatternMatch. NFC.
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 ced29f8fb3d0c..6edbb7b1bae95 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -49838,31 +49838,24 @@ static SDValue combineMul(SDNode *N, SelectionDAG &DAG,
static SDValue combineShiftToPMULH(SDNode *N, SelectionDAG &DAG,
const SDLoc &DL,
const X86Subtarget &Subtarget) {
+ using namespace SDPatternMatch;
assert((N->getOpcode() == ISD::SRL || N->getOpcode() == ISD::SRA) &&
- "SRL or SRA node is required here!");
+ "SRL or SRA node is required here!");
if (!Subtarget.hasSSE2())
return SDValue();
- // The operation feeding into the shift must be a multiply.
- SDValue ShiftOperand = N->getOperand(0);
- if (ShiftOperand.getOpcode() != ISD::MUL || !ShiftOperand.hasOneUse())
- return SDValue();
-
// Input type should be at least vXi32.
EVT VT = N->getValueType(0);
if (!VT.isVector() || VT.getVectorElementType().getSizeInBits() < 32)
return SDValue();
- // Need a shift by 16.
- APInt ShiftAmt;
- if (!ISD::isConstantSplatVector(N->getOperand(1).getNode(), ShiftAmt) ||
- ShiftAmt != 16)
+ // The operation must be a multiply shifted right by 16.
+ SDValue LHS, RHS;
+ if (!sd_match(N->getOperand(1), m_SpecificInt(16)) ||
+ !sd_match(N->getOperand(0), m_OneUse(m_Mul(m_Value(LHS), m_Value(RHS)))))
return SDValue();
- SDValue LHS = ShiftOperand.getOperand(0);
- SDValue RHS = ShiftOperand.getOperand(1);
-
unsigned ExtOpc = LHS.getOpcode();
if ((ExtOpc != ISD::SIGN_EXTEND && ExtOpc != ISD::ZERO_EXTEND) ||
RHS.getOpcode() != ExtOpc)
More information about the llvm-commits
mailing list