1228072Sbapt//===-- MBlazeRegisterInfo.h - MBlaze Register Information Impl -*- C++ -*-===// 2228072Sbapt// 3228072Sbapt// The LLVM Compiler Infrastructure 4228072Sbapt// 5228072Sbapt// This file is distributed under the University of Illinois Open Source 6228072Sbapt// License. See LICENSE.TXT for details. 7228072Sbapt// 8228072Sbapt//===----------------------------------------------------------------------===// 9228072Sbapt// 10228072Sbapt// This file contains the MBlaze implementation of the TargetRegisterInfo 11228072Sbapt// class. 12228072Sbapt// 13228072Sbapt//===----------------------------------------------------------------------===// 14228072Sbapt 15228072Sbapt#ifndef MBLAZEREGISTERINFO_H 16228072Sbapt#define MBLAZEREGISTERINFO_H 17228072Sbapt 18228072Sbapt#include "MBlaze.h" 19228072Sbapt#include "llvm/Target/TargetRegisterInfo.h" 20228072Sbapt 21228072Sbapt#define GET_REGINFO_HEADER 22228072Sbapt#include "MBlazeGenRegisterInfo.inc" 23228072Sbapt 24228072Sbaptnamespace llvm { 25228072Sbaptclass MBlazeSubtarget; 26228072Sbaptclass TargetInstrInfo; 27228072Sbaptclass Type; 28228072Sbapt 29228072Sbaptnamespace MBlaze { 30228072Sbapt /// SubregIndex - The index of various sized subregister classes. Note that 31228072Sbapt /// these indices must be kept in sync with the class indices in the 32228072Sbapt /// MBlazeRegisterInfo.td file. 33228072Sbapt enum SubregIndex { 34228072Sbapt SUBREG_FPEVEN = 1, SUBREG_FPODD = 2 35228072Sbapt }; 36228072Sbapt} 37228072Sbapt 38228072Sbaptstruct MBlazeRegisterInfo : public MBlazeGenRegisterInfo { 39228072Sbapt const MBlazeSubtarget &Subtarget; 40228072Sbapt const TargetInstrInfo &TII; 41228072Sbapt 42228072Sbapt MBlazeRegisterInfo(const MBlazeSubtarget &Subtarget, 43228072Sbapt const TargetInstrInfo &tii); 44228072Sbapt 45228072Sbapt /// Get PIC indirect call register 46228072Sbapt static unsigned getPICCallReg(); 47228072Sbapt 48228072Sbapt /// Code Generation virtual methods... 49228072Sbapt const uint16_t *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 50228072Sbapt 51228072Sbapt BitVector getReservedRegs(const MachineFunction &MF) const; 52228072Sbapt 53228072Sbapt /// Stack Frame Processing Methods 54228072Sbapt void eliminateFrameIndex(MachineBasicBlock::iterator II, 55228072Sbapt int SPAdj, unsigned FIOperandNum, 56228072Sbapt RegScavenger *RS = NULL) const; 57228072Sbapt 58250125Sjkim void processFunctionBeforeFrameFinalized(MachineFunction &MF, 59228072Sbapt RegScavenger *RS = NULL) const; 60250125Sjkim 61250125Sjkim /// Debug information queries. 62250125Sjkim unsigned getFrameRegister(const MachineFunction &MF) const; 63250125Sjkim 64250125Sjkim /// Exception handling queries. 65250125Sjkim unsigned getEHExceptionRegister() const; 66250125Sjkim unsigned getEHHandlerRegister() const; 67250125Sjkim}; 68228072Sbapt 69228072Sbapt} // end namespace llvm 70228072Sbapt 71250125Sjkim#endif 72228072Sbapt