MipsRegisterInfo.h revision 64d80e3387f328d21cd9cc06464b5de7861e3f27
1//===- MipsRegisterInfo.h - Mips Register Information Impl ------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file was developed by Bruno Cardoso Lopes and is distributed under the
6// University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the Mips implementation of the MRegisterInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MIPSREGISTERINFO_H
15#define MIPSREGISTERINFO_H
16
17#include "llvm/Target/MRegisterInfo.h"
18#include "MipsGenRegisterInfo.h.inc"
19
20namespace llvm {
21
22class TargetInstrInfo;
23class Type;
24
25struct MipsRegisterInfo : public MipsGenRegisterInfo {
26  const TargetInstrInfo &TII;
27
28  MipsRegisterInfo(const TargetInstrInfo &tii);
29
30  /// Code Generation virtual methods...
31  void storeRegToStackSlot(MachineBasicBlock &MBB,
32                           MachineBasicBlock::iterator MBBI,
33                           unsigned SrcReg, int FrameIndex,
34                           const TargetRegisterClass *RC) const;
35
36  void loadRegFromStackSlot(MachineBasicBlock &MBB,
37              MachineBasicBlock::iterator MBBI,
38              unsigned DestReg, int FrameIndex,
39              const TargetRegisterClass *RC) const;
40
41  void reMaterialize(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
42                     unsigned DestReg, const MachineInstr *Orig) const;
43
44  MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
45                                  int FrameIndex) const;
46
47  void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
48          unsigned DestReg, unsigned SrcReg,
49          const TargetRegisterClass *RC) const;
50
51
52  const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const;
53
54  const TargetRegisterClass* const*
55  getCalleeSavedRegClasses(const MachineFunction* MF = 0) const;
56
57  BitVector getReservedRegs(const MachineFunction &MF) const;
58
59  bool hasFP(const MachineFunction &MF) const;
60
61  void eliminateCallFramePseudoInstr(MachineFunction &MF,
62                                     MachineBasicBlock &MBB,
63                                     MachineBasicBlock::iterator I) const;
64
65  void eliminateFrameIndex(MachineBasicBlock::iterator II,
66                           int SPAdj, RegScavenger *RS = NULL) const;
67
68  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
69
70  void emitPrologue(MachineFunction &MF) const;
71  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
72
73  // Debug information queries.
74  unsigned getRARegister() const;
75  unsigned getFrameRegister(MachineFunction &MF) const;
76
77  // Exception handling queries.
78  unsigned getEHExceptionRegister() const;
79  unsigned getEHHandlerRegister() const;
80};
81
82} // end namespace llvm
83
84#endif
85