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