xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1*81ad6265SDimitry Andric //===-- SPIRVBaseInfo.cpp -  Top level definitions for SPIRV ----*- C++ -*-===//
2*81ad6265SDimitry Andric //
3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*81ad6265SDimitry Andric //
7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
8*81ad6265SDimitry Andric //
9*81ad6265SDimitry Andric // This file contains small standalone helper functions and enum definitions for
10*81ad6265SDimitry Andric // the SPIRV target useful for the compiler back-end and the MC libraries.
11*81ad6265SDimitry Andric // As such, it deliberately does not include references to LLVM core
12*81ad6265SDimitry Andric // code gen types, passes, etc..
13*81ad6265SDimitry Andric //
14*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
15*81ad6265SDimitry Andric 
16*81ad6265SDimitry Andric #include "SPIRVBaseInfo.h"
17*81ad6265SDimitry Andric #include "llvm/Support/ErrorHandling.h"
18*81ad6265SDimitry Andric 
19*81ad6265SDimitry Andric namespace llvm {
20*81ad6265SDimitry Andric namespace SPIRV {
21*81ad6265SDimitry Andric 
22*81ad6265SDimitry Andric #define CASE(CLASS, ATTR)                                                      \
23*81ad6265SDimitry Andric   case CLASS::ATTR:                                                            \
24*81ad6265SDimitry Andric     return #ATTR;
25*81ad6265SDimitry Andric #define CASE_SUF(CLASS, SF, ATTR)                                              \
26*81ad6265SDimitry Andric   case CLASS::SF##_##ATTR:                                                     \
27*81ad6265SDimitry Andric     return #ATTR;
28*81ad6265SDimitry Andric 
29*81ad6265SDimitry Andric // Implement getEnumName(Enum e) helper functions.
30*81ad6265SDimitry Andric // TODO: re-implement all the functions using TableGen.
31*81ad6265SDimitry Andric StringRef getCapabilityName(Capability e) {
32*81ad6265SDimitry Andric   switch (e) {
33*81ad6265SDimitry Andric     CASE(Capability, Matrix)
34*81ad6265SDimitry Andric     CASE(Capability, Shader)
35*81ad6265SDimitry Andric     CASE(Capability, Geometry)
36*81ad6265SDimitry Andric     CASE(Capability, Tessellation)
37*81ad6265SDimitry Andric     CASE(Capability, Addresses)
38*81ad6265SDimitry Andric     CASE(Capability, Linkage)
39*81ad6265SDimitry Andric     CASE(Capability, Kernel)
40*81ad6265SDimitry Andric     CASE(Capability, Vector16)
41*81ad6265SDimitry Andric     CASE(Capability, Float16Buffer)
42*81ad6265SDimitry Andric     CASE(Capability, Float16)
43*81ad6265SDimitry Andric     CASE(Capability, Float64)
44*81ad6265SDimitry Andric     CASE(Capability, Int64)
45*81ad6265SDimitry Andric     CASE(Capability, Int64Atomics)
46*81ad6265SDimitry Andric     CASE(Capability, ImageBasic)
47*81ad6265SDimitry Andric     CASE(Capability, ImageReadWrite)
48*81ad6265SDimitry Andric     CASE(Capability, ImageMipmap)
49*81ad6265SDimitry Andric     CASE(Capability, Pipes)
50*81ad6265SDimitry Andric     CASE(Capability, Groups)
51*81ad6265SDimitry Andric     CASE(Capability, DeviceEnqueue)
52*81ad6265SDimitry Andric     CASE(Capability, LiteralSampler)
53*81ad6265SDimitry Andric     CASE(Capability, AtomicStorage)
54*81ad6265SDimitry Andric     CASE(Capability, Int16)
55*81ad6265SDimitry Andric     CASE(Capability, TessellationPointSize)
56*81ad6265SDimitry Andric     CASE(Capability, GeometryPointSize)
57*81ad6265SDimitry Andric     CASE(Capability, ImageGatherExtended)
58*81ad6265SDimitry Andric     CASE(Capability, StorageImageMultisample)
59*81ad6265SDimitry Andric     CASE(Capability, UniformBufferArrayDynamicIndexing)
60*81ad6265SDimitry Andric     CASE(Capability, SampledImageArrayDymnamicIndexing)
61*81ad6265SDimitry Andric     CASE(Capability, ClipDistance)
62*81ad6265SDimitry Andric     CASE(Capability, CullDistance)
63*81ad6265SDimitry Andric     CASE(Capability, ImageCubeArray)
64*81ad6265SDimitry Andric     CASE(Capability, SampleRateShading)
65*81ad6265SDimitry Andric     CASE(Capability, ImageRect)
66*81ad6265SDimitry Andric     CASE(Capability, SampledRect)
67*81ad6265SDimitry Andric     CASE(Capability, GenericPointer)
68*81ad6265SDimitry Andric     CASE(Capability, Int8)
69*81ad6265SDimitry Andric     CASE(Capability, InputAttachment)
70*81ad6265SDimitry Andric     CASE(Capability, SparseResidency)
71*81ad6265SDimitry Andric     CASE(Capability, MinLod)
72*81ad6265SDimitry Andric     CASE(Capability, Sampled1D)
73*81ad6265SDimitry Andric     CASE(Capability, Image1D)
74*81ad6265SDimitry Andric     CASE(Capability, SampledCubeArray)
75*81ad6265SDimitry Andric     CASE(Capability, SampledBuffer)
76*81ad6265SDimitry Andric     CASE(Capability, ImageBuffer)
77*81ad6265SDimitry Andric     CASE(Capability, ImageMSArray)
78*81ad6265SDimitry Andric     CASE(Capability, StorageImageExtendedFormats)
79*81ad6265SDimitry Andric     CASE(Capability, ImageQuery)
80*81ad6265SDimitry Andric     CASE(Capability, DerivativeControl)
81*81ad6265SDimitry Andric     CASE(Capability, InterpolationFunction)
82*81ad6265SDimitry Andric     CASE(Capability, TransformFeedback)
83*81ad6265SDimitry Andric     CASE(Capability, GeometryStreams)
84*81ad6265SDimitry Andric     CASE(Capability, StorageImageReadWithoutFormat)
85*81ad6265SDimitry Andric     CASE(Capability, StorageImageWriteWithoutFormat)
86*81ad6265SDimitry Andric     CASE(Capability, MultiViewport)
87*81ad6265SDimitry Andric     CASE(Capability, SubgroupDispatch)
88*81ad6265SDimitry Andric     CASE(Capability, NamedBarrier)
89*81ad6265SDimitry Andric     CASE(Capability, PipeStorage)
90*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniform)
91*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformVote)
92*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformArithmetic)
93*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformBallot)
94*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformShuffle)
95*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformShuffleRelative)
96*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformClustered)
97*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformQuad)
98*81ad6265SDimitry Andric     CASE(Capability, SubgroupBallotKHR)
99*81ad6265SDimitry Andric     CASE(Capability, DrawParameters)
100*81ad6265SDimitry Andric     CASE(Capability, SubgroupVoteKHR)
101*81ad6265SDimitry Andric     CASE(Capability, StorageBuffer16BitAccess)
102*81ad6265SDimitry Andric     CASE(Capability, StorageUniform16)
103*81ad6265SDimitry Andric     CASE(Capability, StoragePushConstant16)
104*81ad6265SDimitry Andric     CASE(Capability, StorageInputOutput16)
105*81ad6265SDimitry Andric     CASE(Capability, DeviceGroup)
106*81ad6265SDimitry Andric     CASE(Capability, MultiView)
107*81ad6265SDimitry Andric     CASE(Capability, VariablePointersStorageBuffer)
108*81ad6265SDimitry Andric     CASE(Capability, VariablePointers)
109*81ad6265SDimitry Andric     CASE(Capability, AtomicStorageOps)
110*81ad6265SDimitry Andric     CASE(Capability, SampleMaskPostDepthCoverage)
111*81ad6265SDimitry Andric     CASE(Capability, StorageBuffer8BitAccess)
112*81ad6265SDimitry Andric     CASE(Capability, UniformAndStorageBuffer8BitAccess)
113*81ad6265SDimitry Andric     CASE(Capability, StoragePushConstant8)
114*81ad6265SDimitry Andric     CASE(Capability, DenormPreserve)
115*81ad6265SDimitry Andric     CASE(Capability, DenormFlushToZero)
116*81ad6265SDimitry Andric     CASE(Capability, SignedZeroInfNanPreserve)
117*81ad6265SDimitry Andric     CASE(Capability, RoundingModeRTE)
118*81ad6265SDimitry Andric     CASE(Capability, RoundingModeRTZ)
119*81ad6265SDimitry Andric     CASE(Capability, Float16ImageAMD)
120*81ad6265SDimitry Andric     CASE(Capability, ImageGatherBiasLodAMD)
121*81ad6265SDimitry Andric     CASE(Capability, FragmentMaskAMD)
122*81ad6265SDimitry Andric     CASE(Capability, StencilExportEXT)
123*81ad6265SDimitry Andric     CASE(Capability, ImageReadWriteLodAMD)
124*81ad6265SDimitry Andric     CASE(Capability, SampleMaskOverrideCoverageNV)
125*81ad6265SDimitry Andric     CASE(Capability, GeometryShaderPassthroughNV)
126*81ad6265SDimitry Andric     CASE(Capability, ShaderViewportIndexLayerEXT)
127*81ad6265SDimitry Andric     CASE(Capability, ShaderViewportMaskNV)
128*81ad6265SDimitry Andric     CASE(Capability, ShaderStereoViewNV)
129*81ad6265SDimitry Andric     CASE(Capability, PerViewAttributesNV)
130*81ad6265SDimitry Andric     CASE(Capability, FragmentFullyCoveredEXT)
131*81ad6265SDimitry Andric     CASE(Capability, MeshShadingNV)
132*81ad6265SDimitry Andric     CASE(Capability, ShaderNonUniformEXT)
133*81ad6265SDimitry Andric     CASE(Capability, RuntimeDescriptorArrayEXT)
134*81ad6265SDimitry Andric     CASE(Capability, InputAttachmentArrayDynamicIndexingEXT)
135*81ad6265SDimitry Andric     CASE(Capability, UniformTexelBufferArrayDynamicIndexingEXT)
136*81ad6265SDimitry Andric     CASE(Capability, StorageTexelBufferArrayDynamicIndexingEXT)
137*81ad6265SDimitry Andric     CASE(Capability, UniformBufferArrayNonUniformIndexingEXT)
138*81ad6265SDimitry Andric     CASE(Capability, SampledImageArrayNonUniformIndexingEXT)
139*81ad6265SDimitry Andric     CASE(Capability, StorageBufferArrayNonUniformIndexingEXT)
140*81ad6265SDimitry Andric     CASE(Capability, StorageImageArrayNonUniformIndexingEXT)
141*81ad6265SDimitry Andric     CASE(Capability, InputAttachmentArrayNonUniformIndexingEXT)
142*81ad6265SDimitry Andric     CASE(Capability, UniformTexelBufferArrayNonUniformIndexingEXT)
143*81ad6265SDimitry Andric     CASE(Capability, StorageTexelBufferArrayNonUniformIndexingEXT)
144*81ad6265SDimitry Andric     CASE(Capability, RayTracingNV)
145*81ad6265SDimitry Andric     CASE(Capability, SubgroupShuffleINTEL)
146*81ad6265SDimitry Andric     CASE(Capability, SubgroupBufferBlockIOINTEL)
147*81ad6265SDimitry Andric     CASE(Capability, SubgroupImageBlockIOINTEL)
148*81ad6265SDimitry Andric     CASE(Capability, SubgroupImageMediaBlockIOINTEL)
149*81ad6265SDimitry Andric     CASE(Capability, SubgroupAvcMotionEstimationINTEL)
150*81ad6265SDimitry Andric     CASE(Capability, SubgroupAvcMotionEstimationIntraINTEL)
151*81ad6265SDimitry Andric     CASE(Capability, SubgroupAvcMotionEstimationChromaINTEL)
152*81ad6265SDimitry Andric     CASE(Capability, GroupNonUniformPartitionedNV)
153*81ad6265SDimitry Andric     CASE(Capability, VulkanMemoryModelKHR)
154*81ad6265SDimitry Andric     CASE(Capability, VulkanMemoryModelDeviceScopeKHR)
155*81ad6265SDimitry Andric     CASE(Capability, ImageFootprintNV)
156*81ad6265SDimitry Andric     CASE(Capability, FragmentBarycentricNV)
157*81ad6265SDimitry Andric     CASE(Capability, ComputeDerivativeGroupQuadsNV)
158*81ad6265SDimitry Andric     CASE(Capability, ComputeDerivativeGroupLinearNV)
159*81ad6265SDimitry Andric     CASE(Capability, FragmentDensityEXT)
160*81ad6265SDimitry Andric     CASE(Capability, PhysicalStorageBufferAddressesEXT)
161*81ad6265SDimitry Andric     CASE(Capability, CooperativeMatrixNV)
162*81ad6265SDimitry Andric     break;
163*81ad6265SDimitry Andric   }
164*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
165*81ad6265SDimitry Andric }
166*81ad6265SDimitry Andric 
167*81ad6265SDimitry Andric StringRef getSourceLanguageName(SourceLanguage e) {
168*81ad6265SDimitry Andric   switch (e) {
169*81ad6265SDimitry Andric     CASE(SourceLanguage, Unknown)
170*81ad6265SDimitry Andric     CASE(SourceLanguage, ESSL)
171*81ad6265SDimitry Andric     CASE(SourceLanguage, GLSL)
172*81ad6265SDimitry Andric     CASE(SourceLanguage, OpenCL_C)
173*81ad6265SDimitry Andric     CASE(SourceLanguage, OpenCL_CPP)
174*81ad6265SDimitry Andric     CASE(SourceLanguage, HLSL)
175*81ad6265SDimitry Andric     break;
176*81ad6265SDimitry Andric   }
177*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
178*81ad6265SDimitry Andric }
179*81ad6265SDimitry Andric 
180*81ad6265SDimitry Andric StringRef getExecutionModelName(ExecutionModel e) {
181*81ad6265SDimitry Andric   switch (e) {
182*81ad6265SDimitry Andric     CASE(ExecutionModel, Vertex)
183*81ad6265SDimitry Andric     CASE(ExecutionModel, TessellationControl)
184*81ad6265SDimitry Andric     CASE(ExecutionModel, TessellationEvaluation)
185*81ad6265SDimitry Andric     CASE(ExecutionModel, Geometry)
186*81ad6265SDimitry Andric     CASE(ExecutionModel, Fragment)
187*81ad6265SDimitry Andric     CASE(ExecutionModel, GLCompute)
188*81ad6265SDimitry Andric     CASE(ExecutionModel, Kernel)
189*81ad6265SDimitry Andric     CASE(ExecutionModel, TaskNV)
190*81ad6265SDimitry Andric     CASE(ExecutionModel, MeshNV)
191*81ad6265SDimitry Andric     CASE(ExecutionModel, RayGenerationNV)
192*81ad6265SDimitry Andric     CASE(ExecutionModel, IntersectionNV)
193*81ad6265SDimitry Andric     CASE(ExecutionModel, AnyHitNV)
194*81ad6265SDimitry Andric     CASE(ExecutionModel, ClosestHitNV)
195*81ad6265SDimitry Andric     CASE(ExecutionModel, MissNV)
196*81ad6265SDimitry Andric     CASE(ExecutionModel, CallableNV)
197*81ad6265SDimitry Andric     break;
198*81ad6265SDimitry Andric   }
199*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
200*81ad6265SDimitry Andric }
201*81ad6265SDimitry Andric 
202*81ad6265SDimitry Andric StringRef getAddressingModelName(AddressingModel e) {
203*81ad6265SDimitry Andric   switch (e) {
204*81ad6265SDimitry Andric     CASE(AddressingModel, Logical)
205*81ad6265SDimitry Andric     CASE(AddressingModel, Physical32)
206*81ad6265SDimitry Andric     CASE(AddressingModel, Physical64)
207*81ad6265SDimitry Andric     CASE(AddressingModel, PhysicalStorageBuffer64EXT)
208*81ad6265SDimitry Andric     break;
209*81ad6265SDimitry Andric   }
210*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
211*81ad6265SDimitry Andric }
212*81ad6265SDimitry Andric 
213*81ad6265SDimitry Andric StringRef getMemoryModelName(MemoryModel e) {
214*81ad6265SDimitry Andric   switch (e) {
215*81ad6265SDimitry Andric     CASE(MemoryModel, Simple)
216*81ad6265SDimitry Andric     CASE(MemoryModel, GLSL450)
217*81ad6265SDimitry Andric     CASE(MemoryModel, OpenCL)
218*81ad6265SDimitry Andric     CASE(MemoryModel, VulkanKHR)
219*81ad6265SDimitry Andric     break;
220*81ad6265SDimitry Andric   }
221*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
222*81ad6265SDimitry Andric }
223*81ad6265SDimitry Andric 
224*81ad6265SDimitry Andric StringRef getExecutionModeName(ExecutionMode e) {
225*81ad6265SDimitry Andric   switch (e) {
226*81ad6265SDimitry Andric     CASE(ExecutionMode, Invocations)
227*81ad6265SDimitry Andric     CASE(ExecutionMode, SpacingEqual)
228*81ad6265SDimitry Andric     CASE(ExecutionMode, SpacingFractionalEven)
229*81ad6265SDimitry Andric     CASE(ExecutionMode, SpacingFractionalOdd)
230*81ad6265SDimitry Andric     CASE(ExecutionMode, VertexOrderCw)
231*81ad6265SDimitry Andric     CASE(ExecutionMode, VertexOrderCcw)
232*81ad6265SDimitry Andric     CASE(ExecutionMode, PixelCenterInteger)
233*81ad6265SDimitry Andric     CASE(ExecutionMode, OriginUpperLeft)
234*81ad6265SDimitry Andric     CASE(ExecutionMode, OriginLowerLeft)
235*81ad6265SDimitry Andric     CASE(ExecutionMode, EarlyFragmentTests)
236*81ad6265SDimitry Andric     CASE(ExecutionMode, PointMode)
237*81ad6265SDimitry Andric     CASE(ExecutionMode, Xfb)
238*81ad6265SDimitry Andric     CASE(ExecutionMode, DepthReplacing)
239*81ad6265SDimitry Andric     CASE(ExecutionMode, DepthGreater)
240*81ad6265SDimitry Andric     CASE(ExecutionMode, DepthLess)
241*81ad6265SDimitry Andric     CASE(ExecutionMode, DepthUnchanged)
242*81ad6265SDimitry Andric     CASE(ExecutionMode, LocalSize)
243*81ad6265SDimitry Andric     CASE(ExecutionMode, LocalSizeHint)
244*81ad6265SDimitry Andric     CASE(ExecutionMode, InputPoints)
245*81ad6265SDimitry Andric     CASE(ExecutionMode, InputLines)
246*81ad6265SDimitry Andric     CASE(ExecutionMode, InputLinesAdjacency)
247*81ad6265SDimitry Andric     CASE(ExecutionMode, Triangles)
248*81ad6265SDimitry Andric     CASE(ExecutionMode, InputTrianglesAdjacency)
249*81ad6265SDimitry Andric     CASE(ExecutionMode, Quads)
250*81ad6265SDimitry Andric     CASE(ExecutionMode, Isolines)
251*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputVertices)
252*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputPoints)
253*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputLineStrip)
254*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputTriangleStrip)
255*81ad6265SDimitry Andric     CASE(ExecutionMode, VecTypeHint)
256*81ad6265SDimitry Andric     CASE(ExecutionMode, ContractionOff)
257*81ad6265SDimitry Andric     CASE(ExecutionMode, Initializer)
258*81ad6265SDimitry Andric     CASE(ExecutionMode, Finalizer)
259*81ad6265SDimitry Andric     CASE(ExecutionMode, SubgroupSize)
260*81ad6265SDimitry Andric     CASE(ExecutionMode, SubgroupsPerWorkgroup)
261*81ad6265SDimitry Andric     CASE(ExecutionMode, SubgroupsPerWorkgroupId)
262*81ad6265SDimitry Andric     CASE(ExecutionMode, LocalSizeId)
263*81ad6265SDimitry Andric     CASE(ExecutionMode, LocalSizeHintId)
264*81ad6265SDimitry Andric     CASE(ExecutionMode, PostDepthCoverage)
265*81ad6265SDimitry Andric     CASE(ExecutionMode, DenormPreserve)
266*81ad6265SDimitry Andric     CASE(ExecutionMode, DenormFlushToZero)
267*81ad6265SDimitry Andric     CASE(ExecutionMode, SignedZeroInfNanPreserve)
268*81ad6265SDimitry Andric     CASE(ExecutionMode, RoundingModeRTE)
269*81ad6265SDimitry Andric     CASE(ExecutionMode, RoundingModeRTZ)
270*81ad6265SDimitry Andric     CASE(ExecutionMode, StencilRefReplacingEXT)
271*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputLinesNV)
272*81ad6265SDimitry Andric     CASE(ExecutionMode, DerivativeGroupQuadsNV)
273*81ad6265SDimitry Andric     CASE(ExecutionMode, DerivativeGroupLinearNV)
274*81ad6265SDimitry Andric     CASE(ExecutionMode, OutputTrianglesNV)
275*81ad6265SDimitry Andric     break;
276*81ad6265SDimitry Andric   }
277*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
278*81ad6265SDimitry Andric }
279*81ad6265SDimitry Andric 
280*81ad6265SDimitry Andric StringRef getStorageClassName(StorageClass e) {
281*81ad6265SDimitry Andric   switch (e) {
282*81ad6265SDimitry Andric     CASE(StorageClass, UniformConstant)
283*81ad6265SDimitry Andric     CASE(StorageClass, Input)
284*81ad6265SDimitry Andric     CASE(StorageClass, Uniform)
285*81ad6265SDimitry Andric     CASE(StorageClass, Output)
286*81ad6265SDimitry Andric     CASE(StorageClass, Workgroup)
287*81ad6265SDimitry Andric     CASE(StorageClass, CrossWorkgroup)
288*81ad6265SDimitry Andric     CASE(StorageClass, Private)
289*81ad6265SDimitry Andric     CASE(StorageClass, Function)
290*81ad6265SDimitry Andric     CASE(StorageClass, Generic)
291*81ad6265SDimitry Andric     CASE(StorageClass, PushConstant)
292*81ad6265SDimitry Andric     CASE(StorageClass, AtomicCounter)
293*81ad6265SDimitry Andric     CASE(StorageClass, Image)
294*81ad6265SDimitry Andric     CASE(StorageClass, StorageBuffer)
295*81ad6265SDimitry Andric     CASE(StorageClass, CallableDataNV)
296*81ad6265SDimitry Andric     CASE(StorageClass, IncomingCallableDataNV)
297*81ad6265SDimitry Andric     CASE(StorageClass, RayPayloadNV)
298*81ad6265SDimitry Andric     CASE(StorageClass, HitAttributeNV)
299*81ad6265SDimitry Andric     CASE(StorageClass, IncomingRayPayloadNV)
300*81ad6265SDimitry Andric     CASE(StorageClass, ShaderRecordBufferNV)
301*81ad6265SDimitry Andric     CASE(StorageClass, PhysicalStorageBufferEXT)
302*81ad6265SDimitry Andric     break;
303*81ad6265SDimitry Andric   }
304*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
305*81ad6265SDimitry Andric }
306*81ad6265SDimitry Andric 
307*81ad6265SDimitry Andric StringRef getDimName(Dim dim) {
308*81ad6265SDimitry Andric   switch (dim) {
309*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, 1D)
310*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, 2D)
311*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, 3D)
312*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, Cube)
313*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, Rect)
314*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, Buffer)
315*81ad6265SDimitry Andric     CASE_SUF(Dim, DIM, SubpassData)
316*81ad6265SDimitry Andric     break;
317*81ad6265SDimitry Andric   }
318*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
319*81ad6265SDimitry Andric }
320*81ad6265SDimitry Andric 
321*81ad6265SDimitry Andric StringRef getSamplerAddressingModeName(SamplerAddressingMode e) {
322*81ad6265SDimitry Andric   switch (e) {
323*81ad6265SDimitry Andric     CASE(SamplerAddressingMode, None)
324*81ad6265SDimitry Andric     CASE(SamplerAddressingMode, ClampToEdge)
325*81ad6265SDimitry Andric     CASE(SamplerAddressingMode, Clamp)
326*81ad6265SDimitry Andric     CASE(SamplerAddressingMode, Repeat)
327*81ad6265SDimitry Andric     CASE(SamplerAddressingMode, RepeatMirrored)
328*81ad6265SDimitry Andric     break;
329*81ad6265SDimitry Andric   }
330*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
331*81ad6265SDimitry Andric }
332*81ad6265SDimitry Andric 
333*81ad6265SDimitry Andric StringRef getSamplerFilterModeName(SamplerFilterMode e) {
334*81ad6265SDimitry Andric   switch (e) {
335*81ad6265SDimitry Andric     CASE(SamplerFilterMode, Nearest)
336*81ad6265SDimitry Andric     CASE(SamplerFilterMode, Linear)
337*81ad6265SDimitry Andric     break;
338*81ad6265SDimitry Andric   }
339*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
340*81ad6265SDimitry Andric }
341*81ad6265SDimitry Andric 
342*81ad6265SDimitry Andric StringRef getImageFormatName(ImageFormat e) {
343*81ad6265SDimitry Andric   switch (e) {
344*81ad6265SDimitry Andric     CASE(ImageFormat, Unknown)
345*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba32f)
346*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba16f)
347*81ad6265SDimitry Andric     CASE(ImageFormat, R32f)
348*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba8)
349*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba8Snorm)
350*81ad6265SDimitry Andric     CASE(ImageFormat, Rg32f)
351*81ad6265SDimitry Andric     CASE(ImageFormat, Rg16f)
352*81ad6265SDimitry Andric     CASE(ImageFormat, R11fG11fB10f)
353*81ad6265SDimitry Andric     CASE(ImageFormat, R16f)
354*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba16)
355*81ad6265SDimitry Andric     CASE(ImageFormat, Rgb10A2)
356*81ad6265SDimitry Andric     CASE(ImageFormat, Rg16)
357*81ad6265SDimitry Andric     CASE(ImageFormat, Rg8)
358*81ad6265SDimitry Andric     CASE(ImageFormat, R16)
359*81ad6265SDimitry Andric     CASE(ImageFormat, R8)
360*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba16Snorm)
361*81ad6265SDimitry Andric     CASE(ImageFormat, Rg16Snorm)
362*81ad6265SDimitry Andric     CASE(ImageFormat, Rg8Snorm)
363*81ad6265SDimitry Andric     CASE(ImageFormat, R16Snorm)
364*81ad6265SDimitry Andric     CASE(ImageFormat, R8Snorm)
365*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba32i)
366*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba16i)
367*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba8i)
368*81ad6265SDimitry Andric     CASE(ImageFormat, R32i)
369*81ad6265SDimitry Andric     CASE(ImageFormat, Rg32i)
370*81ad6265SDimitry Andric     CASE(ImageFormat, Rg16i)
371*81ad6265SDimitry Andric     CASE(ImageFormat, Rg8i)
372*81ad6265SDimitry Andric     CASE(ImageFormat, R16i)
373*81ad6265SDimitry Andric     CASE(ImageFormat, R8i)
374*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba32ui)
375*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba16ui)
376*81ad6265SDimitry Andric     CASE(ImageFormat, Rgba8ui)
377*81ad6265SDimitry Andric     CASE(ImageFormat, R32ui)
378*81ad6265SDimitry Andric     CASE(ImageFormat, Rgb10a2ui)
379*81ad6265SDimitry Andric     CASE(ImageFormat, Rg32ui)
380*81ad6265SDimitry Andric     CASE(ImageFormat, Rg16ui)
381*81ad6265SDimitry Andric     CASE(ImageFormat, Rg8ui)
382*81ad6265SDimitry Andric     CASE(ImageFormat, R16ui)
383*81ad6265SDimitry Andric     CASE(ImageFormat, R8ui)
384*81ad6265SDimitry Andric     break;
385*81ad6265SDimitry Andric   }
386*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
387*81ad6265SDimitry Andric }
388*81ad6265SDimitry Andric 
389*81ad6265SDimitry Andric StringRef getImageChannelOrderName(ImageChannelOrder e) {
390*81ad6265SDimitry Andric   switch (e) {
391*81ad6265SDimitry Andric     CASE(ImageChannelOrder, R)
392*81ad6265SDimitry Andric     CASE(ImageChannelOrder, A)
393*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RG)
394*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RA)
395*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RGB)
396*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RGBA)
397*81ad6265SDimitry Andric     CASE(ImageChannelOrder, BGRA)
398*81ad6265SDimitry Andric     CASE(ImageChannelOrder, ARGB)
399*81ad6265SDimitry Andric     CASE(ImageChannelOrder, Intensity)
400*81ad6265SDimitry Andric     CASE(ImageChannelOrder, Luminance)
401*81ad6265SDimitry Andric     CASE(ImageChannelOrder, Rx)
402*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RGx)
403*81ad6265SDimitry Andric     CASE(ImageChannelOrder, RGBx)
404*81ad6265SDimitry Andric     CASE(ImageChannelOrder, Depth)
405*81ad6265SDimitry Andric     CASE(ImageChannelOrder, DepthStencil)
406*81ad6265SDimitry Andric     CASE(ImageChannelOrder, sRGB)
407*81ad6265SDimitry Andric     CASE(ImageChannelOrder, sRGBx)
408*81ad6265SDimitry Andric     CASE(ImageChannelOrder, sRGBA)
409*81ad6265SDimitry Andric     CASE(ImageChannelOrder, sBGRA)
410*81ad6265SDimitry Andric     CASE(ImageChannelOrder, ABGR)
411*81ad6265SDimitry Andric     break;
412*81ad6265SDimitry Andric   }
413*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
414*81ad6265SDimitry Andric }
415*81ad6265SDimitry Andric 
416*81ad6265SDimitry Andric StringRef getImageChannelDataTypeName(ImageChannelDataType e) {
417*81ad6265SDimitry Andric   switch (e) {
418*81ad6265SDimitry Andric     CASE(ImageChannelDataType, SnormInt8)
419*81ad6265SDimitry Andric     CASE(ImageChannelDataType, SnormInt16)
420*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormInt8)
421*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormInt16)
422*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormShort565)
423*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormShort555)
424*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormInt101010)
425*81ad6265SDimitry Andric     CASE(ImageChannelDataType, SignedInt8)
426*81ad6265SDimitry Andric     CASE(ImageChannelDataType, SignedInt16)
427*81ad6265SDimitry Andric     CASE(ImageChannelDataType, SignedInt32)
428*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnsignedInt8)
429*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnsignedInt16)
430*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnsigendInt32)
431*81ad6265SDimitry Andric     CASE(ImageChannelDataType, HalfFloat)
432*81ad6265SDimitry Andric     CASE(ImageChannelDataType, Float)
433*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormInt24)
434*81ad6265SDimitry Andric     CASE(ImageChannelDataType, UnormInt101010_2)
435*81ad6265SDimitry Andric     break;
436*81ad6265SDimitry Andric   }
437*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
438*81ad6265SDimitry Andric }
439*81ad6265SDimitry Andric 
440*81ad6265SDimitry Andric std::string getImageOperandName(uint32_t e) {
441*81ad6265SDimitry Andric   std::string nameString = "";
442*81ad6265SDimitry Andric   std::string sep = "";
443*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::None))
444*81ad6265SDimitry Andric     return "None";
445*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::Bias))
446*81ad6265SDimitry Andric     return "Bias";
447*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::Bias)) {
448*81ad6265SDimitry Andric     nameString += sep + "Bias";
449*81ad6265SDimitry Andric     sep = "|";
450*81ad6265SDimitry Andric   }
451*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::Lod))
452*81ad6265SDimitry Andric     return "Lod";
453*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::Lod)) {
454*81ad6265SDimitry Andric     nameString += sep + "Lod";
455*81ad6265SDimitry Andric     sep = "|";
456*81ad6265SDimitry Andric   }
457*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::Grad))
458*81ad6265SDimitry Andric     return "Grad";
459*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::Grad)) {
460*81ad6265SDimitry Andric     nameString += sep + "Grad";
461*81ad6265SDimitry Andric     sep = "|";
462*81ad6265SDimitry Andric   }
463*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::ConstOffset))
464*81ad6265SDimitry Andric     return "ConstOffset";
465*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::ConstOffset)) {
466*81ad6265SDimitry Andric     nameString += sep + "ConstOffset";
467*81ad6265SDimitry Andric     sep = "|";
468*81ad6265SDimitry Andric   }
469*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::Offset))
470*81ad6265SDimitry Andric     return "Offset";
471*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::Offset)) {
472*81ad6265SDimitry Andric     nameString += sep + "Offset";
473*81ad6265SDimitry Andric     sep = "|";
474*81ad6265SDimitry Andric   }
475*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::ConstOffsets))
476*81ad6265SDimitry Andric     return "ConstOffsets";
477*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::ConstOffsets)) {
478*81ad6265SDimitry Andric     nameString += sep + "ConstOffsets";
479*81ad6265SDimitry Andric     sep = "|";
480*81ad6265SDimitry Andric   }
481*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::Sample))
482*81ad6265SDimitry Andric     return "Sample";
483*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::Sample)) {
484*81ad6265SDimitry Andric     nameString += sep + "Sample";
485*81ad6265SDimitry Andric     sep = "|";
486*81ad6265SDimitry Andric   }
487*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::MinLod))
488*81ad6265SDimitry Andric     return "MinLod";
489*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::MinLod)) {
490*81ad6265SDimitry Andric     nameString += sep + "MinLod";
491*81ad6265SDimitry Andric     sep = "|";
492*81ad6265SDimitry Andric   }
493*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::MakeTexelAvailableKHR))
494*81ad6265SDimitry Andric     return "MakeTexelAvailableKHR";
495*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::MakeTexelAvailableKHR)) {
496*81ad6265SDimitry Andric     nameString += sep + "MakeTexelAvailableKHR";
497*81ad6265SDimitry Andric     sep = "|";
498*81ad6265SDimitry Andric   }
499*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::MakeTexelVisibleKHR))
500*81ad6265SDimitry Andric     return "MakeTexelVisibleKHR";
501*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::MakeTexelVisibleKHR)) {
502*81ad6265SDimitry Andric     nameString += sep + "MakeTexelVisibleKHR";
503*81ad6265SDimitry Andric     sep = "|";
504*81ad6265SDimitry Andric   }
505*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::NonPrivateTexelKHR))
506*81ad6265SDimitry Andric     return "NonPrivateTexelKHR";
507*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::NonPrivateTexelKHR)) {
508*81ad6265SDimitry Andric     nameString += sep + "NonPrivateTexelKHR";
509*81ad6265SDimitry Andric     sep = "|";
510*81ad6265SDimitry Andric   }
511*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::VolatileTexelKHR))
512*81ad6265SDimitry Andric     return "VolatileTexelKHR";
513*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::VolatileTexelKHR)) {
514*81ad6265SDimitry Andric     nameString += sep + "VolatileTexelKHR";
515*81ad6265SDimitry Andric     sep = "|";
516*81ad6265SDimitry Andric   }
517*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::SignExtend))
518*81ad6265SDimitry Andric     return "SignExtend";
519*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::SignExtend)) {
520*81ad6265SDimitry Andric     nameString += sep + "SignExtend";
521*81ad6265SDimitry Andric     sep = "|";
522*81ad6265SDimitry Andric   }
523*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(ImageOperand::ZeroExtend))
524*81ad6265SDimitry Andric     return "ZeroExtend";
525*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(ImageOperand::ZeroExtend)) {
526*81ad6265SDimitry Andric     nameString += sep + "ZeroExtend";
527*81ad6265SDimitry Andric     sep = "|";
528*81ad6265SDimitry Andric   };
529*81ad6265SDimitry Andric   return nameString;
530*81ad6265SDimitry Andric }
531*81ad6265SDimitry Andric 
532*81ad6265SDimitry Andric std::string getFPFastMathModeName(uint32_t e) {
533*81ad6265SDimitry Andric   std::string nameString = "";
534*81ad6265SDimitry Andric   std::string sep = "";
535*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::None))
536*81ad6265SDimitry Andric     return "None";
537*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::NotNaN))
538*81ad6265SDimitry Andric     return "NotNaN";
539*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FPFastMathMode::NotNaN)) {
540*81ad6265SDimitry Andric     nameString += sep + "NotNaN";
541*81ad6265SDimitry Andric     sep = "|";
542*81ad6265SDimitry Andric   }
543*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::NotInf))
544*81ad6265SDimitry Andric     return "NotInf";
545*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FPFastMathMode::NotInf)) {
546*81ad6265SDimitry Andric     nameString += sep + "NotInf";
547*81ad6265SDimitry Andric     sep = "|";
548*81ad6265SDimitry Andric   }
549*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::NSZ))
550*81ad6265SDimitry Andric     return "NSZ";
551*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FPFastMathMode::NSZ)) {
552*81ad6265SDimitry Andric     nameString += sep + "NSZ";
553*81ad6265SDimitry Andric     sep = "|";
554*81ad6265SDimitry Andric   }
555*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::AllowRecip))
556*81ad6265SDimitry Andric     return "AllowRecip";
557*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FPFastMathMode::AllowRecip)) {
558*81ad6265SDimitry Andric     nameString += sep + "AllowRecip";
559*81ad6265SDimitry Andric     sep = "|";
560*81ad6265SDimitry Andric   }
561*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FPFastMathMode::Fast))
562*81ad6265SDimitry Andric     return "Fast";
563*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FPFastMathMode::Fast)) {
564*81ad6265SDimitry Andric     nameString += sep + "Fast";
565*81ad6265SDimitry Andric     sep = "|";
566*81ad6265SDimitry Andric   };
567*81ad6265SDimitry Andric   return nameString;
568*81ad6265SDimitry Andric }
569*81ad6265SDimitry Andric 
570*81ad6265SDimitry Andric StringRef getFPRoundingModeName(FPRoundingMode e) {
571*81ad6265SDimitry Andric   switch (e) {
572*81ad6265SDimitry Andric     CASE(FPRoundingMode, RTE)
573*81ad6265SDimitry Andric     CASE(FPRoundingMode, RTZ)
574*81ad6265SDimitry Andric     CASE(FPRoundingMode, RTP)
575*81ad6265SDimitry Andric     CASE(FPRoundingMode, RTN)
576*81ad6265SDimitry Andric     break;
577*81ad6265SDimitry Andric   }
578*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
579*81ad6265SDimitry Andric }
580*81ad6265SDimitry Andric 
581*81ad6265SDimitry Andric StringRef getLinkageTypeName(LinkageType e) {
582*81ad6265SDimitry Andric   switch (e) {
583*81ad6265SDimitry Andric     CASE(LinkageType, Export)
584*81ad6265SDimitry Andric     CASE(LinkageType, Import)
585*81ad6265SDimitry Andric     break;
586*81ad6265SDimitry Andric   }
587*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
588*81ad6265SDimitry Andric }
589*81ad6265SDimitry Andric 
590*81ad6265SDimitry Andric StringRef getAccessQualifierName(AccessQualifier e) {
591*81ad6265SDimitry Andric   switch (e) {
592*81ad6265SDimitry Andric     CASE(AccessQualifier, ReadOnly)
593*81ad6265SDimitry Andric     CASE(AccessQualifier, WriteOnly)
594*81ad6265SDimitry Andric     CASE(AccessQualifier, ReadWrite)
595*81ad6265SDimitry Andric     break;
596*81ad6265SDimitry Andric   }
597*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
598*81ad6265SDimitry Andric }
599*81ad6265SDimitry Andric 
600*81ad6265SDimitry Andric StringRef getFunctionParameterAttributeName(FunctionParameterAttribute e) {
601*81ad6265SDimitry Andric   switch (e) {
602*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, Zext)
603*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, Sext)
604*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, ByVal)
605*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, Sret)
606*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, NoAlias)
607*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, NoCapture)
608*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, NoWrite)
609*81ad6265SDimitry Andric     CASE(FunctionParameterAttribute, NoReadWrite)
610*81ad6265SDimitry Andric     break;
611*81ad6265SDimitry Andric   }
612*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
613*81ad6265SDimitry Andric }
614*81ad6265SDimitry Andric 
615*81ad6265SDimitry Andric StringRef getDecorationName(Decoration e) {
616*81ad6265SDimitry Andric   switch (e) {
617*81ad6265SDimitry Andric     CASE(Decoration, RelaxedPrecision)
618*81ad6265SDimitry Andric     CASE(Decoration, SpecId)
619*81ad6265SDimitry Andric     CASE(Decoration, Block)
620*81ad6265SDimitry Andric     CASE(Decoration, BufferBlock)
621*81ad6265SDimitry Andric     CASE(Decoration, RowMajor)
622*81ad6265SDimitry Andric     CASE(Decoration, ColMajor)
623*81ad6265SDimitry Andric     CASE(Decoration, ArrayStride)
624*81ad6265SDimitry Andric     CASE(Decoration, MatrixStride)
625*81ad6265SDimitry Andric     CASE(Decoration, GLSLShared)
626*81ad6265SDimitry Andric     CASE(Decoration, GLSLPacked)
627*81ad6265SDimitry Andric     CASE(Decoration, CPacked)
628*81ad6265SDimitry Andric     CASE(Decoration, BuiltIn)
629*81ad6265SDimitry Andric     CASE(Decoration, NoPerspective)
630*81ad6265SDimitry Andric     CASE(Decoration, Flat)
631*81ad6265SDimitry Andric     CASE(Decoration, Patch)
632*81ad6265SDimitry Andric     CASE(Decoration, Centroid)
633*81ad6265SDimitry Andric     CASE(Decoration, Sample)
634*81ad6265SDimitry Andric     CASE(Decoration, Invariant)
635*81ad6265SDimitry Andric     CASE(Decoration, Restrict)
636*81ad6265SDimitry Andric     CASE(Decoration, Aliased)
637*81ad6265SDimitry Andric     CASE(Decoration, Volatile)
638*81ad6265SDimitry Andric     CASE(Decoration, Constant)
639*81ad6265SDimitry Andric     CASE(Decoration, Coherent)
640*81ad6265SDimitry Andric     CASE(Decoration, NonWritable)
641*81ad6265SDimitry Andric     CASE(Decoration, NonReadable)
642*81ad6265SDimitry Andric     CASE(Decoration, Uniform)
643*81ad6265SDimitry Andric     CASE(Decoration, UniformId)
644*81ad6265SDimitry Andric     CASE(Decoration, SaturatedConversion)
645*81ad6265SDimitry Andric     CASE(Decoration, Stream)
646*81ad6265SDimitry Andric     CASE(Decoration, Location)
647*81ad6265SDimitry Andric     CASE(Decoration, Component)
648*81ad6265SDimitry Andric     CASE(Decoration, Index)
649*81ad6265SDimitry Andric     CASE(Decoration, Binding)
650*81ad6265SDimitry Andric     CASE(Decoration, DescriptorSet)
651*81ad6265SDimitry Andric     CASE(Decoration, Offset)
652*81ad6265SDimitry Andric     CASE(Decoration, XfbBuffer)
653*81ad6265SDimitry Andric     CASE(Decoration, XfbStride)
654*81ad6265SDimitry Andric     CASE(Decoration, FuncParamAttr)
655*81ad6265SDimitry Andric     CASE(Decoration, FPRoundingMode)
656*81ad6265SDimitry Andric     CASE(Decoration, FPFastMathMode)
657*81ad6265SDimitry Andric     CASE(Decoration, LinkageAttributes)
658*81ad6265SDimitry Andric     CASE(Decoration, NoContraction)
659*81ad6265SDimitry Andric     CASE(Decoration, InputAttachmentIndex)
660*81ad6265SDimitry Andric     CASE(Decoration, Alignment)
661*81ad6265SDimitry Andric     CASE(Decoration, MaxByteOffset)
662*81ad6265SDimitry Andric     CASE(Decoration, AlignmentId)
663*81ad6265SDimitry Andric     CASE(Decoration, MaxByteOffsetId)
664*81ad6265SDimitry Andric     CASE(Decoration, NoSignedWrap)
665*81ad6265SDimitry Andric     CASE(Decoration, NoUnsignedWrap)
666*81ad6265SDimitry Andric     CASE(Decoration, ExplicitInterpAMD)
667*81ad6265SDimitry Andric     CASE(Decoration, OverrideCoverageNV)
668*81ad6265SDimitry Andric     CASE(Decoration, PassthroughNV)
669*81ad6265SDimitry Andric     CASE(Decoration, ViewportRelativeNV)
670*81ad6265SDimitry Andric     CASE(Decoration, SecondaryViewportRelativeNV)
671*81ad6265SDimitry Andric     CASE(Decoration, PerPrimitiveNV)
672*81ad6265SDimitry Andric     CASE(Decoration, PerViewNV)
673*81ad6265SDimitry Andric     CASE(Decoration, PerVertexNV)
674*81ad6265SDimitry Andric     CASE(Decoration, NonUniformEXT)
675*81ad6265SDimitry Andric     CASE(Decoration, CountBuffer)
676*81ad6265SDimitry Andric     CASE(Decoration, UserSemantic)
677*81ad6265SDimitry Andric     CASE(Decoration, RestrictPointerEXT)
678*81ad6265SDimitry Andric     CASE(Decoration, AliasedPointerEXT)
679*81ad6265SDimitry Andric     break;
680*81ad6265SDimitry Andric   }
681*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
682*81ad6265SDimitry Andric }
683*81ad6265SDimitry Andric 
684*81ad6265SDimitry Andric StringRef getBuiltInName(BuiltIn e) {
685*81ad6265SDimitry Andric   switch (e) {
686*81ad6265SDimitry Andric     CASE(BuiltIn, Position)
687*81ad6265SDimitry Andric     CASE(BuiltIn, PointSize)
688*81ad6265SDimitry Andric     CASE(BuiltIn, ClipDistance)
689*81ad6265SDimitry Andric     CASE(BuiltIn, CullDistance)
690*81ad6265SDimitry Andric     CASE(BuiltIn, VertexId)
691*81ad6265SDimitry Andric     CASE(BuiltIn, InstanceId)
692*81ad6265SDimitry Andric     CASE(BuiltIn, PrimitiveId)
693*81ad6265SDimitry Andric     CASE(BuiltIn, InvocationId)
694*81ad6265SDimitry Andric     CASE(BuiltIn, Layer)
695*81ad6265SDimitry Andric     CASE(BuiltIn, ViewportIndex)
696*81ad6265SDimitry Andric     CASE(BuiltIn, TessLevelOuter)
697*81ad6265SDimitry Andric     CASE(BuiltIn, TessLevelInner)
698*81ad6265SDimitry Andric     CASE(BuiltIn, TessCoord)
699*81ad6265SDimitry Andric     CASE(BuiltIn, PatchVertices)
700*81ad6265SDimitry Andric     CASE(BuiltIn, FragCoord)
701*81ad6265SDimitry Andric     CASE(BuiltIn, PointCoord)
702*81ad6265SDimitry Andric     CASE(BuiltIn, FrontFacing)
703*81ad6265SDimitry Andric     CASE(BuiltIn, SampleId)
704*81ad6265SDimitry Andric     CASE(BuiltIn, SamplePosition)
705*81ad6265SDimitry Andric     CASE(BuiltIn, SampleMask)
706*81ad6265SDimitry Andric     CASE(BuiltIn, FragDepth)
707*81ad6265SDimitry Andric     CASE(BuiltIn, HelperInvocation)
708*81ad6265SDimitry Andric     CASE(BuiltIn, NumWorkgroups)
709*81ad6265SDimitry Andric     CASE(BuiltIn, WorkgroupSize)
710*81ad6265SDimitry Andric     CASE(BuiltIn, WorkgroupId)
711*81ad6265SDimitry Andric     CASE(BuiltIn, LocalInvocationId)
712*81ad6265SDimitry Andric     CASE(BuiltIn, GlobalInvocationId)
713*81ad6265SDimitry Andric     CASE(BuiltIn, LocalInvocationIndex)
714*81ad6265SDimitry Andric     CASE(BuiltIn, WorkDim)
715*81ad6265SDimitry Andric     CASE(BuiltIn, GlobalSize)
716*81ad6265SDimitry Andric     CASE(BuiltIn, EnqueuedWorkgroupSize)
717*81ad6265SDimitry Andric     CASE(BuiltIn, GlobalOffset)
718*81ad6265SDimitry Andric     CASE(BuiltIn, GlobalLinearId)
719*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupSize)
720*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupMaxSize)
721*81ad6265SDimitry Andric     CASE(BuiltIn, NumSubgroups)
722*81ad6265SDimitry Andric     CASE(BuiltIn, NumEnqueuedSubgroups)
723*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupId)
724*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupLocalInvocationId)
725*81ad6265SDimitry Andric     CASE(BuiltIn, VertexIndex)
726*81ad6265SDimitry Andric     CASE(BuiltIn, InstanceIndex)
727*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupEqMask)
728*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupGeMask)
729*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupGtMask)
730*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupLeMask)
731*81ad6265SDimitry Andric     CASE(BuiltIn, SubgroupLtMask)
732*81ad6265SDimitry Andric     CASE(BuiltIn, BaseVertex)
733*81ad6265SDimitry Andric     CASE(BuiltIn, BaseInstance)
734*81ad6265SDimitry Andric     CASE(BuiltIn, DrawIndex)
735*81ad6265SDimitry Andric     CASE(BuiltIn, DeviceIndex)
736*81ad6265SDimitry Andric     CASE(BuiltIn, ViewIndex)
737*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordNoPerspAMD)
738*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordNoPerspCentroidAMD)
739*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordNoPerspSampleAMD)
740*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordSmoothAMD)
741*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordSmoothCentroid)
742*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordSmoothSample)
743*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordPullModel)
744*81ad6265SDimitry Andric     CASE(BuiltIn, FragStencilRefEXT)
745*81ad6265SDimitry Andric     CASE(BuiltIn, ViewportMaskNV)
746*81ad6265SDimitry Andric     CASE(BuiltIn, SecondaryPositionNV)
747*81ad6265SDimitry Andric     CASE(BuiltIn, SecondaryViewportMaskNV)
748*81ad6265SDimitry Andric     CASE(BuiltIn, PositionPerViewNV)
749*81ad6265SDimitry Andric     CASE(BuiltIn, ViewportMaskPerViewNV)
750*81ad6265SDimitry Andric     CASE(BuiltIn, FullyCoveredEXT)
751*81ad6265SDimitry Andric     CASE(BuiltIn, TaskCountNV)
752*81ad6265SDimitry Andric     CASE(BuiltIn, PrimitiveCountNV)
753*81ad6265SDimitry Andric     CASE(BuiltIn, PrimitiveIndicesNV)
754*81ad6265SDimitry Andric     CASE(BuiltIn, ClipDistancePerViewNV)
755*81ad6265SDimitry Andric     CASE(BuiltIn, CullDistancePerViewNV)
756*81ad6265SDimitry Andric     CASE(BuiltIn, LayerPerViewNV)
757*81ad6265SDimitry Andric     CASE(BuiltIn, MeshViewCountNV)
758*81ad6265SDimitry Andric     CASE(BuiltIn, MeshViewIndices)
759*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordNV)
760*81ad6265SDimitry Andric     CASE(BuiltIn, BaryCoordNoPerspNV)
761*81ad6265SDimitry Andric     CASE(BuiltIn, FragSizeEXT)
762*81ad6265SDimitry Andric     CASE(BuiltIn, FragInvocationCountEXT)
763*81ad6265SDimitry Andric     CASE(BuiltIn, LaunchIdNV)
764*81ad6265SDimitry Andric     CASE(BuiltIn, LaunchSizeNV)
765*81ad6265SDimitry Andric     CASE(BuiltIn, WorldRayOriginNV)
766*81ad6265SDimitry Andric     CASE(BuiltIn, WorldRayDirectionNV)
767*81ad6265SDimitry Andric     CASE(BuiltIn, ObjectRayOriginNV)
768*81ad6265SDimitry Andric     CASE(BuiltIn, ObjectRayDirectionNV)
769*81ad6265SDimitry Andric     CASE(BuiltIn, RayTminNV)
770*81ad6265SDimitry Andric     CASE(BuiltIn, RayTmaxNV)
771*81ad6265SDimitry Andric     CASE(BuiltIn, InstanceCustomIndexNV)
772*81ad6265SDimitry Andric     CASE(BuiltIn, ObjectToWorldNV)
773*81ad6265SDimitry Andric     CASE(BuiltIn, WorldToObjectNV)
774*81ad6265SDimitry Andric     CASE(BuiltIn, HitTNV)
775*81ad6265SDimitry Andric     CASE(BuiltIn, HitKindNV)
776*81ad6265SDimitry Andric     CASE(BuiltIn, IncomingRayFlagsNV)
777*81ad6265SDimitry Andric     break;
778*81ad6265SDimitry Andric   }
779*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
780*81ad6265SDimitry Andric }
781*81ad6265SDimitry Andric 
782*81ad6265SDimitry Andric std::string getSelectionControlName(uint32_t e) {
783*81ad6265SDimitry Andric   std::string nameString = "";
784*81ad6265SDimitry Andric   std::string sep = "";
785*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(SelectionControl::None))
786*81ad6265SDimitry Andric     return "None";
787*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(SelectionControl::Flatten))
788*81ad6265SDimitry Andric     return "Flatten";
789*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(SelectionControl::Flatten)) {
790*81ad6265SDimitry Andric     nameString += sep + "Flatten";
791*81ad6265SDimitry Andric     sep = "|";
792*81ad6265SDimitry Andric   }
793*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(SelectionControl::DontFlatten))
794*81ad6265SDimitry Andric     return "DontFlatten";
795*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(SelectionControl::DontFlatten)) {
796*81ad6265SDimitry Andric     nameString += sep + "DontFlatten";
797*81ad6265SDimitry Andric     sep = "|";
798*81ad6265SDimitry Andric   };
799*81ad6265SDimitry Andric   return nameString;
800*81ad6265SDimitry Andric }
801*81ad6265SDimitry Andric 
802*81ad6265SDimitry Andric std::string getLoopControlName(uint32_t e) {
803*81ad6265SDimitry Andric   std::string nameString = "";
804*81ad6265SDimitry Andric   std::string sep = "";
805*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::None))
806*81ad6265SDimitry Andric     return "None";
807*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::Unroll))
808*81ad6265SDimitry Andric     return "Unroll";
809*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::Unroll)) {
810*81ad6265SDimitry Andric     nameString += sep + "Unroll";
811*81ad6265SDimitry Andric     sep = "|";
812*81ad6265SDimitry Andric   }
813*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::DontUnroll))
814*81ad6265SDimitry Andric     return "DontUnroll";
815*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::DontUnroll)) {
816*81ad6265SDimitry Andric     nameString += sep + "DontUnroll";
817*81ad6265SDimitry Andric     sep = "|";
818*81ad6265SDimitry Andric   }
819*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::DependencyInfinite))
820*81ad6265SDimitry Andric     return "DependencyInfinite";
821*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::DependencyInfinite)) {
822*81ad6265SDimitry Andric     nameString += sep + "DependencyInfinite";
823*81ad6265SDimitry Andric     sep = "|";
824*81ad6265SDimitry Andric   }
825*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::DependencyLength))
826*81ad6265SDimitry Andric     return "DependencyLength";
827*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::DependencyLength)) {
828*81ad6265SDimitry Andric     nameString += sep + "DependencyLength";
829*81ad6265SDimitry Andric     sep = "|";
830*81ad6265SDimitry Andric   }
831*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::MinIterations))
832*81ad6265SDimitry Andric     return "MinIterations";
833*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::MinIterations)) {
834*81ad6265SDimitry Andric     nameString += sep + "MinIterations";
835*81ad6265SDimitry Andric     sep = "|";
836*81ad6265SDimitry Andric   }
837*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::MaxIterations))
838*81ad6265SDimitry Andric     return "MaxIterations";
839*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::MaxIterations)) {
840*81ad6265SDimitry Andric     nameString += sep + "MaxIterations";
841*81ad6265SDimitry Andric     sep = "|";
842*81ad6265SDimitry Andric   }
843*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::IterationMultiple))
844*81ad6265SDimitry Andric     return "IterationMultiple";
845*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::IterationMultiple)) {
846*81ad6265SDimitry Andric     nameString += sep + "IterationMultiple";
847*81ad6265SDimitry Andric     sep = "|";
848*81ad6265SDimitry Andric   }
849*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::PeelCount))
850*81ad6265SDimitry Andric     return "PeelCount";
851*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::PeelCount)) {
852*81ad6265SDimitry Andric     nameString += sep + "PeelCount";
853*81ad6265SDimitry Andric     sep = "|";
854*81ad6265SDimitry Andric   }
855*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(LoopControl::PartialCount))
856*81ad6265SDimitry Andric     return "PartialCount";
857*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(LoopControl::PartialCount)) {
858*81ad6265SDimitry Andric     nameString += sep + "PartialCount";
859*81ad6265SDimitry Andric     sep = "|";
860*81ad6265SDimitry Andric   };
861*81ad6265SDimitry Andric   return nameString;
862*81ad6265SDimitry Andric }
863*81ad6265SDimitry Andric 
864*81ad6265SDimitry Andric std::string getFunctionControlName(uint32_t e) {
865*81ad6265SDimitry Andric   std::string nameString = "";
866*81ad6265SDimitry Andric   std::string sep = "";
867*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FunctionControl::None))
868*81ad6265SDimitry Andric     return "None";
869*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FunctionControl::Inline))
870*81ad6265SDimitry Andric     return "Inline";
871*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FunctionControl::Inline)) {
872*81ad6265SDimitry Andric     nameString += sep + "Inline";
873*81ad6265SDimitry Andric     sep = "|";
874*81ad6265SDimitry Andric   }
875*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FunctionControl::DontInline))
876*81ad6265SDimitry Andric     return "DontInline";
877*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FunctionControl::DontInline)) {
878*81ad6265SDimitry Andric     nameString += sep + "DontInline";
879*81ad6265SDimitry Andric     sep = "|";
880*81ad6265SDimitry Andric   }
881*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FunctionControl::Pure))
882*81ad6265SDimitry Andric     return "Pure";
883*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FunctionControl::Pure)) {
884*81ad6265SDimitry Andric     nameString += sep + "Pure";
885*81ad6265SDimitry Andric     sep = "|";
886*81ad6265SDimitry Andric   }
887*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(FunctionControl::Const))
888*81ad6265SDimitry Andric     return "Const";
889*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(FunctionControl::Const)) {
890*81ad6265SDimitry Andric     nameString += sep + "Const";
891*81ad6265SDimitry Andric     sep = "|";
892*81ad6265SDimitry Andric   };
893*81ad6265SDimitry Andric   return nameString;
894*81ad6265SDimitry Andric }
895*81ad6265SDimitry Andric 
896*81ad6265SDimitry Andric std::string getMemorySemanticsName(uint32_t e) {
897*81ad6265SDimitry Andric   std::string nameString = "";
898*81ad6265SDimitry Andric   std::string sep = "";
899*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::None))
900*81ad6265SDimitry Andric     return "None";
901*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::Acquire))
902*81ad6265SDimitry Andric     return "Acquire";
903*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::Acquire)) {
904*81ad6265SDimitry Andric     nameString += sep + "Acquire";
905*81ad6265SDimitry Andric     sep = "|";
906*81ad6265SDimitry Andric   }
907*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::Release))
908*81ad6265SDimitry Andric     return "Release";
909*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::Release)) {
910*81ad6265SDimitry Andric     nameString += sep + "Release";
911*81ad6265SDimitry Andric     sep = "|";
912*81ad6265SDimitry Andric   }
913*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::AcquireRelease))
914*81ad6265SDimitry Andric     return "AcquireRelease";
915*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::AcquireRelease)) {
916*81ad6265SDimitry Andric     nameString += sep + "AcquireRelease";
917*81ad6265SDimitry Andric     sep = "|";
918*81ad6265SDimitry Andric   }
919*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::SequentiallyConsistent))
920*81ad6265SDimitry Andric     return "SequentiallyConsistent";
921*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::SequentiallyConsistent)) {
922*81ad6265SDimitry Andric     nameString += sep + "SequentiallyConsistent";
923*81ad6265SDimitry Andric     sep = "|";
924*81ad6265SDimitry Andric   }
925*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::UniformMemory))
926*81ad6265SDimitry Andric     return "UniformMemory";
927*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::UniformMemory)) {
928*81ad6265SDimitry Andric     nameString += sep + "UniformMemory";
929*81ad6265SDimitry Andric     sep = "|";
930*81ad6265SDimitry Andric   }
931*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::SubgroupMemory))
932*81ad6265SDimitry Andric     return "SubgroupMemory";
933*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::SubgroupMemory)) {
934*81ad6265SDimitry Andric     nameString += sep + "SubgroupMemory";
935*81ad6265SDimitry Andric     sep = "|";
936*81ad6265SDimitry Andric   }
937*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::WorkgroupMemory))
938*81ad6265SDimitry Andric     return "WorkgroupMemory";
939*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::WorkgroupMemory)) {
940*81ad6265SDimitry Andric     nameString += sep + "WorkgroupMemory";
941*81ad6265SDimitry Andric     sep = "|";
942*81ad6265SDimitry Andric   }
943*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::CrossWorkgroupMemory))
944*81ad6265SDimitry Andric     return "CrossWorkgroupMemory";
945*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::CrossWorkgroupMemory)) {
946*81ad6265SDimitry Andric     nameString += sep + "CrossWorkgroupMemory";
947*81ad6265SDimitry Andric     sep = "|";
948*81ad6265SDimitry Andric   }
949*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::AtomicCounterMemory))
950*81ad6265SDimitry Andric     return "AtomicCounterMemory";
951*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::AtomicCounterMemory)) {
952*81ad6265SDimitry Andric     nameString += sep + "AtomicCounterMemory";
953*81ad6265SDimitry Andric     sep = "|";
954*81ad6265SDimitry Andric   }
955*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::ImageMemory))
956*81ad6265SDimitry Andric     return "ImageMemory";
957*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::ImageMemory)) {
958*81ad6265SDimitry Andric     nameString += sep + "ImageMemory";
959*81ad6265SDimitry Andric     sep = "|";
960*81ad6265SDimitry Andric   }
961*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::OutputMemoryKHR))
962*81ad6265SDimitry Andric     return "OutputMemoryKHR";
963*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::OutputMemoryKHR)) {
964*81ad6265SDimitry Andric     nameString += sep + "OutputMemoryKHR";
965*81ad6265SDimitry Andric     sep = "|";
966*81ad6265SDimitry Andric   }
967*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::MakeAvailableKHR))
968*81ad6265SDimitry Andric     return "MakeAvailableKHR";
969*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::MakeAvailableKHR)) {
970*81ad6265SDimitry Andric     nameString += sep + "MakeAvailableKHR";
971*81ad6265SDimitry Andric     sep = "|";
972*81ad6265SDimitry Andric   }
973*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemorySemantics::MakeVisibleKHR))
974*81ad6265SDimitry Andric     return "MakeVisibleKHR";
975*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemorySemantics::MakeVisibleKHR)) {
976*81ad6265SDimitry Andric     nameString += sep + "MakeVisibleKHR";
977*81ad6265SDimitry Andric     sep = "|";
978*81ad6265SDimitry Andric   };
979*81ad6265SDimitry Andric   return nameString;
980*81ad6265SDimitry Andric }
981*81ad6265SDimitry Andric 
982*81ad6265SDimitry Andric std::string getMemoryOperandName(uint32_t e) {
983*81ad6265SDimitry Andric   std::string nameString = "";
984*81ad6265SDimitry Andric   std::string sep = "";
985*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::None))
986*81ad6265SDimitry Andric     return "None";
987*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::Volatile))
988*81ad6265SDimitry Andric     return "Volatile";
989*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::Volatile)) {
990*81ad6265SDimitry Andric     nameString += sep + "Volatile";
991*81ad6265SDimitry Andric     sep = "|";
992*81ad6265SDimitry Andric   }
993*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::Aligned))
994*81ad6265SDimitry Andric     return "Aligned";
995*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::Aligned)) {
996*81ad6265SDimitry Andric     nameString += sep + "Aligned";
997*81ad6265SDimitry Andric     sep = "|";
998*81ad6265SDimitry Andric   }
999*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::Nontemporal))
1000*81ad6265SDimitry Andric     return "Nontemporal";
1001*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::Nontemporal)) {
1002*81ad6265SDimitry Andric     nameString += sep + "Nontemporal";
1003*81ad6265SDimitry Andric     sep = "|";
1004*81ad6265SDimitry Andric   }
1005*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::MakePointerAvailableKHR))
1006*81ad6265SDimitry Andric     return "MakePointerAvailableKHR";
1007*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::MakePointerAvailableKHR)) {
1008*81ad6265SDimitry Andric     nameString += sep + "MakePointerAvailableKHR";
1009*81ad6265SDimitry Andric     sep = "|";
1010*81ad6265SDimitry Andric   }
1011*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::MakePointerVisibleKHR))
1012*81ad6265SDimitry Andric     return "MakePointerVisibleKHR";
1013*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::MakePointerVisibleKHR)) {
1014*81ad6265SDimitry Andric     nameString += sep + "MakePointerVisibleKHR";
1015*81ad6265SDimitry Andric     sep = "|";
1016*81ad6265SDimitry Andric   }
1017*81ad6265SDimitry Andric   if (e == static_cast<uint32_t>(MemoryOperand::NonPrivatePointerKHR))
1018*81ad6265SDimitry Andric     return "NonPrivatePointerKHR";
1019*81ad6265SDimitry Andric   if (e & static_cast<uint32_t>(MemoryOperand::NonPrivatePointerKHR)) {
1020*81ad6265SDimitry Andric     nameString += sep + "NonPrivatePointerKHR";
1021*81ad6265SDimitry Andric     sep = "|";
1022*81ad6265SDimitry Andric   };
1023*81ad6265SDimitry Andric   return nameString;
1024*81ad6265SDimitry Andric }
1025*81ad6265SDimitry Andric 
1026*81ad6265SDimitry Andric StringRef getScopeName(Scope e) {
1027*81ad6265SDimitry Andric   switch (e) {
1028*81ad6265SDimitry Andric     CASE(Scope, CrossDevice)
1029*81ad6265SDimitry Andric     CASE(Scope, Device)
1030*81ad6265SDimitry Andric     CASE(Scope, Workgroup)
1031*81ad6265SDimitry Andric     CASE(Scope, Subgroup)
1032*81ad6265SDimitry Andric     CASE(Scope, Invocation)
1033*81ad6265SDimitry Andric     CASE(Scope, QueueFamilyKHR)
1034*81ad6265SDimitry Andric     break;
1035*81ad6265SDimitry Andric   }
1036*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
1037*81ad6265SDimitry Andric }
1038*81ad6265SDimitry Andric 
1039*81ad6265SDimitry Andric StringRef getGroupOperationName(GroupOperation e) {
1040*81ad6265SDimitry Andric   switch (e) {
1041*81ad6265SDimitry Andric     CASE(GroupOperation, Reduce)
1042*81ad6265SDimitry Andric     CASE(GroupOperation, InclusiveScan)
1043*81ad6265SDimitry Andric     CASE(GroupOperation, ExclusiveScan)
1044*81ad6265SDimitry Andric     CASE(GroupOperation, ClusteredReduce)
1045*81ad6265SDimitry Andric     CASE(GroupOperation, PartitionedReduceNV)
1046*81ad6265SDimitry Andric     CASE(GroupOperation, PartitionedInclusiveScanNV)
1047*81ad6265SDimitry Andric     CASE(GroupOperation, PartitionedExclusiveScanNV)
1048*81ad6265SDimitry Andric     break;
1049*81ad6265SDimitry Andric   }
1050*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
1051*81ad6265SDimitry Andric }
1052*81ad6265SDimitry Andric 
1053*81ad6265SDimitry Andric StringRef getKernelEnqueueFlagsName(KernelEnqueueFlags e) {
1054*81ad6265SDimitry Andric   switch (e) {
1055*81ad6265SDimitry Andric     CASE(KernelEnqueueFlags, NoWait)
1056*81ad6265SDimitry Andric     CASE(KernelEnqueueFlags, WaitKernel)
1057*81ad6265SDimitry Andric     CASE(KernelEnqueueFlags, WaitWorkGroup)
1058*81ad6265SDimitry Andric     break;
1059*81ad6265SDimitry Andric   }
1060*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
1061*81ad6265SDimitry Andric }
1062*81ad6265SDimitry Andric 
1063*81ad6265SDimitry Andric StringRef getKernelProfilingInfoName(KernelProfilingInfo e) {
1064*81ad6265SDimitry Andric   switch (e) {
1065*81ad6265SDimitry Andric     CASE(KernelProfilingInfo, None)
1066*81ad6265SDimitry Andric     CASE(KernelProfilingInfo, CmdExecTime)
1067*81ad6265SDimitry Andric     break;
1068*81ad6265SDimitry Andric   }
1069*81ad6265SDimitry Andric   llvm_unreachable("Unexpected operand");
1070*81ad6265SDimitry Andric }
1071*81ad6265SDimitry Andric } // namespace SPIRV
1072*81ad6265SDimitry Andric } // namespace llvm
1073