[llvm] dbee656 - [RDF] Add RegisterRef::idx and make toUnitId constexpr

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 13 06:10:25 PDT 2023


Author: Krzysztof Parzyszek
Date: 2023-06-13T06:04:09-07:00
New Revision: dbee6567ca90f42995a482d00298d9e6f4305d9c

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

LOG: [RDF] Add RegisterRef::idx and make toUnitId constexpr

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/RDFRegisters.h
    llvm/lib/CodeGen/RDFRegisters.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/RDFRegisters.h b/llvm/include/llvm/CodeGen/RDFRegisters.h
index 4b7ace48ff0e3..7bbf11c9ebd14 100644
--- a/llvm/include/llvm/CodeGen/RDFRegisters.h
+++ b/llvm/include/llvm/CodeGen/RDFRegisters.h
@@ -84,6 +84,8 @@ struct RegisterRef {
   constexpr bool isUnit() const { return isUnitId(Reg); }
   constexpr bool isMask() const { return isMaskId(Reg); }
 
+  constexpr unsigned idx() const { return toIdx(Reg); }
+
   constexpr operator bool() const {
     return !isReg() || (Reg != 0 && Mask.any());
   }
@@ -103,10 +105,18 @@ struct RegisterRef {
     return Register::isStackSlot(Id);
   }
 
-  static RegisterId toUnitId(unsigned Idx) {
-    return Register::index2VirtReg(Idx);
+  static constexpr RegisterId toUnitId(unsigned Idx) {
+    return Idx | MCRegister::VirtualRegFlag;
+  }
+
+  static constexpr unsigned toIdx(RegisterId Id) {
+    // Not using virtReg2Index or stackSlot2Index, because they are
+    // not constexpr.
+    if (isUnitId(Id))
+      return Id & ~MCRegister::VirtualRegFlag;
+    // RegId and MaskId are unchanged.
+    return Id;
   }
-  static unsigned toRegUnit(RegisterId U) { return Register::virtReg2Index(U); }
 
   bool operator<(RegisterRef) const = delete;
   bool operator==(RegisterRef) const = delete;

diff  --git a/llvm/lib/CodeGen/RDFRegisters.cpp b/llvm/lib/CodeGen/RDFRegisters.cpp
index 5af6822ecfacb..7e6d33b1825e6 100644
--- a/llvm/lib/CodeGen/RDFRegisters.cpp
+++ b/llvm/lib/CodeGen/RDFRegisters.cpp
@@ -332,13 +332,13 @@ bool PhysicalRegisterInfo::less(RegisterRef A, RegisterRef B) const {
 
 void PhysicalRegisterInfo::print(raw_ostream &OS, RegisterRef A) const {
   if (A.Reg == 0 || A.isReg()) {
-    if (0 < A.Reg && A.Reg < TRI.getNumRegs())
-      OS << TRI.getName(A.Reg);
+    if (0 < A.idx() && A.idx() < TRI.getNumRegs())
+      OS << TRI.getName(A.idx());
     else
       OS << printReg(A.Reg, &TRI);
     OS << PrintLaneMaskShort(A.Mask);
   } else if (A.isUnit()) {
-    OS << printRegUnit(A.toRegUnit(A.Reg), &TRI);
+    OS << printRegUnit(A.idx(), &TRI);
   } else {
     assert(A.isMask());
     OS << '#' << format("%08x", A.Reg);


        


More information about the llvm-commits mailing list