* Simplify TargetRegisterClass implementations
[oota-llvm.git] / lib / Target / X86 / X86RegisterInfo.h
index 243861bfebf2c118d305700180e8be9d9f151460..5b0c30cdde535dc06324e1dc1779a56e1848cbe6 100644 (file)
@@ -9,9 +9,58 @@
 
 #include "llvm/Target/MRegisterInfo.h"
 
+class Type;
+
 struct X86RegisterInfo : public MRegisterInfo {
   X86RegisterInfo();
 
+  MRegisterInfo::const_iterator regclass_begin() const;
+  MRegisterInfo::const_iterator regclass_end() const;
+
+  MachineBasicBlock::iterator
+  storeReg2RegOffset(MachineBasicBlock *MBB,
+                     MachineBasicBlock::iterator MBBI,
+                     unsigned DestReg, unsigned SrcReg, 
+                     unsigned ImmOffset, unsigned dataSize) const;
+
+  MachineBasicBlock::iterator
+  loadRegOffset2Reg(MachineBasicBlock *MBB,
+                    MachineBasicBlock::iterator MBBI,
+                    unsigned DestReg, unsigned SrcReg,
+                    unsigned ImmOffset, unsigned dataSize) const;
+
+  MachineBasicBlock::iterator
+  moveReg2Reg(MachineBasicBlock *MBB,
+              MachineBasicBlock::iterator MBBI,
+              unsigned DestReg, unsigned SrcReg, unsigned dataSize) const;
+
+  MachineBasicBlock::iterator
+  moveImm2Reg(MachineBasicBlock *MBB,
+              MachineBasicBlock::iterator MBBI,
+              unsigned DestReg, unsigned Imm, unsigned dataSize) const;
+
+  unsigned getFramePointer() const;
+  unsigned getStackPointer() const;
+
+  const unsigned* getCalleeSaveRegs() const;
+  const unsigned* getCallerSaveRegs() const;
+
+  MachineBasicBlock::iterator emitPrologue(MachineBasicBlock *MBB,
+                                           MachineBasicBlock::iterator MBBI,
+                                           unsigned numBytes) const;
+
+  MachineBasicBlock::iterator emitEpilogue(MachineBasicBlock *MBB,
+                                           MachineBasicBlock::iterator MBBI,
+                                           unsigned numBytes) const;
+
+  /// Returns register class appropriate for input SSA register
+  /// 
+  const TargetRegisterClass *getClassForReg(unsigned Reg) const;
+
+  const TargetRegisterClass* getRegClassForType(const Type* Ty) const;
+
+  unsigned getNumRegClasses() const;
+
 };
 
 #endif