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