[llvm] 3cd503f - [NFC][RISCV] Move calculations of SDNode policy operand idx to a separate function
ShihPo Hung via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 20 10:37:08 PDT 2022
Author: Anton Sidorenko
Date: 2022-09-20T10:36:47-07:00
New Revision: 3cd503f181612364e099f1f3d921fe95a5f38070
URL: https://github.com/llvm/llvm-project/commit/3cd503f181612364e099f1f3d921fe95a5f38070
DIFF: https://github.com/llvm/llvm-project/commit/3cd503f181612364e099f1f3d921fe95a5f38070.diff
LOG: [NFC][RISCV] Move calculations of SDNode policy operand idx to a separate function
Since there is no guaranteed correspondence of SDNode and MI operands, we need
getters simular to RISCVII::get*OpNum for SDNodes.
More uses of getVecPolicyOpIdx will be added in D130895.
Reviewed By: craig.topper, arcbbb
Differential Revision: https://reviews.llvm.org/D134179
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
index dcdcb155f904..4015bc4a209f 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
@@ -40,6 +40,22 @@ namespace llvm::RISCV {
#include "RISCVGenSearchableTables.inc"
} // namespace llvm::RISCV
+static unsigned getLastNonGlueOrChainOpIdx(const SDNode *Node) {
+ assert(Node->getNumOperands() > 0 && "Node with no operands");
+ unsigned LastOpIdx = Node->getNumOperands() - 1;
+ if (Node->getOperand(LastOpIdx).getValueType() == MVT::Glue)
+ --LastOpIdx;
+ if (Node->getOperand(LastOpIdx).getValueType() == MVT::Other)
+ --LastOpIdx;
+ return LastOpIdx;
+}
+
+static unsigned getVecPolicyOpIdx(const SDNode *Node, const MCInstrDesc &MCID) {
+ assert(RISCVII::hasVecPolicyOp(MCID.TSFlags));
+ (void)MCID;
+ return getLastNonGlueOrChainOpIdx(Node);
+}
+
void RISCVDAGToDAGISel::PreprocessISelDAG() {
SelectionDAG::allnodes_iterator Position = CurDAG->allnodes_end();
@@ -2562,14 +2578,7 @@ bool RISCVDAGToDAGISel::doPeepholeMaskedRVV(SDNode *N) {
bool IsTA = true;
if (RISCVII::hasVecPolicyOp(MaskedMCID.TSFlags)) {
- // The last operand of the pseudo is the policy op, but we might have a
- // Glue operand last. We might also have a chain.
- TailPolicyOpIdx = N->getNumOperands() - 1;
- if (N->getOperand(*TailPolicyOpIdx).getValueType() == MVT::Glue)
- (*TailPolicyOpIdx)--;
- if (N->getOperand(*TailPolicyOpIdx).getValueType() == MVT::Other)
- (*TailPolicyOpIdx)--;
-
+ TailPolicyOpIdx = getVecPolicyOpIdx(N, MaskedMCID);
if (!(N->getConstantOperandVal(*TailPolicyOpIdx) &
RISCVII::TAIL_AGNOSTIC)) {
// Keep the true-masked instruction when there is no unmasked TU
More information about the llvm-commits
mailing list