diff options
author | Chris Lattner <sabre@nondot.org> | 2002-12-15 19:29:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-12-15 19:29:14 +0000 |
commit | df1f77207afee1316559f7878dad8ceeec2afa03 (patch) | |
tree | b3b4b0880cfc78f906e42d614bf324aff4d2d2a3 | |
parent | f2acd842b49b9e5523dbaf83b2e8c8c13618e64a (diff) | |
download | bcm5719-llvm-df1f77207afee1316559f7878dad8ceeec2afa03.tar.gz bcm5719-llvm-df1f77207afee1316559f7878dad8ceeec2afa03.zip |
Simplify TargetRegisterClass a bit, also eliminating virtual function call
overhead
llvm-svn: 5049
-rw-r--r-- | llvm/include/llvm/Target/MRegisterInfo.h | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/llvm/include/llvm/Target/MRegisterInfo.h b/llvm/include/llvm/Target/MRegisterInfo.h index b7613c4d0da..2fa4a5ada9a 100644 --- a/llvm/include/llvm/Target/MRegisterInfo.h +++ b/llvm/include/llvm/Target/MRegisterInfo.h @@ -42,25 +42,29 @@ namespace MRF { // MRF = Machine Register Flags }; class TargetRegisterClass { -protected: - TargetRegisterClass() {} - public: + typedef const unsigned* iterator; + typedef const unsigned* const_iterator; - typedef unsigned* iterator; - typedef unsigned* const_iterator; +private: + const unsigned RegSize; // Size of register in bytes + const iterator RegsBegin, RegsEnd; +public: + TargetRegisterClass(unsigned RS, iterator RB, iterator RE) + : RegSize(RS), RegsBegin(RB), RegsEnd(RE) {} + virtual ~TargetRegisterClass() {} // Allow subclasses - iterator begin(); - iterator end(); - const_iterator begin() const; - const_iterator end() const; + iterator begin() const { return RegsBegin; } + iterator end() const { return RegsEnd; } - virtual unsigned getNumRegs() const { return 0; } - virtual unsigned getRegister(unsigned idx) const { return 0; } + unsigned getNumRegs() const { return RegsEnd-RegsBegin; } + unsigned getRegister(unsigned i) const { + assert(i < getNumRegs() && "Register number out of range!"); + return RegsBegin[i]; + } - virtual unsigned getDataSize() const { return 0; } + unsigned getDataSize() const { return RegSize; } - //const std::vector<unsigned> &getRegsInClass(void) { return Regs; } //void getAliases(void); }; @@ -146,7 +150,7 @@ public: virtual unsigned getStackPointer() const = 0; /// Register class iterators - typedef const TargetRegisterClass** const_iterator; + typedef const TargetRegisterClass * const * const_iterator; virtual const_iterator regclass_begin() const = 0; virtual const_iterator regclass_end() const = 0; |