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)