1 //===-- MBlazeRegisterInfo.h - MBlaze Register Information Impl -*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file contains the MBlaze implementation of the TargetRegisterInfo 11 // class. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef MBLAZEREGISTERINFO_H 16 #define MBLAZEREGISTERINFO_H 17 18 #include "MBlaze.h" 19 #include "llvm/Target/TargetRegisterInfo.h" 20 21 #define GET_REGINFO_HEADER 22 #include "MBlazeGenRegisterInfo.inc" 23 24 namespace llvm { 25 class MBlazeSubtarget; 26 class TargetInstrInfo; 27 class Type; 28 29 namespace MBlaze { 30 /// SubregIndex - The index of various sized subregister classes. Note that 31 /// these indices must be kept in sync with the class indices in the 32 /// MBlazeRegisterInfo.td file. 33 enum SubregIndex { 34 SUBREG_FPEVEN = 1, SUBREG_FPODD = 2 35 }; 36 } 37 38 struct MBlazeRegisterInfo : public MBlazeGenRegisterInfo { 39 const MBlazeSubtarget &Subtarget; 40 const TargetInstrInfo &TII; 41 42 MBlazeRegisterInfo(const MBlazeSubtarget &Subtarget, 43 const TargetInstrInfo &tii); 44 45 /// Get PIC indirect call register 46 static unsigned getPICCallReg(); 47 48 /// Code Generation virtual methods... 49 const uint16_t *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 50 51 BitVector getReservedRegs(const MachineFunction &MF) const; 52 53 /// Stack Frame Processing Methods 54 void eliminateFrameIndex(MachineBasicBlock::iterator II, 55 int SPAdj, unsigned FIOperandNum, 56 RegScavenger *RS = NULL) const; 57 58 void processFunctionBeforeFrameFinalized(MachineFunction &MF, 59 RegScavenger *RS = NULL) const; 60 61 /// Debug information queries. 62 unsigned getFrameRegister(const MachineFunction &MF) const; 63 64 /// Exception handling queries. 65 unsigned getEHExceptionRegister() const; 66 unsigned getEHHandlerRegister() const; 67 }; 68 69 } // end namespace llvm 70 71 #endif 72