1bb481f882093fb738d2bb15610c79364bada5496Jia Liu//===-- 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//
84552c9a3b34ad9b2085635266348d0d9b95514a6Akira Hatanaka//===----------------------------------------------------------------------===//
9972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
106f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman// This file contains the Mips implementation of the TargetRegisterInfo class.
11972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes//
124552c9a3b34ad9b2085635266348d0d9b95514a6Akira Hatanaka//===----------------------------------------------------------------------===//
13972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
14972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#ifndef MIPSREGISTERINFO_H
15972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#define MIPSREGISTERINFO_H
16972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
1743d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes#include "Mips.h"
186f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman#include "llvm/Target/TargetRegisterInfo.h"
1973f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng
2073f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#define GET_REGINFO_HEADER
2173f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#include "MipsGenRegisterInfo.inc"
22972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
23972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesnamespace llvm {
2443d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopesclass MipsSubtarget;
25972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass Type;
26972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
278589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanakaclass MipsRegisterInfo : public MipsGenRegisterInfo {
288589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanakaprotected:
2943d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes  const MipsSubtarget &Subtarget;
3081092dc20abe5253a5b4d48a75997baa84dde196Bruno Cardoso Lopes
318589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanakapublic:
3291a35f03da446009cd1de4cdabaa1cdec7e74e0cAkira Hatanaka  MipsRegisterInfo(const MipsSubtarget &Subtarget);
33972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
3451195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// getRegisterNumbering - Given the enum value for some register, e.g.
3551195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Mips::RA, return the number that it corresponds to (e.g. 31).
3651195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  static unsigned getRegisterNumbering(unsigned RegEnum);
3751195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes
3843d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes  /// Get PIC indirect call register
39a9ad04191cb56c42944b17980b8b2bb2afe11ab2Dan Gohman  static unsigned getPICCallReg();
4043d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes
41bbe51362d53a532942997903a49faa7b5b50ad1fBruno Cardoso Lopes  /// Adjust the Mips stack frame.
42bbe51362d53a532942997903a49faa7b5b50ad1fBruno Cardoso Lopes  void adjustMipsStackFrame(MachineFunction &MF) const;
43bbe51362d53a532942997903a49faa7b5b50ad1fBruno Cardoso Lopes
44972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  /// Code Generation virtual methods...
45864f66085cd9543070ef01b9f7371c110ecd7898Akira Hatanaka  const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
46b2930b92d3e9734ced6679844666799648ebbd7aAkira Hatanaka  const uint32_t *getCallPreservedMask(CallingConv::ID) const;
47972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
48972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  BitVector getReservedRegs(const MachineFunction &MF) const;
49972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
5081a424b3c5e7be03d66d5c7fd241f2aac47d1a2cAkira Hatanaka  virtual bool requiresRegisterScavenging(const MachineFunction &MF) const;
5181a424b3c5e7be03d66d5c7fd241f2aac47d1a2cAkira Hatanaka
526a8c7bf8e72338e55f0f9583e1828f62da165d4aPreston Gurd  virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const;
536a8c7bf8e72338e55f0f9583e1828f62da165d4aPreston Gurd
5451195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Stack Frame Processing Methods
55fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach  void eliminateFrameIndex(MachineBasicBlock::iterator II,
56fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach                           int SPAdj, RegScavenger *RS = NULL) const;
57972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
58972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
59972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6051195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Debug information queries.
61b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene  unsigned getFrameRegister(const MachineFunction &MF) const;
62972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6351195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Exception handling queries.
64972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHExceptionRegister() const;
65972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHHandlerRegister() const;
668589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanaka
678589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanakaprivate:
688589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanaka  virtual void eliminateFI(MachineBasicBlock::iterator II, unsigned OpNo,
698589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanaka                           int FrameIndex, uint64_t StackSize,
708589010e3d1d5a902992a5039cffa9d4116982c5Akira Hatanaka                           int64_t SPOffset) const = 0;
71972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes};
72972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
73972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes} // end namespace llvm
74972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
75972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#endif
76