| //===------------------------- ManglingUtils.cpp -------------------------===// |
| // |
| // SPIR Tools |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===---------------------------------------------------------------------===// |
| /* |
| * Contributed by: Intel Corporation. |
| */ |
| |
| #include "ManglingUtils.h" |
| |
| namespace SPIR { |
| |
| // String represenration for the primitive types. |
| static const char* PrimitiveNames[PRIMITIVE_NUM] ={ |
| "bool", |
| "uchar", |
| "char", |
| "ushort", |
| "short", |
| "uint", |
| "int", |
| "ulong", |
| "long", |
| "half", |
| "float", |
| "double", |
| "void", |
| "...", |
| "image1d_t", |
| "image1d_array_t", |
| "image1d_buffer_t", |
| "image2d_t", |
| "image2d_array_t", |
| "image3d_t", |
| "image2d_msaa_t", |
| "image2d_array_msaa_t", |
| "image2d_msaa_depth_t", |
| "image2d_array_msaa_depth_t", |
| "image2d_depth_t", |
| "image2d_array_depth_t", |
| "event_t", |
| "pipe_t", |
| "reserve_id_t", |
| "queue_t", |
| "ndrange_t", |
| "clk_event_t", |
| "sampler_t", |
| "kernel_enqueue_flags_t", |
| "clk_profiling_info", |
| }; |
| |
| const char* mangledTypes[PRIMITIVE_NUM] = { |
| "b", //BOOL |
| "h", //UCHAR |
| "c", //CHAR |
| "t", //USHORT |
| "s", //SHORT |
| "j", //UINT |
| "i", //INT |
| "m", //ULONG |
| "l", //LONG |
| "Dh", //HALF |
| "f", //FLOAT |
| "d", //DOUBLE |
| "v", //VOID |
| "z", //VarArg |
| "11ocl_image1d", //PRIMITIVE_IMAGE_1D_T |
| "16ocl_image1darray", //PRIMITIVE_IMAGE_1D_ARRAY_T |
| "17ocl_image1dbuffer", //PRIMITIVE_IMAGE_1D_BUFFER_T |
| "11ocl_image2d", //PRIMITIVE_IMAGE_2D_T |
| "16ocl_image2darray", //PRIMITIVE_IMAGE_2D_ARRAY_T |
| "11ocl_image3d", //PRIMITIVE_IMAGE_3D_T |
| "15ocl_image2dmsaa", //PRIMITIVE_IMAGE_2D_MSAA_T |
| "20ocl_image2darraymsaa", //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_T |
| "20ocl_image2dmsaadepth", //PRIMITIVE_IMAGE_2D_MSAA_DEPTH_T |
| "25ocl_image2darraymsaadepth", //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_DEPTH_T |
| "16ocl_image2ddepth", //PRIMITIVE_IMAGE_2D_DEPTH_T |
| "21ocl_image2darraydepth", //PRIMITIVE_IMAGE_2D_ARRAY_DEPTH_T |
| "9ocl_event", //PRIMITIVE_EVENT_T |
| "8ocl_pipe", //PRIMITIVE_PIPE_T |
| "13ocl_reserveid", //PRIMITIVE_RESERVE_ID_T |
| "9ocl_queue", //PRIMITIVE_QUEUE_T |
| "9ndrange_t", //PRIMITIVE_NDRANGE_T |
| "12ocl_clkevent", //PRIMITIVE_CLK_EVENT_T |
| "11ocl_sampler", //PRIMITIVE_SAMPLER_T |
| #if defined(SPIRV_SPIR20_MANGLING_REQUIREMENTS) |
| "i", //PRIMITIVE_KERNEL_ENQUEUE_FLAGS_T |
| "i", //PRIMITIVE_CLK_PROFILING_INFO |
| #else |
| "22kernel_enqueue_flags_t", //PRIMITIVE_KERNEL_ENQUEUE_FLAGS_T |
| "18clk_profiling_info", //PRIMITIVE_CLK_PROFILING_INFO |
| #endif |
| }; |
| |
| const char* readableAttribute[ATTR_NUM] = { |
| "restrict", |
| "volatile", |
| "const", |
| "__private", |
| "__global", |
| "__constant", |
| "__local", |
| "__generic", |
| }; |
| |
| const char* mangledAttribute[ATTR_NUM] = { |
| "r", |
| "V", |
| "K", |
| "", |
| "U3AS1", |
| "U3AS2", |
| "U3AS3", |
| "U3AS4", |
| }; |
| |
| // SPIR supported version - stated version is oldest supported version. |
| static const SPIRversion primitiveSupportedVersions[PRIMITIVE_NUM] ={ |
| SPIR12, //BOOL |
| SPIR12, //UCHAR |
| SPIR12, //CHAR |
| SPIR12, //USHORT |
| SPIR12, //SHORT |
| SPIR12, //UINT |
| SPIR12, //INT |
| SPIR12, //ULONG |
| SPIR12, //LONG |
| SPIR12, //HALF |
| SPIR12, //FLOAT |
| SPIR12, //DOUBLE |
| SPIR12, //VOID |
| SPIR12, //VarArg |
| SPIR12, //PRIMITIVE_IMAGE_1D_T |
| SPIR12, //PRIMITIVE_IMAGE_1D_ARRAY_T |
| SPIR12, //PRIMITIVE_IMAGE_1D_BUFFER_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_T |
| SPIR12, //PRIMITIVE_IMAGE_3D_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_MSAA_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_MSAA_DEPTH_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_MSAA_DEPTH_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_DEPTH_T |
| SPIR12, //PRIMITIVE_IMAGE_2D_ARRAY_DEPTH_T |
| SPIR12, //PRIMITIVE_EVENT_T |
| SPIR20, //PRIMITIVE_PIPE_T |
| SPIR20, //PRIMITIVE_RESERVE_ID_T |
| SPIR20, //PRIMITIVE_QUEUE_T |
| SPIR20, //PRIMITIVE_NDRANGE_T |
| SPIR20, //PRIMITIVE_CLK_EVENT_T |
| SPIR12 //PRIMITIVE_SAMPLER_T |
| }; |
| |
| const char* mangledPrimitiveString(TypePrimitiveEnum t) { |
| return mangledTypes[t]; |
| } |
| |
| const char* readablePrimitiveString(TypePrimitiveEnum t) { |
| return PrimitiveNames[t]; |
| } |
| |
| const char* getMangledAttribute(TypeAttributeEnum attribute) { |
| return mangledAttribute[attribute]; |
| } |
| |
| const char* getReadableAttribute(TypeAttributeEnum attribute) { |
| return readableAttribute[attribute]; |
| } |
| |
| SPIRversion getSupportedVersion(TypePrimitiveEnum t) { |
| return primitiveSupportedVersions[t]; |
| } |
| |
| const char* mangledPrimitiveStringfromName(std::string type) { |
| for (size_t i = 0; i < (sizeof(PrimitiveNames) / sizeof(PrimitiveNames[0])); i++) |
| if (type.compare(PrimitiveNames[i]) == 0) |
| return mangledTypes[i]; |
| return NULL; |
| } |
| |
| const char* getSPIRVersionAsString(SPIRversion version) { |
| switch (version) { |
| case SPIR12: return "SPIR 1.2"; |
| case SPIR20: return "SPIR 2.0"; |
| default: |
| assert(false && "Unknown SPIR Version"); |
| return "Unknown SPIR Version"; |
| } |
| } |
| |
| } // End SPIR namespace |