XCoreRegisterInfo.h revision 212904
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 void emitPrologue(MachineFunction &MF) const; 66 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 67 68 // Debug information queries. 69 unsigned getRARegister() const; 70 unsigned getFrameRegister(const MachineFunction &MF) const; 71 void getInitialFrameState(std::vector<MachineMove> &Moves) const; 72 73 //! Return the array of argument passing registers 74 /*! 75 \note The size of this array is returned by getArgRegsSize(). 76 */ 77 static const unsigned *getArgRegs(const MachineFunction *MF = 0); 78 79 //! Return the size of the argument passing register array 80 static unsigned getNumArgRegs(const MachineFunction *MF = 0); 81 82 //! Return whether to emit frame moves 83 static bool needsFrameMoves(const MachineFunction &MF); 84 85 //! Get DWARF debugging register number 86 int getDwarfRegNum(unsigned RegNum, bool isEH) const; 87}; 88 89} // end namespace llvm 90 91#endif 92