diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-01 13:37:55 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-01 13:37:55 +0000 |
commit | ccc8d3ba06408feff0ca6e58973c20d15010e3fc (patch) | |
tree | eb2847c69a9d298aebb358111cf6836317132250 /include/llvm/Target | |
parent | 54d42a740d2ca86a7b729bb1adc9275c304afacb (diff) | |
download | external_llvm-ccc8d3ba06408feff0ca6e58973c20d15010e3fc.zip external_llvm-ccc8d3ba06408feff0ca6e58973c20d15010e3fc.tar.gz external_llvm-ccc8d3ba06408feff0ca6e58973c20d15010e3fc.tar.bz2 |
Make TargetRegisterClasses non-virtual by making the only virtual function a function pointer.
This allows us to make TRC non-polymorphic and value-initializable, eliminating a huge static
initializer and a ton of cruft from the generated code.
Shrinks ARMBaseRegisterInfo.o by ~100k.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151806 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Target')
-rw-r--r-- | include/llvm/Target/TargetRegisterInfo.h | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/include/llvm/Target/TargetRegisterInfo.h b/include/llvm/Target/TargetRegisterInfo.h index 18f6fc3..9f18fc1 100644 --- a/include/llvm/Target/TargetRegisterInfo.h +++ b/include/llvm/Target/TargetRegisterInfo.h @@ -38,23 +38,14 @@ public: typedef const unsigned* const_iterator; typedef const MVT::SimpleValueType* vt_iterator; typedef const TargetRegisterClass* const * sc_iterator; -private: - virtual void anchor(); + + // Instance variables filled by tablegen, do not use! const MCRegisterClass *MC; const vt_iterator VTs; const unsigned *SubClassMask; const sc_iterator SuperClasses; const sc_iterator SuperRegClasses; -public: - TargetRegisterClass(const MCRegisterClass *MC, - const MVT::SimpleValueType *vts, - const unsigned *subcm, - const TargetRegisterClass * const *supcs, - const TargetRegisterClass * const *superregcs) - : MC(MC), VTs(vts), SubClassMask(subcm), SuperClasses(supcs), - SuperRegClasses(superregcs) {} - - virtual ~TargetRegisterClass() {} // Allow subclasses + ArrayRef<unsigned> (*OrderFunc)(const MachineFunction&); /// getID() - Return the register class ID number. /// @@ -199,9 +190,8 @@ public: /// /// By default, this method returns all registers in the class. /// - virtual ArrayRef<unsigned> getRawAllocationOrder(const MachineFunction &MF) const { - return makeArrayRef(begin(), getNumRegs()); + return OrderFunc ? OrderFunc(MF) : makeArrayRef(begin(), getNumRegs()); } }; |