brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 1334bfa Raw
84 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file contains the NVPTX implementation of the TargetRegisterInfo class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXREGISTERINFO_H14#define LLVM_LIB_TARGET_NVPTX_NVPTXREGISTERINFO_H15 16#include "llvm/CodeGen/TargetRegisterInfo.h"17#include "llvm/Support/StringSaver.h"18#include <sstream>19 20#define GET_REGINFO_HEADER21#include "NVPTXGenRegisterInfo.inc"22 23namespace llvm {24class NVPTXRegisterInfo : public NVPTXGenRegisterInfo {25private:26  // Hold Strings that can be free'd all together with NVPTXRegisterInfo27  BumpPtrAllocator StrAlloc;28  UniqueStringSaver StrPool;29  // State for debug register mapping that can be mutated even through a const30  // pointer so that we can get the proper dwarf register encoding during ASM31  // emission.32  mutable DenseMap<uint64_t, uint64_t> debugRegisterMap;33 34public:35  NVPTXRegisterInfo();36 37  //------------------------------------------------------38  // Pure virtual functions from TargetRegisterInfo39  //------------------------------------------------------40 41  // NVPTX callee saved registers42  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;43 44  BitVector getReservedRegs(const MachineFunction &MF) const override;45 46  bool eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,47                           unsigned FIOperandNum,48                           RegScavenger *RS = nullptr) const override;49 50  Register getFrameRegister(const MachineFunction &MF) const override;51  Register getFrameLocalRegister(const MachineFunction &MF) const;52 53  UniqueStringSaver &getStrPool() const {54    return const_cast<UniqueStringSaver &>(StrPool);55  }56 57  const char *getName(unsigned RegNo) const {58    std::stringstream O;59    O << "reg" << RegNo;60    return getStrPool().save(O.str()).data();61  }62 63  // Manage the debugRegisterMap.  PTX virtual registers for DebugInfo are64  // encoded using the names used in the emitted text of the PTX assembly. This65  // mapping must be managed during assembly emission.66  //67  // These are marked const because the interfaces used to access this68  // RegisterInfo object are all const, but we need to communicate some state69  // here, because the proper encoding for debug registers is available only70  // temporarily during ASM emission.71  void addToDebugRegisterMap(uint64_t preEncodedVirtualRegister,72                             StringRef RegisterName) const;73  void clearDebugRegisterMap() const;74  int64_t getDwarfRegNum(MCRegister RegNum, bool isEH) const override;75  int64_t getDwarfRegNumForVirtReg(Register RegNum, bool isEH) const override;76};77 78StringRef getNVPTXRegClassName(const TargetRegisterClass *RC);79StringRef getNVPTXRegClassStr(const TargetRegisterClass *RC);80 81} // end namespace llvm82 83#endif84