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