diff --git a/include/llvm/Target/MRegisterInfo.h b/include/llvm/Target/MRegisterInfo.h index 99247cf1966..c79b2584a5e 100644 --- a/include/llvm/Target/MRegisterInfo.h +++ b/include/llvm/Target/MRegisterInfo.h @@ -6,11 +6,14 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CODEGEN_MREGISTERINFO_H -#define LLVM_CODEGEN_MREGISTERINFO_H +#ifndef LLVM_TARGET_MREGISTERINFO_H +#define LLVM_TARGET_MREGISTERINFO_H +#include "llvm/CodeGen/MachineBasicBlock.h" #include +class Type; + /// MRegisterDesc - This record contains all of the information known about a /// particular register. /// @@ -38,6 +41,30 @@ namespace MRF { // MRF = Machine Register Flags }; }; +class TargetRegisterClass { +protected: + TargetRegisterClass() {} + +public: + + 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; } + + virtual unsigned getDataSize() const { return 0; } + + //const std::vector &getRegsInClass(void) { return Regs; } + //void getAliases(void); +}; + + /// MRegisterInfo base class - We assume that the target defines a static array /// of MRegisterDesc objects that represent all of the machine registers that /// the target has. As such, we simply have to track a pointer to this array so @@ -79,8 +106,25 @@ public: /// const MRegisterDesc &get(unsigned RegNo) const { return operator[](RegNo); } - // This will eventually get some virtual methods... - + + virtual void copyReg2PCRel(MachineBasicBlock *MBB, + MachineBasicBlock::iterator &MBBI, + unsigned SrcReg, unsigned ImmOffset, + unsigned dataSize) const = 0; + + virtual void copyPCRel2Reg(MachineBasicBlock *MBB, + MachineBasicBlock::iterator &MBBI, + unsigned ImmOffset, unsigned DestReg, + unsigned dataSize) const = 0; + + /// Register class iterators + typedef const TargetRegisterClass* const_iterator; + + virtual const_iterator const_regclass_begin() const = 0; + virtual const_iterator const_regclass_end() const = 0; + + virtual unsigned getNumRegClasses() const = 0; + virtual const TargetRegisterClass* getRegClassForType(const Type* Ty) const=0; }; #endif diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index ab668d3dde0..484055635f7 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -1,4 +1,4 @@ -//===-- llvm/Target/Machine.h - General Target Information -------*- C++ -*-==// +//===-- llvm/Target/TargetMachine.h - General Target Information -*- C++ -*-==// // // This file describes the general parts of a Target machine. // @@ -68,7 +68,7 @@ public: virtual const MachineOptInfo& getOptInfo() const = 0; /// getRegisterInfo - If register information is available, return it. If - /// not, return null. This is kept seperate from RegInfo until RegInfo gets + /// not, return null. This is kept separate from RegInfo until RegInfo gets /// straightened out. /// virtual const MRegisterInfo* getRegisterInfo() const { return 0; }