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