1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===-- NVPTXMachineFunctionInfo.h - NVPTX-specific Function Info --------===// 2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// 3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// The LLVM Compiler Infrastructure 4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// 5dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// This file is distributed under the University of Illinois Open Source 6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// License. See LICENSE.TXT for details. 7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// 8dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===// 9dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// 10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// This class is attached to a MachineFunction instance and tracks target- 11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// dependent information 12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// 13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===// 14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/CodeGen/MachineFunction.h" 16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace llvm { 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass NVPTXMachineFunctionInfo : public MachineFunctionInfo { 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesprivate: 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Stores a mapping from index to symbol name for removing image handles 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// on Fermi. 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines SmallVector<std::string, 8> ImageHandleList; 23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinespublic: 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines NVPTXMachineFunctionInfo(MachineFunction &MF) {} 26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Returns the index for the symbol \p Symbol. If the symbol was previously, 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// added, the same index is returned. Otherwise, the symbol is added and the 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// new index is returned. 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned getImageHandleSymbolIndex(const char *Symbol) { 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Is the symbol already present? 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines for (unsigned i = 0, e = ImageHandleList.size(); i != e; ++i) 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (ImageHandleList[i] == std::string(Symbol)) 34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return i; 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Nope, insert it 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ImageHandleList.push_back(Symbol); 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return ImageHandleList.size()-1; 38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// Returns the symbol name at the given index. 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const char *getImageHandleSymbol(unsigned Idx) const { 42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines assert(ImageHandleList.size() > Idx && "Bad index"); 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return ImageHandleList[Idx].c_str(); 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}; 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} 47