• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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