[llvm] f88fd89 - [RISCV] Extract tryUnsignedBitfieldExtract as a member function of RISCVDAGToDAGISel. NFC.
Jim Lin via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 19 22:53:37 PDT 2025
Author: Jim Lin
Date: 2025-04-20T13:35:22+08:00
New Revision: f88fd89909deaf7a174544b02c973a3c2ada02d6
URL: https://github.com/llvm/llvm-project/commit/f88fd89909deaf7a174544b02c973a3c2ada02d6
DIFF: https://github.com/llvm/llvm-project/commit/f88fd89909deaf7a174544b02c973a3c2ada02d6.diff
LOG: [RISCV] Extract tryUnsignedBitfieldExtract as a member function of RISCVDAGToDAGISel. NFC.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
index 2d07a66ff275e..093e8b5966fee 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
@@ -663,6 +663,20 @@ bool RISCVDAGToDAGISel::trySignedBitfieldExtract(SDNode *Node) {
return false;
}
+bool RISCVDAGToDAGISel::tryUnsignedBitfieldExtract(SDNode *Node, SDLoc DL,
+ MVT VT, SDValue X,
+ unsigned Msb, unsigned Lsb) {
+ // Only supported with XTHeadBb at the moment.
+ if (!Subtarget->hasVendorXTHeadBb())
+ return false;
+
+ SDNode *TH_EXTU = CurDAG->getMachineNode(
+ RISCV::TH_EXTU, DL, VT, X, CurDAG->getTargetConstant(Msb, DL, VT),
+ CurDAG->getTargetConstant(Lsb, DL, VT));
+ ReplaceNode(Node, TH_EXTU);
+ return true;
+}
+
bool RISCVDAGToDAGISel::tryIndexedLoad(SDNode *Node) {
// Target does not support indexed loads.
if (!Subtarget->hasVendorXTHeadMemIdx())
@@ -1122,16 +1136,12 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) {
return;
}
- unsigned LShAmt = Subtarget->getXLen() - TrailingOnes;
- if (Subtarget->hasVendorXTHeadBb()) {
- SDNode *THEXTU = CurDAG->getMachineNode(
- RISCV::TH_EXTU, DL, VT, N0->getOperand(0),
- CurDAG->getTargetConstant(TrailingOnes - 1, DL, VT),
- CurDAG->getTargetConstant(ShAmt, DL, VT));
- ReplaceNode(Node, THEXTU);
+ const unsigned Msb = TrailingOnes - 1;
+ const unsigned Lsb = ShAmt;
+ if (tryUnsignedBitfieldExtract(Node, DL, VT, N0->getOperand(0), Msb, Lsb))
return;
- }
+ unsigned LShAmt = Subtarget->getXLen() - TrailingOnes;
SDNode *SLLI =
CurDAG->getMachineNode(RISCV::SLLI, DL, VT, N0->getOperand(0),
CurDAG->getTargetConstant(LShAmt, DL, VT));
@@ -1188,19 +1198,6 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) {
SDValue N0 = Node->getOperand(0);
- auto tryUnsignedBitfieldExtract = [&](SDNode *Node, SDLoc DL, MVT VT,
- SDValue X, unsigned Msb,
- unsigned Lsb) {
- if (!Subtarget->hasVendorXTHeadBb())
- return false;
-
- SDNode *TH_EXTU = CurDAG->getMachineNode(
- RISCV::TH_EXTU, DL, VT, X, CurDAG->getTargetConstant(Msb, DL, VT),
- CurDAG->getTargetConstant(Lsb, DL, VT));
- ReplaceNode(Node, TH_EXTU);
- return true;
- };
-
bool LeftShift = N0.getOpcode() == ISD::SHL;
if (LeftShift || N0.getOpcode() == ISD::SRL) {
auto *C = dyn_cast<ConstantSDNode>(N0.getOperand(1));
diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h
index db09ad146b655..82a47a9a52501 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h
@@ -81,6 +81,8 @@ class RISCVDAGToDAGISel : public SelectionDAGISel {
bool tryShrinkShlLogicImm(SDNode *Node);
bool trySignedBitfieldExtract(SDNode *Node);
+ bool tryUnsignedBitfieldExtract(SDNode *Node, SDLoc DL, MVT VT, SDValue X,
+ unsigned Msb, unsigned Lsb);
bool tryIndexedLoad(SDNode *Node);
bool selectShiftMask(SDValue N, unsigned ShiftWidth, SDValue &ShAmt);
More information about the llvm-commits
mailing list