[llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h

Chris Lattner lattner at cs.uiuc.edu
Sun Dec 15 13:30:01 PST 2002


Changes in directory llvm/include/llvm/Target:

MRegisterInfo.h updated: 1.9 -> 1.10

---
Log message:

Simplify TargetRegisterClass a bit, also eliminating virtual function call
overhead


---
Diffs of the changes:

Index: llvm/include/llvm/Target/MRegisterInfo.h
diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.9 llvm/include/llvm/Target/MRegisterInfo.h:1.10
--- llvm/include/llvm/Target/MRegisterInfo.h:1.9	Sun Dec 15 12:40:01 2002
+++ llvm/include/llvm/Target/MRegisterInfo.h	Sun Dec 15 13:29:14 2002
@@ -42,25 +42,29 @@
 };
 
 class TargetRegisterClass {
-protected:
-  TargetRegisterClass() {}
-
 public:
+  typedef const unsigned* iterator;
+  typedef const unsigned* const_iterator;
 
-  typedef unsigned* iterator;
-  typedef unsigned* const_iterator;
-
-  iterator       begin();
-  iterator         end();
-  const_iterator begin() const;
-  const_iterator   end() const;
-
-  virtual unsigned getNumRegs() const { return 0; }
-  virtual unsigned getRegister(unsigned idx) const { return 0; }
+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() const { return RegsBegin; }
+  iterator         end() const { return RegsEnd; }
+
+  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 @@
   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;





More information about the llvm-commits mailing list