78d3bdda8132e63e032a2e7ab085d5e6bf4d7282
[oota-llvm.git] / lib / Target / X86 / X86RegisterInfo.h
1 //===- X86RegisterInfo.h - X86 Register Information Impl ----------*-C++-*-===//
2 //
3 // This file contains the X86 implementation of the MRegisterInfo class.
4 //
5 //===----------------------------------------------------------------------===//
6
7 #ifndef X86REGISTERINFO_H
8 #define X86REGISTERINFO_H
9
10 #include "llvm/Target/MRegisterInfo.h"
11
12 class Type;
13
14 struct X86RegisterInfo : public MRegisterInfo {
15   X86RegisterInfo();
16
17   MRegisterInfo::const_iterator const_regclass_begin() const;
18   MRegisterInfo::const_iterator const_regclass_end() const;
19
20   MachineBasicBlock::iterator
21   storeReg2RegOffset(MachineBasicBlock *MBB,
22                      MachineBasicBlock::iterator MBBI,
23                      unsigned DestReg, unsigned SrcReg, 
24                      unsigned ImmOffset, unsigned dataSize) const;
25
26   MachineBasicBlock::iterator
27   loadRegOffset2Reg(MachineBasicBlock *MBB,
28                     MachineBasicBlock::iterator MBBI,
29                     unsigned DestReg, unsigned SrcReg,
30                     unsigned ImmOffset, unsigned dataSize) const;
31
32   MachineBasicBlock::iterator
33   moveReg2Reg(MachineBasicBlock *MBB,
34               MachineBasicBlock::iterator MBBI,
35               unsigned DestReg, unsigned SrcReg, unsigned dataSize) const;
36
37   MachineBasicBlock::iterator
38   moveImm2Reg(MachineBasicBlock *MBB,
39               MachineBasicBlock::iterator MBBI,
40               unsigned DestReg, unsigned Imm, unsigned dataSize) const;
41
42   unsigned getFramePointer() const;
43   unsigned getStackPointer() const;
44
45   const unsigned* getCalleeSaveRegs() const;
46   const unsigned* getCallerSaveRegs() const;
47
48   MachineBasicBlock::iterator emitPrologue(MachineBasicBlock *MBB,
49                                            MachineBasicBlock::iterator MBBI,
50                                            unsigned numBytes) const;
51
52   MachineBasicBlock::iterator emitEpilogue(MachineBasicBlock *MBB,
53                                            MachineBasicBlock::iterator MBBI,
54                                            unsigned numBytes) const;
55
56   /// Returns register class appropriate for input SSA register
57   /// 
58   const TargetRegisterClass *getClassForReg(unsigned Reg) const;
59
60   const TargetRegisterClass* getRegClassForType(const Type* Ty) const;
61
62   unsigned getNumRegClasses() const;
63
64 };
65
66 #endif