MipsRegisterInfo.h revision 6f0d024a534af18d9e60b3ea757376cd8a3a980e
1972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===- MipsRegisterInfo.h - Mips Register Information Impl ------*- C++ -*-===//
2972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
3972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//                     The LLVM Compiler Infrastructure
4972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
8972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===----------------------------------------------------------------------===//
9972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
106f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman// This file contains the Mips implementation of the TargetRegisterInfo class.
11972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
12972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//===----------------------------------------------------------------------===//
13972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
14972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#ifndef MIPSREGISTERINFO_H
15972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#define MIPSREGISTERINFO_H
16972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
176f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman#include "llvm/Target/TargetRegisterInfo.h"
18972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#include "MipsGenRegisterInfo.h.inc"
19972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
20972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesnamespace llvm {
21972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
22972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass TargetInstrInfo;
23972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass Type;
24972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
25972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesstruct MipsRegisterInfo : public MipsGenRegisterInfo {
26972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  const TargetInstrInfo &TII;
27972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
28972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  MipsRegisterInfo(const TargetInstrInfo &tii);
29972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
3051195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// getRegisterNumbering - Given the enum value for some register, e.g.
3151195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Mips::RA, return the number that it corresponds to (e.g. 31).
3251195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  static unsigned getRegisterNumbering(unsigned RegEnum);
3351195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes
34972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  /// Code Generation virtual methods...
35972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void reMaterialize(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
36972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                     unsigned DestReg, const MachineInstr *Orig) const;
37972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
3864d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng  const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const;
39972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
4064d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng  const TargetRegisterClass* const*
4164d80e3387f328d21cd9cc06464b5de7861e3f27Evan Cheng  getCalleeSavedRegClasses(const MachineFunction* MF = 0) const;
42972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
43972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  BitVector getReservedRegs(const MachineFunction &MF) const;
44972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
45972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  bool hasFP(const MachineFunction &MF) const;
46972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
47972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void eliminateCallFramePseudoInstr(MachineFunction &MF,
48972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                                     MachineBasicBlock &MBB,
49972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                                     MachineBasicBlock::iterator I) const;
50972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
5151195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Stack Frame Processing Methods
52972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void eliminateFrameIndex(MachineBasicBlock::iterator II,
53972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                           int SPAdj, RegScavenger *RS = NULL) const;
54972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
55972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
56972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
57972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void emitPrologue(MachineFunction &MF) const;
58972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
59972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6051195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Debug information queries.
61972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getRARegister() const;
62972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getFrameRegister(MachineFunction &MF) const;
63972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6451195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Exception handling queries.
65972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHExceptionRegister() const;
66972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHHandlerRegister() const;
67f191c80cd79ee35e47b5a4feed98d687782dfe85Anton Korobeynikov
68b97aec663b1591e71c9ddee6dbb327d1b827eda5Dale Johannesen  int getDwarfRegNum(unsigned RegNum, bool isEH) const;
69972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes};
70972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
71972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes} // end namespace llvm
72972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
73972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#endif
74