1//===- NVPTXRegisterInfo.h - NVPTX Register Information Impl ----*- 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 NVPTX implementation of the TargetRegisterInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef NVPTXREGISTERINFO_H
15#define NVPTXREGISTERINFO_H
16
17#include "ManagedStringPool.h"
18#include "llvm/Target/TargetRegisterInfo.h"
19#include <sstream>
20
21#define GET_REGINFO_HEADER
22#include "NVPTXGenRegisterInfo.inc"
23
24namespace llvm {
25
26// Forward Declarations.
27class TargetInstrInfo;
28class NVPTXSubtarget;
29
30class NVPTXRegisterInfo : public NVPTXGenRegisterInfo {
31private:
32  bool Is64Bit;
33  // Hold Strings that can be free'd all together with NVPTXRegisterInfo
34  ManagedStringPool ManagedStrPool;
35
36public:
37  NVPTXRegisterInfo(const NVPTXSubtarget &st);
38
39  //------------------------------------------------------
40  // Pure virtual functions from TargetRegisterInfo
41  //------------------------------------------------------
42
43  // NVPTX callee saved registers
44  const MCPhysReg *
45  getCalleeSavedRegs(const MachineFunction *MF = nullptr) const override;
46
47  BitVector getReservedRegs(const MachineFunction &MF) const override;
48
49  void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
50                           unsigned FIOperandNum,
51                           RegScavenger *RS = nullptr) const override;
52
53  unsigned getFrameRegister(const MachineFunction &MF) const override;
54
55  ManagedStringPool *getStrPool() const {
56    return const_cast<ManagedStringPool *>(&ManagedStrPool);
57  }
58
59  const char *getName(unsigned RegNo) const {
60    std::stringstream O;
61    O << "reg" << RegNo;
62    return getStrPool()->getManagedString(O.str().c_str())->c_str();
63  }
64
65};
66
67std::string getNVPTXRegClassName(const TargetRegisterClass *RC);
68std::string getNVPTXRegClassStr(const TargetRegisterClass *RC);
69
70} // end namespace llvm
71
72#endif
73