1 //===------------------------- ManglingUtils.cpp -------------------------===// 2 // 3 // SPIR Tools 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===---------------------------------------------------------------------===// 9 /* 10 * Contributed by: Intel Corporation. 11 */ 12 13 #include "ManglingUtils.h" 14 15 namespace SPIR { 16 17 // String represenration for the primitive types. 18 static const char* PrimitiveNames[PRIMITIVE_NUM] ={ 19 "bool", 20 "uchar", 21 "char", 22 "ushort", 23 "short", 24 "uint", 25 "int", 26 "ulong", 27 "long", 28 "half", 29 "float", 30 "double", 31 "void", 32 "...", 33 "image1d_t", 34 "image1d_array_t", 35 "image1d_buffer_t", 36 "image2d_t", 37 "image2d_array_t", 38 "image3d_t", 39 "image2d_msaa_t", 40 "image2d_array_msaa_t", 41 "image2d_msaa_depth_t", 42 "image2d_array_msaa_depth_t", 43 "image2d_depth_t", 44 "image2d_array_depth_t", 45 "event_t", 46 "pipe_t", 47 "reserve_id_t", 48 "queue_t", 49 "ndrange_t", 50 "clk_event_t", 51 "sampler_t", 52 "kernel_enqueue_flags_t", 53 "clk_profiling_info", 54 }; 55 56 const char* mangledTypes[PRIMITIVE_NUM] = { 57 "b", //BOOL 58 "h", //UCHAR 59 "c", //CHAR 60 "t", //USHORT 61 "s", //SHORT 62 "j", //UINT 63 "i", //INT 64 "m", //ULONG 65 "l", //LONG 66 "Dh", //HALF 67 "f", //FLOAT 68 "d", //DOUBLE 69 "v", //VOID 70 "z", //VarArg 71 "11ocl_image1d", //PRIMITIVE_IMAGE_1D_T 72 "16ocl_image1darray", //PRIMITIVE_IMAGE_1D_ARRAY_T 73 "17ocl_image1dbuffer", //PRIMITIVE_IMAGE_1D_BUFFER_T 74 "11ocl_image2d", //PRIMITIVE_IMAGE_2D_T 75 "16ocl_image2darray", //PRIMITIVE_IMAGE_2D_ARRAY_T 76 "11ocl_image3d", //PRIMITIVE_IMAGE_3D_T 77 "15ocl_image2dmsaa", //PRIMITIVE_IMAGE_2D_MSAA_T 78 "20ocl_image2darraymsaa", //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_T 79 "20ocl_image2dmsaadepth", //PRIMITIVE_IMAGE_2D_MSAA_DEPTH_T 80 "25ocl_image2darraymsaadepth", //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_DEPTH_T 81 "16ocl_image2ddepth", //PRIMITIVE_IMAGE_2D_DEPTH_T 82 "21ocl_image2darraydepth", //PRIMITIVE_IMAGE_2D_ARRAY_DEPTH_T 83 "9ocl_event", //PRIMITIVE_EVENT_T 84 "8ocl_pipe", //PRIMITIVE_PIPE_T 85 "13ocl_reserveid", //PRIMITIVE_RESERVE_ID_T 86 "9ocl_queue", //PRIMITIVE_QUEUE_T 87 "9ndrange_t", //PRIMITIVE_NDRANGE_T 88 "12ocl_clkevent", //PRIMITIVE_CLK_EVENT_T 89 "11ocl_sampler", //PRIMITIVE_SAMPLER_T 90 #if defined(SPIRV_SPIR20_MANGLING_REQUIREMENTS) 91 "i", //PRIMITIVE_KERNEL_ENQUEUE_FLAGS_T 92 "i", //PRIMITIVE_CLK_PROFILING_INFO 93 #else 94 "22kernel_enqueue_flags_t", //PRIMITIVE_KERNEL_ENQUEUE_FLAGS_T 95 "18clk_profiling_info", //PRIMITIVE_CLK_PROFILING_INFO 96 #endif 97 }; 98 99 const char* readableAttribute[ATTR_NUM] = { 100 "restrict", 101 "volatile", 102 "const", 103 "__private", 104 "__global", 105 "__constant", 106 "__local", 107 "__generic", 108 }; 109 110 const char* mangledAttribute[ATTR_NUM] = { 111 "r", 112 "V", 113 "K", 114 "", 115 "U3AS1", 116 "U3AS2", 117 "U3AS3", 118 "U3AS4", 119 }; 120 121 // SPIR supported version - stated version is oldest supported version. 122 static const SPIRversion primitiveSupportedVersions[PRIMITIVE_NUM] ={ 123 SPIR12, //BOOL 124 SPIR12, //UCHAR 125 SPIR12, //CHAR 126 SPIR12, //USHORT 127 SPIR12, //SHORT 128 SPIR12, //UINT 129 SPIR12, //INT 130 SPIR12, //ULONG 131 SPIR12, //LONG 132 SPIR12, //HALF 133 SPIR12, //FLOAT 134 SPIR12, //DOUBLE 135 SPIR12, //VOID 136 SPIR12, //VarArg 137 SPIR12, //PRIMITIVE_IMAGE_1D_T 138 SPIR12, //PRIMITIVE_IMAGE_1D_ARRAY_T 139 SPIR12, //PRIMITIVE_IMAGE_1D_BUFFER_T 140 SPIR12, //PRIMITIVE_IMAGE_2D_T 141 SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_T 142 SPIR12, //PRIMITIVE_IMAGE_3D_T 143 SPIR12, //PRIMITIVE_IMAGE_2D_MSAA_T 144 SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_T 145 SPIR12, //PRIMITIVE_IMAGE_2D_MSAA_DEPTH_T 146 SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_DEPTH_T 147 SPIR12, //PRIMITIVE_IMAGE_2D_DEPTH_T 148 SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_DEPTH_T 149 SPIR12, //PRIMITIVE_EVENT_T 150 SPIR20, //PRIMITIVE_PIPE_T 151 SPIR20, //PRIMITIVE_RESERVE_ID_T 152 SPIR20, //PRIMITIVE_QUEUE_T 153 SPIR20, //PRIMITIVE_NDRANGE_T 154 SPIR20, //PRIMITIVE_CLK_EVENT_T 155 SPIR12 //PRIMITIVE_SAMPLER_T 156 }; 157 mangledPrimitiveString(TypePrimitiveEnum t)158 const char* mangledPrimitiveString(TypePrimitiveEnum t) { 159 return mangledTypes[t]; 160 } 161 readablePrimitiveString(TypePrimitiveEnum t)162 const char* readablePrimitiveString(TypePrimitiveEnum t) { 163 return PrimitiveNames[t]; 164 } 165 getMangledAttribute(TypeAttributeEnum attribute)166 const char* getMangledAttribute(TypeAttributeEnum attribute) { 167 return mangledAttribute[attribute]; 168 } 169 getReadableAttribute(TypeAttributeEnum attribute)170 const char* getReadableAttribute(TypeAttributeEnum attribute) { 171 return readableAttribute[attribute]; 172 } 173 getSupportedVersion(TypePrimitiveEnum t)174 SPIRversion getSupportedVersion(TypePrimitiveEnum t) { 175 return primitiveSupportedVersions[t]; 176 } 177 mangledPrimitiveStringfromName(std::string type)178 const char* mangledPrimitiveStringfromName(std::string type) { 179 for (size_t i = 0; i < (sizeof(PrimitiveNames) / sizeof(PrimitiveNames[0])); i++) 180 if (type.compare(PrimitiveNames[i]) == 0) 181 return mangledTypes[i]; 182 return NULL; 183 } 184 getSPIRVersionAsString(SPIRversion version)185 const char* getSPIRVersionAsString(SPIRversion version) { 186 switch (version) { 187 case SPIR12: return "SPIR 1.2"; 188 case SPIR20: return "SPIR 2.0"; 189 default: 190 assert(false && "Unknown SPIR Version"); 191 return "Unknown SPIR Version"; 192 } 193 } 194 195 } // End SPIR namespace 196