aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-12-15 19:29:14 +0000
committerChris Lattner <sabre@nondot.org>2002-12-15 19:29:14 +0000
commit0f24e33b73542bd7b280550aec6cff32d808e724 (patch)
tree9a540ad68df90c76b35039ecb38ca267bc623967
parent9593fb1503067c16b4e21dd2b8af676d64ca0440 (diff)
Simplify TargetRegisterClass a bit, also eliminating virtual function call
overhead git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5049 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Target/MRegisterInfo.h32
1 files changed, 18 insertions, 14 deletions
diff --git a/include/llvm/Target/MRegisterInfo.h b/include/llvm/Target/MRegisterInfo.h
index b7613c4d0d..2fa4a5ada9 100644
--- a/include/llvm/Target/MRegisterInfo.h
+++ b/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;