blob: c7690e6fe56e7e6857f4aa9b6b29f1eeafbef858 [file] [log] [blame]
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +00001//===- MipsRegisterInfo.h - Mips Register Information Impl ------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the Mips implementation of the MRegisterInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MIPSREGISTERINFO_H
15#define MIPSREGISTERINFO_H
16
17#include "llvm/Target/MRegisterInfo.h"
18#include "MipsGenRegisterInfo.h.inc"
19
20namespace llvm {
21
22class TargetInstrInfo;
23class Type;
24
25struct MipsRegisterInfo : public MipsGenRegisterInfo {
26 const TargetInstrInfo &TII;
27
28 MipsRegisterInfo(const TargetInstrInfo &tii);
29
Bruno Cardoso Lopes51195af2007-08-28 05:13:42 +000030 /// getRegisterNumbering - Given the enum value for some register, e.g.
31 /// Mips::RA, return the number that it corresponds to (e.g. 31).
32 static unsigned getRegisterNumbering(unsigned RegEnum);
33
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000034 /// Code Generation virtual methods...
35 void storeRegToStackSlot(MachineBasicBlock &MBB,
36 MachineBasicBlock::iterator MBBI,
Evan Chengd64b5c82007-12-05 03:14:33 +000037 unsigned SrcReg, bool isKill, int FrameIndex,
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000038 const TargetRegisterClass *RC) const;
39
Evan Chengd64b5c82007-12-05 03:14:33 +000040 void storeRegToAddr(MachineFunction &MF, unsigned SrcReg, bool isKill,
Evan Chengf0a0cdd2007-10-18 22:40:57 +000041 SmallVectorImpl<MachineOperand> &Addr,
Evan Cheng66f0f642007-10-05 01:32:41 +000042 const TargetRegisterClass *RC,
Evan Cheng58184e62007-10-18 21:29:24 +000043 SmallVectorImpl<MachineInstr*> &NewMIs) const;
Evan Cheng66f0f642007-10-05 01:32:41 +000044
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000045 void loadRegFromStackSlot(MachineBasicBlock &MBB,
46 MachineBasicBlock::iterator MBBI,
47 unsigned DestReg, int FrameIndex,
48 const TargetRegisterClass *RC) const;
49
Evan Cheng66f0f642007-10-05 01:32:41 +000050 void loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
Evan Chengf0a0cdd2007-10-18 22:40:57 +000051 SmallVectorImpl<MachineOperand> &Addr,
Evan Cheng66f0f642007-10-05 01:32:41 +000052 const TargetRegisterClass *RC,
Evan Cheng58184e62007-10-18 21:29:24 +000053 SmallVectorImpl<MachineInstr*> &NewMIs) const;
Evan Cheng66f0f642007-10-05 01:32:41 +000054
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000055 void reMaterialize(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
56 unsigned DestReg, const MachineInstr *Orig) const;
57
Evan Chengaee4af62007-12-02 08:30:39 +000058 MachineInstr* foldMemoryOperand(MachineInstr* MI,
59 SmallVectorImpl<unsigned> &Ops,
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000060 int FrameIndex) const;
61
Evan Chenge62f97c2007-12-01 02:07:52 +000062 MachineInstr* foldMemoryOperand(MachineInstr* MI,
Evan Chengaee4af62007-12-02 08:30:39 +000063 SmallVectorImpl<unsigned> &Ops,
Evan Chenge62f97c2007-12-01 02:07:52 +000064 MachineInstr* LoadMI) const {
65 return 0;
66 }
Evan Cheng35b35c52007-08-30 05:52:20 +000067
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000068 void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
69 unsigned DestReg, unsigned SrcReg,
Evan Cheng9efce632007-09-26 06:25:56 +000070 const TargetRegisterClass *DestRC,
71 const TargetRegisterClass *SrcRC) const;
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000072
73
Evan Cheng64d80e32007-07-19 01:14:50 +000074 const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const;
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000075
Evan Cheng64d80e32007-07-19 01:14:50 +000076 const TargetRegisterClass* const*
77 getCalleeSavedRegClasses(const MachineFunction* MF = 0) const;
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000078
79 BitVector getReservedRegs(const MachineFunction &MF) const;
80
81 bool hasFP(const MachineFunction &MF) const;
82
83 void eliminateCallFramePseudoInstr(MachineFunction &MF,
84 MachineBasicBlock &MBB,
85 MachineBasicBlock::iterator I) const;
86
Bruno Cardoso Lopes51195af2007-08-28 05:13:42 +000087 /// Stack Frame Processing Methods
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000088 void eliminateFrameIndex(MachineBasicBlock::iterator II,
89 int SPAdj, RegScavenger *RS = NULL) const;
90
91 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
92
93 void emitPrologue(MachineFunction &MF) const;
94 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
95
Bruno Cardoso Lopes51195af2007-08-28 05:13:42 +000096 /// Debug information queries.
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000097 unsigned getRARegister() const;
98 unsigned getFrameRegister(MachineFunction &MF) const;
99
Bruno Cardoso Lopes51195af2007-08-28 05:13:42 +0000100 /// Exception handling queries.
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +0000101 unsigned getEHExceptionRegister() const;
102 unsigned getEHHandlerRegister() const;
Anton Korobeynikovf191c802007-11-11 19:50:10 +0000103
Dale Johannesenb97aec62007-11-13 19:13:01 +0000104 int getDwarfRegNum(unsigned RegNum, bool isEH) const;
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +0000105};
106
107} // end namespace llvm
108
109#endif