1 //===- PIC16RegisterInfo.h - PIC16 Register Information Impl ----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains the PIC16 implementation of the TargetRegisterInfo class.
12 //===----------------------------------------------------------------------===//
14 #ifndef PIC16REGISTERINFO_H
15 #define PIC16REGISTERINFO_H
17 #include "PIC16GenRegisterInfo.h.inc"
18 #include "llvm/Target/TargetRegisterInfo.h"
22 // Forward Declarations.
23 class TargetInstrInfo;
26 struct PIC16RegisterInfo : public PIC16GenRegisterInfo {
27 const TargetInstrInfo &TII;
29 explicit PIC16RegisterInfo(const TargetInstrInfo &tii);
31 /// getRegisterNumbering - Given the enum value for some register, e.g.
32 /// PIC16::RA, return the number that it corresponds to (e.g. 31).
33 static unsigned getRegisterNumbering(unsigned RegEnum);
35 void reMaterialize(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
36 unsigned DestReg, const MachineInstr *Orig) const;
38 MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
39 int FrameIndex) const;
41 MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
42 MachineInstr* LoadMI) const {
46 void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
47 unsigned DestReg, unsigned SrcReg,
48 const TargetRegisterClass *RC) const;
51 const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const;
53 const TargetRegisterClass* const*
54 getCalleeSavedRegClasses(const MachineFunction* MF = 0) const;
56 BitVector getReservedRegs(const MachineFunction &MF) const;
58 bool hasFP(const MachineFunction &MF) const;
60 void eliminateCallFramePseudoInstr(MachineFunction &MF,
61 MachineBasicBlock &MBB,
62 MachineBasicBlock::iterator I) const;
64 /// Stack Frame Processing Methods.
65 void eliminateFrameIndex(MachineBasicBlock::iterator II,
66 int SPAdj, RegScavenger *RS = NULL) const;
68 void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
70 void emitPrologue(MachineFunction &MF) const;
71 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
73 /// Debug information queries.
74 unsigned getRARegister() const;
75 unsigned getFrameRegister(MachineFunction &MF) const;
77 /// Exception handling queries.
78 unsigned getEHExceptionRegister() const;
79 unsigned getEHHandlerRegister() const;
81 int getDwarfRegNum(unsigned RegNum, bool isEH) const;
84 } // end namespace llvm