1//===-- NVPTXMachineFunctionInfo.h - NVPTX-specific Function Info --------===// 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 class is attached to a MachineFunction instance and tracks target- 11// dependent information 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXMACHINEFUNCTIONINFO_H 16#define LLVM_LIB_TARGET_NVPTX_NVPTXMACHINEFUNCTIONINFO_H 17 18#include "llvm/CodeGen/MachineFunction.h" 19 20namespace llvm { 21class NVPTXMachineFunctionInfo : public MachineFunctionInfo { 22private: 23 /// Stores a mapping from index to symbol name for removing image handles 24 /// on Fermi. 25 SmallVector<std::string, 8> ImageHandleList; 26 27public: 28 NVPTXMachineFunctionInfo(MachineFunction &MF) {} 29 30 /// Returns the index for the symbol \p Symbol. If the symbol was previously, 31 /// added, the same index is returned. Otherwise, the symbol is added and the 32 /// new index is returned. 33 unsigned getImageHandleSymbolIndex(const char *Symbol) { 34 // Is the symbol already present? 35 for (unsigned i = 0, e = ImageHandleList.size(); i != e; ++i) 36 if (ImageHandleList[i] == std::string(Symbol)) 37 return i; 38 // Nope, insert it 39 ImageHandleList.push_back(Symbol); 40 return ImageHandleList.size()-1; 41 } 42 43 /// Returns the symbol name at the given index. 44 const char *getImageHandleSymbol(unsigned Idx) const { 45 assert(ImageHandleList.size() > Idx && "Bad index"); 46 return ImageHandleList[Idx].c_str(); 47 } 48}; 49} 50 51#endif 52