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 /// getRegisterNumbering - Given the enum value for some register, e.g. 46 /// MBlaze::RA, return the number that it corresponds to (e.g. 31). 47 static unsigned getRegisterNumbering(unsigned RegEnum); 48 static unsigned getRegisterFromNumbering(unsigned RegEnum); 49 static unsigned getSpecialRegisterFromNumbering(unsigned RegEnum); 50 static bool isRegister(unsigned RegEnum); 51 static bool isSpecialRegister(unsigned RegEnum); 52 53 /// Get PIC indirect call register 54 static unsigned getPICCallReg(); 55 56 /// Code Generation virtual methods... 57 const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 58 59 BitVector getReservedRegs(const MachineFunction &MF) const; 60 61 void eliminateCallFramePseudoInstr(MachineFunction &MF, 62 MachineBasicBlock &MBB, 63 MachineBasicBlock::iterator I) const; 64 65 /// Stack Frame Processing Methods 66 void eliminateFrameIndex(MachineBasicBlock::iterator II, 67 int SPAdj, RegScavenger *RS = NULL) const; 68 69 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; 70 71 /// Debug information queries. 72 unsigned getFrameRegister(const MachineFunction &MF) const; 73 74 /// Exception handling queries. 75 unsigned getEHExceptionRegister() const; 76 unsigned getEHHandlerRegister() const; 77 }; 78 79 } // end namespace llvm 80 81 #endif 82