1 //===-- PTXParamManager.h - Manager for .param variables --------*- C++ -*-===// 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 file defines the PTXParamManager class, which manages all defined .param 11 // variables for a particular function. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef PTX_PARAM_MANAGER_H 16 #define PTX_PARAM_MANAGER_H 17 18 #include "llvm/ADT/DenseMap.h" 19 #include "llvm/ADT/SmallVector.h" 20 #include <string> 21 22 namespace llvm { 23 24 /// PTXParamManager - This class manages all .param variables defined for a 25 /// particular function. 26 class PTXParamManager { 27 private: 28 29 /// PTXParamType - Type of a .param variable 30 enum PTXParamType { 31 PTX_PARAM_TYPE_ARGUMENT, 32 PTX_PARAM_TYPE_RETURN, 33 PTX_PARAM_TYPE_LOCAL 34 }; 35 36 /// PTXParam - Definition of a PTX .param variable 37 struct PTXParam { 38 PTXParamType Type; 39 unsigned Size; 40 std::string Name; 41 }; 42 43 DenseMap<unsigned, PTXParam> AllParams; 44 SmallVector<unsigned, 4> ArgumentParams; 45 SmallVector<unsigned, 4> ReturnParams; 46 SmallVector<unsigned, 4> LocalParams; 47 48 public: 49 50 typedef SmallVector<unsigned, 4>::const_iterator param_iterator; 51 52 PTXParamManager(); 53 54 param_iterator arg_begin() const { return ArgumentParams.begin(); } 55 param_iterator arg_end() const { return ArgumentParams.end(); } 56 param_iterator ret_begin() const { return ReturnParams.begin(); } 57 param_iterator ret_end() const { return ReturnParams.end(); } 58 param_iterator local_begin() const { return LocalParams.begin(); } 59 param_iterator local_end() const { return LocalParams.end(); } 60 61 /// addArgumentParam - Returns a new .param used as an argument. 62 unsigned addArgumentParam(unsigned Size); 63 64 /// addReturnParam - Returns a new .param used as a return argument. 65 unsigned addReturnParam(unsigned Size); 66 67 /// addLocalParam - Returns a new .param used as a local .param variable. 68 unsigned addLocalParam(unsigned Size); 69 70 /// getParamName - Returns the name of the parameter as a string. 71 const std::string &getParamName(unsigned Param) const { 72 assert(AllParams.count(Param) == 1 && "Param has not been defined!"); 73 return AllParams.find(Param)->second.Name; 74 } 75 76 /// getParamSize - Returns the size of the parameter in bits. 77 unsigned getParamSize(unsigned Param) const { 78 assert(AllParams.count(Param) == 1 && "Param has not been defined!"); 79 return AllParams.find(Param)->second.Size; 80 } 81 82 }; 83 84 } 85 86 #endif 87 88