1//===- BlackfinRegisterInfo.h - Blackfin Register Information ..-*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the Blackfin implementation of the TargetRegisterInfo
11// class.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef BLACKFINREGISTERINFO_H
16#define BLACKFINREGISTERINFO_H
17
18#include "llvm/Target/TargetRegisterInfo.h"
19
20#define GET_REGINFO_HEADER
21#include "BlackfinGenRegisterInfo.inc"
22
23namespace llvm {
24
25  class BlackfinSubtarget;
26  class TargetInstrInfo;
27  class Type;
28
29  struct BlackfinRegisterInfo : public BlackfinGenRegisterInfo {
30    BlackfinSubtarget &Subtarget;
31    const TargetInstrInfo &TII;
32
33    BlackfinRegisterInfo(BlackfinSubtarget &st, const TargetInstrInfo &tii);
34
35    /// Code Generation virtual methods...
36    const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
37
38    BitVector getReservedRegs(const MachineFunction &MF) const;
39
40    // getSubReg implemented by tablegen
41
42    const TargetRegisterClass *getPointerRegClass(unsigned Kind = 0) const {
43      return &BF::PRegClass;
44    }
45
46    bool requiresRegisterScavenging(const MachineFunction &MF) const;
47
48    void eliminateCallFramePseudoInstr(MachineFunction &MF,
49                                       MachineBasicBlock &MBB,
50                                       MachineBasicBlock::iterator I) const;
51
52    void eliminateFrameIndex(MachineBasicBlock::iterator II,
53                             int SPAdj, RegScavenger *RS = NULL) const;
54
55    unsigned getFrameRegister(const MachineFunction &MF) const;
56
57    // Exception handling queries.
58    unsigned getEHExceptionRegister() const;
59    unsigned getEHHandlerRegister() const;
60
61    // Utility functions
62    void adjustRegister(MachineBasicBlock &MBB,
63                        MachineBasicBlock::iterator I,
64                        DebugLoc DL,
65                        unsigned Reg,
66                        unsigned ScratchReg,
67                        int delta) const;
68    void loadConstant(MachineBasicBlock &MBB,
69                      MachineBasicBlock::iterator I,
70                      DebugLoc DL,
71                      unsigned Reg,
72                      int value) const;
73  };
74
75} // end namespace llvm
76
77#endif
78