1 //===- X86RegisterInfo.h - X86 Register Information Impl ----------*-C++-*-===//
3 // This file contains the X86 implementation of the MRegisterInfo class.
5 //===----------------------------------------------------------------------===//
7 #ifndef X86REGISTERINFO_H
8 #define X86REGISTERINFO_H
10 #include "llvm/Target/MRegisterInfo.h"
14 struct X86RegisterInfo : public MRegisterInfo {
17 MRegisterInfo::const_iterator const_regclass_begin() const;
18 MRegisterInfo::const_iterator const_regclass_end() const;
20 MachineBasicBlock::iterator
21 storeReg2RegOffset(MachineBasicBlock *MBB,
22 MachineBasicBlock::iterator MBBI,
23 unsigned DestReg, unsigned SrcReg,
24 unsigned ImmOffset, unsigned dataSize) const;
26 MachineBasicBlock::iterator
27 loadRegOffset2Reg(MachineBasicBlock *MBB,
28 MachineBasicBlock::iterator MBBI,
29 unsigned DestReg, unsigned SrcReg,
30 unsigned ImmOffset, unsigned dataSize) const;
32 MachineBasicBlock::iterator
33 moveReg2Reg(MachineBasicBlock *MBB,
34 MachineBasicBlock::iterator MBBI,
35 unsigned DestReg, unsigned SrcReg, unsigned dataSize) const;
37 MachineBasicBlock::iterator
38 moveImm2Reg(MachineBasicBlock *MBB,
39 MachineBasicBlock::iterator MBBI,
40 unsigned DestReg, unsigned Imm, unsigned dataSize) const;
42 unsigned getFramePointer() const;
43 unsigned getStackPointer() const;
45 const unsigned* getCalleeSaveRegs() const;
46 const unsigned* getCallerSaveRegs() const;
48 MachineBasicBlock::iterator emitPrologue(MachineBasicBlock *MBB,
49 MachineBasicBlock::iterator MBBI,
50 unsigned numBytes) const;
52 MachineBasicBlock::iterator emitEpilogue(MachineBasicBlock *MBB,
53 MachineBasicBlock::iterator MBBI,
54 unsigned numBytes) const;
56 /// Returns register class appropriate for input SSA register
58 const TargetRegisterClass *getClassForReg(unsigned Reg) const;
60 const TargetRegisterClass* getRegClassForType(const Type* Ty) const;
62 unsigned getNumRegClasses() const;