XCoreRegisterInfo.h revision 204961
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 const TargetRegisterClass* const* getCalleeSavedRegClasses( 48 const MachineFunction *MF = 0) const; 49 50 BitVector getReservedRegs(const MachineFunction &MF) const; 51 52 bool requiresRegisterScavenging(const MachineFunction &MF) const; 53 54 bool hasFP(const MachineFunction &MF) const; 55 56 void eliminateCallFramePseudoInstr(MachineFunction &MF, 57 MachineBasicBlock &MBB, 58 MachineBasicBlock::iterator I) const; 59 60 unsigned eliminateFrameIndex(MachineBasicBlock::iterator II, 61 int SPAdj, FrameIndexValue *Value = NULL, 62 RegScavenger *RS = NULL) const; 63 64 void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, 65 RegScavenger *RS = NULL) const; 66 67 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 68 69 void emitPrologue(MachineFunction &MF) const; 70 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 71 72 // Debug information queries. 73 unsigned getRARegister() const; 74 unsigned getFrameRegister(const MachineFunction &MF) const; 75 void getInitialFrameState(std::vector<MachineMove> &Moves) const; 76 77 //! Return the array of argument passing registers 78 /*! 79 \note The size of this array is returned by getArgRegsSize(). 80 */ 81 static const unsigned *getArgRegs(const MachineFunction *MF = 0); 82 83 //! Return the size of the argument passing register array 84 static unsigned getNumArgRegs(const MachineFunction *MF = 0); 85 86 //! Return whether to emit frame moves 87 static bool needsFrameMoves(const MachineFunction &MF); 88 89 //! Get DWARF debugging register number 90 int getDwarfRegNum(unsigned RegNum, bool isEH) const; 91}; 92 93} // end namespace llvm 94 95#endif 96