[llvm] [RISCV] Simplify FindRegWithEncoding in copyPhysRegVector. NFC (PR #89001)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 16 16:34:41 PDT 2024


https://github.com/topperc created https://github.com/llvm/llvm-project/pull/89001

Instead of searching all encodings, we can convert the encoding back to a register and use getMatchingSuperReg.

>From 748fd08f9feb52880b8e8f5622e95cf067bcde71 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Tue, 16 Apr 2024 16:29:43 -0700
Subject: [PATCH] [RISCV] Simplify FindRegWithEncoding in copyPhysRegVector.
 NFC

Instead of searching all encodings, we can use getMatchingSuperReg.
---
 llvm/lib/Target/RISCV/RISCVInstrInfo.cpp | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
index 14b5cbea71722f..8331fc0b8c3024 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
@@ -361,15 +361,12 @@ void RISCVInstrInfo::copyPhysRegVector(
     return {RISCVII::LMUL_1, RISCV::VRRegClass, RISCV::VMV1R_V,
             RISCV::PseudoVMV_V_V_M1, RISCV::PseudoVMV_V_I_M1};
   };
-  auto FindRegWithEncoding = [&TRI](const TargetRegisterClass &RegClass,
-                                    uint16_t Encoding) {
-    ArrayRef<MCPhysReg> Regs = RegClass.getRegisters();
-    const auto *FoundReg = llvm::find_if(Regs, [&](MCPhysReg Reg) {
-      return TRI->getEncodingValue(Reg) == Encoding;
-    });
-    // We should be always able to find one valid register.
-    assert(FoundReg != Regs.end());
-    return *FoundReg;
+  auto FindRegWithEncoding = [TRI](const TargetRegisterClass &RegClass,
+                                   uint16_t Encoding) {
+    MCRegister Reg = RISCV::V0 + Encoding;
+    if (&RegClass == &RISCV::VRRegClass)
+      return Reg;
+    return TRI->getMatchingSuperReg(Reg, RISCV::sub_vrm1_0, &RegClass);
   };
   while (I != NumRegs) {
     // For non-segment copying, we only do this once as the registers are always



More information about the llvm-commits mailing list