XCoreRegisterInfo.h revision 33464912237efaa0ed7060829e66b59055bdd48b
1//===- XCoreRegisterInfo.h - XCore Register Information Impl ----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains the XCore implementation of the MRegisterInfo class. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef XCOREREGISTERINFO_H 15#define XCOREREGISTERINFO_H 16 17#include "llvm/Target/TargetRegisterInfo.h" 18#include "XCoreGenRegisterInfo.h.inc" 19 20namespace llvm { 21 22class TargetInstrInfo; 23 24struct XCoreRegisterInfo : public XCoreGenRegisterInfo { 25private: 26 const TargetInstrInfo &TII; 27 28 void loadConstant(MachineBasicBlock &MBB, 29 MachineBasicBlock::iterator I, 30 unsigned DstReg, int64_t Value, DebugLoc dl) const; 31 32 void storeToStack(MachineBasicBlock &MBB, 33 MachineBasicBlock::iterator I, 34 unsigned SrcReg, int Offset, DebugLoc dl) const; 35 36 void loadFromStack(MachineBasicBlock &MBB, 37 MachineBasicBlock::iterator I, 38 unsigned DstReg, int Offset, DebugLoc dl) const; 39 40public: 41 XCoreRegisterInfo(const TargetInstrInfo &tii); 42 43 /// Code Generation virtual methods... 44 45 const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const; 46 47 BitVector getReservedRegs(const MachineFunction &MF) const; 48 49 bool requiresRegisterScavenging(const MachineFunction &MF) const; 50 51 bool hasFP(const MachineFunction &MF) const; 52 53 void eliminateCallFramePseudoInstr(MachineFunction &MF, 54 MachineBasicBlock &MBB, 55 MachineBasicBlock::iterator I) const; 56 57 void eliminateFrameIndex(MachineBasicBlock::iterator II, 58 int SPAdj, RegScavenger *RS = NULL) const; 59 60 void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, 61 RegScavenger *RS = NULL) const; 62 63 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 64 65 // Debug information queries. 66 unsigned getRARegister() const; 67 unsigned getFrameRegister(const MachineFunction &MF) const; 68 void getInitialFrameState(std::vector<MachineMove> &Moves) const; 69 70 //! Return the array of argument passing registers 71 /*! 72 \note The size of this array is returned by getArgRegsSize(). 73 */ 74 static const unsigned *getArgRegs(const MachineFunction *MF = 0); 75 76 //! Return the size of the argument passing register array 77 static unsigned getNumArgRegs(const MachineFunction *MF = 0); 78 79 //! Return whether to emit frame moves 80 static bool needsFrameMoves(const MachineFunction &MF); 81 82 //! Get DWARF debugging register number 83 int getDwarfRegNum(unsigned RegNum, bool isEH) const; 84}; 85 86} // end namespace llvm 87 88#endif 89