From 4472838fc8a7f2f08aec27c284b64bc28bef0468 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 21 Feb 2012 06:22:36 +0000 Subject: [PATCH] Merge some tables in generated RegisterInfo file. Store indices into larger table instead of pointers to reduce relocations and shrink table size on 64-bit builds. Shaves ~24K off X86MCTargetDesc.o git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151038 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCRegisterInfo.h | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/include/llvm/MC/MCRegisterInfo.h b/include/llvm/MC/MCRegisterInfo.h index 4d4e9f66d73..2bf754ed9a9 100644 --- a/include/llvm/MC/MCRegisterInfo.h +++ b/include/llvm/MC/MCRegisterInfo.h @@ -105,10 +105,10 @@ public: /// of AX. /// struct MCRegisterDesc { - const char *Name; // Printable name for the reg (for debugging) - const unsigned *Overlaps; // Overlapping registers, described above - const unsigned *SubRegs; // Sub-register set, described above - const unsigned *SuperRegs; // Super-register set, described above + const char *Name; // Printable name for the reg (for debugging) + int Overlaps; // Overlapping registers, described above + int SubRegs; // Sub-register set, described above + int SuperRegs; // Super-register set, described above }; /// MCRegisterInfo base class - We assume that the target defines a static @@ -132,6 +132,9 @@ private: unsigned RAReg; // Return address register const MCRegisterClass *Classes; // Pointer to the regclass array unsigned NumClasses; // Number of entries in the array + const unsigned *Overlaps; // Pointer to the overlaps array + const unsigned *SubRegs; // Pointer to the subregs array + const unsigned *SuperRegs; // Pointer to the superregs array DenseMap L2DwarfRegs; // LLVM to Dwarf regs mapping DenseMap EHL2DwarfRegs; // LLVM to Dwarf regs mapping EH DenseMap Dwarf2LRegs; // Dwarf to LLVM regs mapping @@ -142,11 +145,16 @@ public: /// InitMCRegisterInfo - Initialize MCRegisterInfo, called by TableGen /// auto-generated routines. *DO NOT USE*. void InitMCRegisterInfo(const MCRegisterDesc *D, unsigned NR, unsigned RA, - const MCRegisterClass *C, unsigned NC) { + const MCRegisterClass *C, unsigned NC, + const unsigned *O, const unsigned *Sub, + const unsigned *Super) { Desc = D; NumRegs = NR; RAReg = RA; Classes = C; + Overlaps = O; + SubRegs = Sub; + SuperRegs = Super; NumClasses = NC; } @@ -204,7 +212,8 @@ public: /// const unsigned *getAliasSet(unsigned RegNo) const { // The Overlaps set always begins with Reg itself. - return get(RegNo).Overlaps + 1; + if (get(RegNo).Overlaps < 0) return 0; + return Overlaps + get(RegNo).Overlaps + 1; } /// getOverlaps - Return a list of registers that overlap Reg, including @@ -213,7 +222,8 @@ public: /// These are exactly the registers in { x | regsOverlap(x, Reg) }. /// const unsigned *getOverlaps(unsigned RegNo) const { - return get(RegNo).Overlaps; + if (get(RegNo).Overlaps < 0) return 0; + return Overlaps + get(RegNo).Overlaps; } /// getSubRegisters - Return the list of registers that are sub-registers of @@ -222,7 +232,8 @@ public: /// relations. e.g. X86::RAX's sub-register list is EAX, AX, AL, AH. /// const unsigned *getSubRegisters(unsigned RegNo) const { - return get(RegNo).SubRegs; + if (get(RegNo).SubRegs < 0) return 0; + return SubRegs + get(RegNo).SubRegs; } /// getSuperRegisters - Return the list of registers that are super-registers @@ -231,7 +242,8 @@ public: /// relations. e.g. X86::AL's super-register list is AX, EAX, RAX. /// const unsigned *getSuperRegisters(unsigned RegNo) const { - return get(RegNo).SuperRegs; + if (get(RegNo).SuperRegs < 0) return 0; + return SuperRegs + get(RegNo).SuperRegs; } /// getName - Return the human-readable symbolic target-specific name for the -- 2.34.1