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 LLVM_LIB_TARGET_NVPTX_NVPTXREGISTERINFO_H
15#define LLVM_LIB_TARGET_NVPTX_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 {
25class NVPTXRegisterInfo : public NVPTXGenRegisterInfo {
26private:
27  // Hold Strings that can be free'd all together with NVPTXRegisterInfo
28  ManagedStringPool ManagedStrPool;
29
30public:
31  NVPTXRegisterInfo();
32
33  //------------------------------------------------------
34  // Pure virtual functions from TargetRegisterInfo
35  //------------------------------------------------------
36
37  // NVPTX callee saved registers
38  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
39
40  BitVector getReservedRegs(const MachineFunction &MF) const override;
41
42  void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
43                           unsigned FIOperandNum,
44                           RegScavenger *RS = nullptr) const override;
45
46  unsigned getFrameRegister(const MachineFunction &MF) const override;
47
48  ManagedStringPool *getStrPool() const {
49    return const_cast<ManagedStringPool *>(&ManagedStrPool);
50  }
51
52  const char *getName(unsigned RegNo) const {
53    std::stringstream O;
54    O << "reg" << RegNo;
55    return getStrPool()->getManagedString(O.str().c_str())->c_str();
56  }
57
58};
59
60std::string getNVPTXRegClassName(const TargetRegisterClass *RC);
61std::string getNVPTXRegClassStr(const TargetRegisterClass *RC);
62
63} // end namespace llvm
64
65#endif
66