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 unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 50 51 BitVector getReservedRegs(const MachineFunction &MF) const; 52 53 void eliminateCallFramePseudoInstr(MachineFunction &MF, 54 MachineBasicBlock &MBB, 55 MachineBasicBlock::iterator I) const; 56 57 /// Stack Frame Processing Methods 58 void eliminateFrameIndex(MachineBasicBlock::iterator II, 59 int SPAdj, RegScavenger *RS = NULL) const; 60 61 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 62 63 /// Debug information queries. 64 unsigned getFrameRegister(const MachineFunction &MF) const; 65 66 /// Exception handling queries. 67 unsigned getEHExceptionRegister() const; 68 unsigned getEHHandlerRegister() const; 69 }; 70 71 } // end namespace llvm 72 73 #endif 74