1//===- NVPTXRegisterInfo.h - NVPTX Register Information Impl ----*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file contains the NVPTX implementation of the TargetRegisterInfo class. 10// 11//===----------------------------------------------------------------------===// 12 13#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXREGISTERINFO_H 14#define LLVM_LIB_TARGET_NVPTX_NVPTXREGISTERINFO_H 15 16#include "llvm/CodeGen/TargetRegisterInfo.h" 17#include "llvm/Support/StringSaver.h" 18#include <sstream> 19 20#define GET_REGINFO_HEADER 21#include "NVPTXGenRegisterInfo.inc" 22 23namespace llvm { 24class NVPTXRegisterInfo : public NVPTXGenRegisterInfo { 25private: 26 // Hold Strings that can be free'd all together with NVPTXRegisterInfo 27 BumpPtrAllocator StrAlloc; 28 UniqueStringSaver StrPool; 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 bool eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, 43 unsigned FIOperandNum, 44 RegScavenger *RS = nullptr) const override; 45 46 Register getFrameRegister(const MachineFunction &MF) const override; 47 Register getFrameLocalRegister(const MachineFunction &MF) const; 48 49 UniqueStringSaver &getStrPool() const { 50 return const_cast<UniqueStringSaver &>(StrPool); 51 } 52 53 const char *getName(unsigned RegNo) const { 54 std::stringstream O; 55 O << "reg" << RegNo; 56 return getStrPool().save(O.str()).data(); 57 } 58 59}; 60 61std::string getNVPTXRegClassName(const TargetRegisterClass *RC); 62std::string getNVPTXRegClassStr(const TargetRegisterClass *RC); 63 64} // end namespace llvm 65 66#endif 67