MipsRegisterInfo.h revision 6a8c7bf8e72338e55f0f9583e1828f62da165d4a
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 TargetInstrInfo;
26972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesclass Type;
27972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
28972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopesstruct MipsRegisterInfo : public MipsGenRegisterInfo {
2943d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes  const MipsSubtarget &Subtarget;
30972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  const TargetInstrInfo &TII;
3181092dc20abe5253a5b4d48a75997baa84dde196Bruno Cardoso Lopes
3243d526d162c69f29a1cc6734014576eade49529bBruno Cardoso Lopes  MipsRegisterInfo(const MipsSubtarget &Subtarget, const TargetInstrInfo &tii);
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...
45015f228861ef9b337366f92f637d4e8d624bb006Craig Topper  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
54972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void eliminateCallFramePseudoInstr(MachineFunction &MF,
55972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                                     MachineBasicBlock &MBB,
56972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes                                     MachineBasicBlock::iterator I) const;
57972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
5851195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Stack Frame Processing Methods
59fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach  void eliminateFrameIndex(MachineBasicBlock::iterator II,
60fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach                           int SPAdj, RegScavenger *RS = NULL) const;
61972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
62972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
63972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6451195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Debug information queries.
65b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene  unsigned getFrameRegister(const MachineFunction &MF) const;
66972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
6751195af45f4142035f23c7d58d1311face3900a4Bruno Cardoso Lopes  /// Exception handling queries.
68972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHExceptionRegister() const;
69972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes  unsigned getEHHandlerRegister() const;
70972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes};
71972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
72972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes} // end namespace llvm
73972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes
74972f5896e417d8e81cf400083fab15a37b6d4277Bruno Cardoso Lopes#endif
75