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 23 namespace llvm { 24 class NVPTXRegisterInfo : public NVPTXGenRegisterInfo { 25 private: 26 // Hold Strings that can be free'd all together with NVPTXRegisterInfo 27 BumpPtrAllocator StrAlloc; 28 UniqueStringSaver StrPool; 29 30 public: 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 61 std::string getNVPTXRegClassName(const TargetRegisterClass *RC); 62 std::string getNVPTXRegClassStr(const TargetRegisterClass *RC); 63 64 } // end namespace llvm 65 66 #endif 67