[llvm] 8704e55 - [RISCV] Remove unneeded plumbing of MRI in VLOptimizer. NFC

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 4 23:51:40 PDT 2025


Author: Luke Lau
Date: 2025-09-05T14:49:32+08:00
New Revision: 8704e552f249b319800b3dffa9c029ef4ecffb98

URL: https://github.com/llvm/llvm-project/commit/8704e552f249b319800b3dffa9c029ef4ecffb98
DIFF: https://github.com/llvm/llvm-project/commit/8704e552f249b319800b3dffa9c029ef4ecffb98.diff

LOG: [RISCV] Remove unneeded plumbing of MRI in VLOptimizer. NFC

getOperandInfo and getOperandLog2EEW don't use MRI anymore, and
isTupleInsertInstr can fetch MRI from the MachineOperand itself.

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
index 4d4f1db215220..29526cf5a5273 100644
--- a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
+++ b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
@@ -191,8 +191,7 @@ static unsigned getIntegerExtensionOperandEEW(unsigned Factor,
 #define VSUXSEG_CASES(EEW)  VSEG_CASES(VSUX, I##EEW)
 #define VSOXSEG_CASES(EEW)  VSEG_CASES(VSOX, I##EEW)
 
-static std::optional<unsigned>
-getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
+static std::optional<unsigned> getOperandLog2EEW(const MachineOperand &MO) {
   const MachineInstr &MI = *MO.getParent();
   const MCInstrDesc &Desc = MI.getDesc();
   const RISCVVPseudosTable::PseudoInfo *RVV =
@@ -810,14 +809,13 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
   }
 }
 
-static std::optional<OperandInfo>
-getOperandInfo(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
+static std::optional<OperandInfo> getOperandInfo(const MachineOperand &MO) {
   const MachineInstr &MI = *MO.getParent();
   const RISCVVPseudosTable::PseudoInfo *RVV =
       RISCVVPseudosTable::getPseudoInfo(MI.getOpcode());
   assert(RVV && "Could not find MI in PseudoTable");
 
-  std::optional<unsigned> Log2EEW = getOperandLog2EEW(MO, MRI);
+  std::optional<unsigned> Log2EEW = getOperandLog2EEW(MO);
   if (!Log2EEW)
     return std::nullopt;
 
@@ -1407,11 +1405,11 @@ RISCVVLOptimizer::getMinimumVLForUser(const MachineOperand &UserOp) const {
 /// Return true if MI is an instruction used for assembling registers
 /// for segmented store instructions, namely, RISCVISD::TUPLE_INSERT.
 /// Currently it's lowered to INSERT_SUBREG.
-static bool isTupleInsertInstr(const MachineInstr &MI,
-                               const MachineRegisterInfo &MRI) {
-  if (MI.getOpcode() != RISCV::INSERT_SUBREG)
+static bool isTupleInsertInstr(const MachineInstr &MI) {
+  if (!MI.isInsertSubreg())
     return false;
 
+  const MachineRegisterInfo &MRI = MI.getMF()->getRegInfo();
   const TargetRegisterClass *DstRC = MRI.getRegClass(MI.getOperand(0).getReg());
   const TargetRegisterInfo *TRI = MRI.getTargetRegisterInfo();
   if (!RISCVRI::isVRegClass(DstRC->TSFlags))
@@ -1472,7 +1470,7 @@ RISCVVLOptimizer::checkUsers(const MachineInstr &MI) const {
       continue;
     }
 
-    if (isTupleInsertInstr(UserMI, *MRI)) {
+    if (isTupleInsertInstr(UserMI)) {
       LLVM_DEBUG(dbgs().indent(4) << "Peeking through uses of INSERT_SUBREG\n");
       for (MachineOperand &UseOp :
            MRI->use_operands(UserMI.getOperand(0).getReg())) {
@@ -1481,7 +1479,7 @@ RISCVVLOptimizer::checkUsers(const MachineInstr &MI) const {
         // or another INSERT_SUBREG, since VL just works 
diff erently
         // between segmented operations (per-field) v.s. other RVV ops (on the
         // whole register group).
-        if (!isTupleInsertInstr(CandidateMI, *MRI) &&
+        if (!isTupleInsertInstr(CandidateMI) &&
             !isSegmentedStoreInstr(CandidateMI))
           return std::nullopt;
         Worklist.insert(&UseOp);
@@ -1518,9 +1516,8 @@ RISCVVLOptimizer::checkUsers(const MachineInstr &MI) const {
       return std::nullopt;
     }
 
-    std::optional<OperandInfo> ConsumerInfo = getOperandInfo(UserOp, MRI);
-    std::optional<OperandInfo> ProducerInfo =
-        getOperandInfo(MI.getOperand(0), MRI);
+    std::optional<OperandInfo> ConsumerInfo = getOperandInfo(UserOp);
+    std::optional<OperandInfo> ProducerInfo = getOperandInfo(MI.getOperand(0));
     if (!ConsumerInfo || !ProducerInfo) {
       LLVM_DEBUG(dbgs() << "    Abort due to unknown operand information.\n");
       LLVM_DEBUG(dbgs() << "      ConsumerInfo is: " << ConsumerInfo << "\n");


        


More information about the llvm-commits mailing list