SparcRegisterInfo.h revision a284cbf667e11660840dc7bae3ee9eeaa3c7cbd2
13c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch//===- SparcRegisterInfo.h - Sparc Register Information Impl ----*- C++ -*-===// 23c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// 33c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// The LLVM Compiler Infrastructure 43c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// 53c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// This file was developed by the LLVM research group and is distributed under 63c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// the University of Illinois Open Source License. See LICENSE.TXT for details. 73c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// 83c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch//===----------------------------------------------------------------------===// 93c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// 103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// This file contains the Sparc implementation of the MRegisterInfo class. 113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch// 123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch//===----------------------------------------------------------------------===// 133c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 143c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#ifndef SPARCREGISTERINFO_H 153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#define SPARCREGISTERINFO_H 163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "llvm/Target/MRegisterInfo.h" 183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "SparcGenRegisterInfo.h.inc" 193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochnamespace llvm { 213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass SparcSubtarget; 233c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass TargetInstrInfo; 243c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass Type; 253c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 263c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochstruct SparcRegisterInfo : public SparcGenRegisterInfo { 273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch SparcSubtarget &Subtarget; 283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch const TargetInstrInfo &TII; 293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch SparcRegisterInfo(SparcSubtarget &st, const TargetInstrInfo &tii); 3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /// Code Generation virtual methods... 33a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void storeRegToStackSlot(MachineBasicBlock &MBB, 347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci MachineBasicBlock::iterator MBBI, 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned SrcReg, int FrameIndex, 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const TargetRegisterClass *RC) const; 37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 3810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch void loadRegFromStackSlot(MachineBasicBlock &MBB, 3910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch MachineBasicBlock::iterator MBBI, 403c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch unsigned DestReg, int FrameIndex, 413c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch const TargetRegisterClass *RC) const; 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 433c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, 4476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) unsigned DestReg, unsigned SrcReg, 45a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const TargetRegisterClass *RC) const; 463c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 4707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch virtual MachineInstr* foldMemoryOperand(MachineInstr* MI, 486f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch unsigned OpNum, 49a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) int FrameIndex) const; 5010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const unsigned *getCalleeSavedRegs() const; 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 53a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const TargetRegisterClass* const* getCalleeSavedRegClasses() const; 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 55a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool hasFP(const MachineFunction &MF) const; 56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void eliminateCallFramePseudoInstr(MachineFunction &MF, 583c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch MachineBasicBlock &MBB, 593c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch MachineBasicBlock::iterator I) const; 603c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 613c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void eliminateFrameIndex(MachineBasicBlock::iterator II) const; 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 653c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void emitPrologue(MachineFunction &MF) const; 663c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 67f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Debug information queries. 69f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) unsigned getRARegister() const; 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned getFrameRegister(MachineFunction &MF) const; 71a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)}; 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 733c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch} // end namespace llvm 74f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 7507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#endif 76f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)