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