aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2012-02-21 06:22:36 +0000
committerCraig Topper <craig.topper@gmail.com>2012-02-21 06:22:36 +0000
commit4472838fc8a7f2f08aec27c284b64bc28bef0468 (patch)
tree11114e74095ad9dcdcf3780772716046c0b0c931
parent19273aec441411b4d571fdb87c6daa0fbe7a33a0 (diff)
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
-rw-r--r--include/llvm/MC/MCRegisterInfo.h30
1 files changed, 21 insertions, 9 deletions
diff --git a/include/llvm/MC/MCRegisterInfo.h b/include/llvm/MC/MCRegisterInfo.h
index 4d4e9f66d7..2bf754ed9a 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<unsigned, int> L2DwarfRegs; // LLVM to Dwarf regs mapping
DenseMap<unsigned, int> EHL2DwarfRegs; // LLVM to Dwarf regs mapping EH
DenseMap<unsigned, unsigned> 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