MipsRegisterInfo.h revision 6f0d024a534af18d9e60b3ea757376cd8a3a980e
1972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===- MipsRegisterInfo.h - Mips Register Information Impl ------*- C++ -*-===// 2972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// 3972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// The LLVM Compiler Infrastructure 4972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// 8972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===----------------------------------------------------------------------===// 9972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// 106f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman// This file contains the Mips implementation of the TargetRegisterInfo class. 11972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes// 12972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===----------------------------------------------------------------------===// 13972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 14972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#ifndef MIPSREGISTERINFO_H 15972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#define MIPSREGISTERINFO_H 16972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 176f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman#include "llvm/Target/TargetRegisterInfo.h" 18972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#include "MipsGenRegisterInfo.h.inc" 19972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 20972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesnamespace llvm { 21972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 22972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass TargetInstrInfo; 23972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass Type; 24972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 25972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesstruct MipsRegisterInfo : public MipsGenRegisterInfo { 26972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes const TargetInstrInfo &TII; 27972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 28972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes MipsRegisterInfo(const TargetInstrInfo &tii); 29972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 3051195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes /// getRegisterNumbering - Given the enum value for some register, e.g. 3151195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes /// Mips::RA, return the number that it corresponds to (e.g. 31). 3251195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes static unsigned getRegisterNumbering(unsigned RegEnum); 3351195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes 34972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes /// Code Generation virtual methods... 35972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void reMaterialize(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, 36972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes unsigned DestReg, const MachineInstr *Orig) const; 37972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 3864d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 39972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 4064d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng const TargetRegisterClass* const* 4164d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng getCalleeSavedRegClasses(const MachineFunction* MF = 0) const; 42972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 43972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes BitVector getReservedRegs(const MachineFunction &MF) const; 44972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 45972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes bool hasFP(const MachineFunction &MF) const; 46972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 47972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void eliminateCallFramePseudoInstr(MachineFunction &MF, 48972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes MachineBasicBlock &MBB, 49972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes MachineBasicBlock::iterator I) const; 50972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 5151195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes /// Stack Frame Processing Methods 52972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void eliminateFrameIndex(MachineBasicBlock::iterator II, 53972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes int SPAdj, RegScavenger *RS = NULL) const; 54972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 55972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 56972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 57972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void emitPrologue(MachineFunction &MF) const; 58972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 59972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 6051195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes /// Debug information queries. 61972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes unsigned getRARegister() const; 62972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes unsigned getFrameRegister(MachineFunction &MF) const; 63972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 6451195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes /// Exception handling queries. 65972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes unsigned getEHExceptionRegister() const; 66972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes unsigned getEHHandlerRegister() const; 67f191c80cd79ee35e47b5a4feed98d687782dfe85Anton Korobeynikov 68b97aec663b1591e71c9ddee6dbb327d1b827eda5Dale Johannesen int getDwarfRegNum(unsigned RegNum, bool isEH) const; 69972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes}; 70972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 71972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes} // end namespace llvm 72972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes 73972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#endif 74