Home | History | Annotate | Download | only in MBlaze
      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