1*81ad6265SDimitry Andric //===-- SPIRVBaseInfo.h - 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 #ifndef LLVM_LIB_TARGET_SPIRV_MCTARGETDESC_SPIRVBASEINFO_H 17*81ad6265SDimitry Andric #define LLVM_LIB_TARGET_SPIRV_MCTARGETDESC_SPIRVBASEINFO_H 18*81ad6265SDimitry Andric 19*81ad6265SDimitry Andric #include "llvm/ADT/StringRef.h" 20*81ad6265SDimitry Andric #include <string> 21*81ad6265SDimitry Andric 22*81ad6265SDimitry Andric namespace llvm { 23*81ad6265SDimitry Andric namespace SPIRV { 24*81ad6265SDimitry Andric enum class Capability : uint32_t { 25*81ad6265SDimitry Andric Matrix = 0, 26*81ad6265SDimitry Andric Shader = 1, 27*81ad6265SDimitry Andric Geometry = 2, 28*81ad6265SDimitry Andric Tessellation = 3, 29*81ad6265SDimitry Andric Addresses = 4, 30*81ad6265SDimitry Andric Linkage = 5, 31*81ad6265SDimitry Andric Kernel = 6, 32*81ad6265SDimitry Andric Vector16 = 7, 33*81ad6265SDimitry Andric Float16Buffer = 8, 34*81ad6265SDimitry Andric Float16 = 9, 35*81ad6265SDimitry Andric Float64 = 10, 36*81ad6265SDimitry Andric Int64 = 11, 37*81ad6265SDimitry Andric Int64Atomics = 12, 38*81ad6265SDimitry Andric ImageBasic = 13, 39*81ad6265SDimitry Andric ImageReadWrite = 14, 40*81ad6265SDimitry Andric ImageMipmap = 15, 41*81ad6265SDimitry Andric Pipes = 17, 42*81ad6265SDimitry Andric Groups = 18, 43*81ad6265SDimitry Andric DeviceEnqueue = 19, 44*81ad6265SDimitry Andric LiteralSampler = 20, 45*81ad6265SDimitry Andric AtomicStorage = 21, 46*81ad6265SDimitry Andric Int16 = 22, 47*81ad6265SDimitry Andric TessellationPointSize = 23, 48*81ad6265SDimitry Andric GeometryPointSize = 24, 49*81ad6265SDimitry Andric ImageGatherExtended = 25, 50*81ad6265SDimitry Andric StorageImageMultisample = 27, 51*81ad6265SDimitry Andric UniformBufferArrayDynamicIndexing = 28, 52*81ad6265SDimitry Andric SampledImageArrayDymnamicIndexing = 29, 53*81ad6265SDimitry Andric ClipDistance = 32, 54*81ad6265SDimitry Andric CullDistance = 33, 55*81ad6265SDimitry Andric ImageCubeArray = 34, 56*81ad6265SDimitry Andric SampleRateShading = 35, 57*81ad6265SDimitry Andric ImageRect = 36, 58*81ad6265SDimitry Andric SampledRect = 37, 59*81ad6265SDimitry Andric GenericPointer = 38, 60*81ad6265SDimitry Andric Int8 = 39, 61*81ad6265SDimitry Andric InputAttachment = 40, 62*81ad6265SDimitry Andric SparseResidency = 41, 63*81ad6265SDimitry Andric MinLod = 42, 64*81ad6265SDimitry Andric Sampled1D = 43, 65*81ad6265SDimitry Andric Image1D = 44, 66*81ad6265SDimitry Andric SampledCubeArray = 45, 67*81ad6265SDimitry Andric SampledBuffer = 46, 68*81ad6265SDimitry Andric ImageBuffer = 47, 69*81ad6265SDimitry Andric ImageMSArray = 48, 70*81ad6265SDimitry Andric StorageImageExtendedFormats = 49, 71*81ad6265SDimitry Andric ImageQuery = 50, 72*81ad6265SDimitry Andric DerivativeControl = 51, 73*81ad6265SDimitry Andric InterpolationFunction = 52, 74*81ad6265SDimitry Andric TransformFeedback = 53, 75*81ad6265SDimitry Andric GeometryStreams = 54, 76*81ad6265SDimitry Andric StorageImageReadWithoutFormat = 55, 77*81ad6265SDimitry Andric StorageImageWriteWithoutFormat = 56, 78*81ad6265SDimitry Andric MultiViewport = 57, 79*81ad6265SDimitry Andric SubgroupDispatch = 58, 80*81ad6265SDimitry Andric NamedBarrier = 59, 81*81ad6265SDimitry Andric PipeStorage = 60, 82*81ad6265SDimitry Andric GroupNonUniform = 61, 83*81ad6265SDimitry Andric GroupNonUniformVote = 62, 84*81ad6265SDimitry Andric GroupNonUniformArithmetic = 63, 85*81ad6265SDimitry Andric GroupNonUniformBallot = 64, 86*81ad6265SDimitry Andric GroupNonUniformShuffle = 65, 87*81ad6265SDimitry Andric GroupNonUniformShuffleRelative = 66, 88*81ad6265SDimitry Andric GroupNonUniformClustered = 67, 89*81ad6265SDimitry Andric GroupNonUniformQuad = 68, 90*81ad6265SDimitry Andric SubgroupBallotKHR = 4423, 91*81ad6265SDimitry Andric DrawParameters = 4427, 92*81ad6265SDimitry Andric SubgroupVoteKHR = 4431, 93*81ad6265SDimitry Andric StorageBuffer16BitAccess = 4433, 94*81ad6265SDimitry Andric StorageUniform16 = 4434, 95*81ad6265SDimitry Andric StoragePushConstant16 = 4435, 96*81ad6265SDimitry Andric StorageInputOutput16 = 4436, 97*81ad6265SDimitry Andric DeviceGroup = 4437, 98*81ad6265SDimitry Andric MultiView = 4439, 99*81ad6265SDimitry Andric VariablePointersStorageBuffer = 4441, 100*81ad6265SDimitry Andric VariablePointers = 4442, 101*81ad6265SDimitry Andric AtomicStorageOps = 4445, 102*81ad6265SDimitry Andric SampleMaskPostDepthCoverage = 4447, 103*81ad6265SDimitry Andric StorageBuffer8BitAccess = 4448, 104*81ad6265SDimitry Andric UniformAndStorageBuffer8BitAccess = 4449, 105*81ad6265SDimitry Andric StoragePushConstant8 = 4450, 106*81ad6265SDimitry Andric DenormPreserve = 4464, 107*81ad6265SDimitry Andric DenormFlushToZero = 4465, 108*81ad6265SDimitry Andric SignedZeroInfNanPreserve = 4466, 109*81ad6265SDimitry Andric RoundingModeRTE = 4467, 110*81ad6265SDimitry Andric RoundingModeRTZ = 4468, 111*81ad6265SDimitry Andric Float16ImageAMD = 5008, 112*81ad6265SDimitry Andric ImageGatherBiasLodAMD = 5009, 113*81ad6265SDimitry Andric FragmentMaskAMD = 5010, 114*81ad6265SDimitry Andric StencilExportEXT = 5013, 115*81ad6265SDimitry Andric ImageReadWriteLodAMD = 5015, 116*81ad6265SDimitry Andric SampleMaskOverrideCoverageNV = 5249, 117*81ad6265SDimitry Andric GeometryShaderPassthroughNV = 5251, 118*81ad6265SDimitry Andric ShaderViewportIndexLayerEXT = 5254, 119*81ad6265SDimitry Andric ShaderViewportMaskNV = 5255, 120*81ad6265SDimitry Andric ShaderStereoViewNV = 5259, 121*81ad6265SDimitry Andric PerViewAttributesNV = 5260, 122*81ad6265SDimitry Andric FragmentFullyCoveredEXT = 5265, 123*81ad6265SDimitry Andric MeshShadingNV = 5266, 124*81ad6265SDimitry Andric ShaderNonUniformEXT = 5301, 125*81ad6265SDimitry Andric RuntimeDescriptorArrayEXT = 5302, 126*81ad6265SDimitry Andric InputAttachmentArrayDynamicIndexingEXT = 5303, 127*81ad6265SDimitry Andric UniformTexelBufferArrayDynamicIndexingEXT = 5304, 128*81ad6265SDimitry Andric StorageTexelBufferArrayDynamicIndexingEXT = 5305, 129*81ad6265SDimitry Andric UniformBufferArrayNonUniformIndexingEXT = 5306, 130*81ad6265SDimitry Andric SampledImageArrayNonUniformIndexingEXT = 5307, 131*81ad6265SDimitry Andric StorageBufferArrayNonUniformIndexingEXT = 5308, 132*81ad6265SDimitry Andric StorageImageArrayNonUniformIndexingEXT = 5309, 133*81ad6265SDimitry Andric InputAttachmentArrayNonUniformIndexingEXT = 5310, 134*81ad6265SDimitry Andric UniformTexelBufferArrayNonUniformIndexingEXT = 5311, 135*81ad6265SDimitry Andric StorageTexelBufferArrayNonUniformIndexingEXT = 5312, 136*81ad6265SDimitry Andric RayTracingNV = 5340, 137*81ad6265SDimitry Andric SubgroupShuffleINTEL = 5568, 138*81ad6265SDimitry Andric SubgroupBufferBlockIOINTEL = 5569, 139*81ad6265SDimitry Andric SubgroupImageBlockIOINTEL = 5570, 140*81ad6265SDimitry Andric SubgroupImageMediaBlockIOINTEL = 5579, 141*81ad6265SDimitry Andric SubgroupAvcMotionEstimationINTEL = 5696, 142*81ad6265SDimitry Andric SubgroupAvcMotionEstimationIntraINTEL = 5697, 143*81ad6265SDimitry Andric SubgroupAvcMotionEstimationChromaINTEL = 5698, 144*81ad6265SDimitry Andric GroupNonUniformPartitionedNV = 5297, 145*81ad6265SDimitry Andric VulkanMemoryModelKHR = 5345, 146*81ad6265SDimitry Andric VulkanMemoryModelDeviceScopeKHR = 5346, 147*81ad6265SDimitry Andric ImageFootprintNV = 5282, 148*81ad6265SDimitry Andric FragmentBarycentricNV = 5284, 149*81ad6265SDimitry Andric ComputeDerivativeGroupQuadsNV = 5288, 150*81ad6265SDimitry Andric ComputeDerivativeGroupLinearNV = 5350, 151*81ad6265SDimitry Andric FragmentDensityEXT = 5291, 152*81ad6265SDimitry Andric PhysicalStorageBufferAddressesEXT = 5347, 153*81ad6265SDimitry Andric CooperativeMatrixNV = 5357, 154*81ad6265SDimitry Andric }; 155*81ad6265SDimitry Andric StringRef getCapabilityName(Capability e); 156*81ad6265SDimitry Andric 157*81ad6265SDimitry Andric enum class SourceLanguage : uint32_t { 158*81ad6265SDimitry Andric Unknown = 0, 159*81ad6265SDimitry Andric ESSL = 1, 160*81ad6265SDimitry Andric GLSL = 2, 161*81ad6265SDimitry Andric OpenCL_C = 3, 162*81ad6265SDimitry Andric OpenCL_CPP = 4, 163*81ad6265SDimitry Andric HLSL = 5, 164*81ad6265SDimitry Andric }; 165*81ad6265SDimitry Andric StringRef getSourceLanguageName(SourceLanguage e); 166*81ad6265SDimitry Andric 167*81ad6265SDimitry Andric enum class AddressingModel : uint32_t { 168*81ad6265SDimitry Andric Logical = 0, 169*81ad6265SDimitry Andric Physical32 = 1, 170*81ad6265SDimitry Andric Physical64 = 2, 171*81ad6265SDimitry Andric PhysicalStorageBuffer64EXT = 5348, 172*81ad6265SDimitry Andric }; 173*81ad6265SDimitry Andric StringRef getAddressingModelName(AddressingModel e); 174*81ad6265SDimitry Andric 175*81ad6265SDimitry Andric enum class ExecutionModel : uint32_t { 176*81ad6265SDimitry Andric Vertex = 0, 177*81ad6265SDimitry Andric TessellationControl = 1, 178*81ad6265SDimitry Andric TessellationEvaluation = 2, 179*81ad6265SDimitry Andric Geometry = 3, 180*81ad6265SDimitry Andric Fragment = 4, 181*81ad6265SDimitry Andric GLCompute = 5, 182*81ad6265SDimitry Andric Kernel = 6, 183*81ad6265SDimitry Andric TaskNV = 5267, 184*81ad6265SDimitry Andric MeshNV = 5268, 185*81ad6265SDimitry Andric RayGenerationNV = 5313, 186*81ad6265SDimitry Andric IntersectionNV = 5314, 187*81ad6265SDimitry Andric AnyHitNV = 5315, 188*81ad6265SDimitry Andric ClosestHitNV = 5316, 189*81ad6265SDimitry Andric MissNV = 5317, 190*81ad6265SDimitry Andric CallableNV = 5318, 191*81ad6265SDimitry Andric }; 192*81ad6265SDimitry Andric StringRef getExecutionModelName(ExecutionModel e); 193*81ad6265SDimitry Andric 194*81ad6265SDimitry Andric enum class MemoryModel : uint32_t { 195*81ad6265SDimitry Andric Simple = 0, 196*81ad6265SDimitry Andric GLSL450 = 1, 197*81ad6265SDimitry Andric OpenCL = 2, 198*81ad6265SDimitry Andric VulkanKHR = 3, 199*81ad6265SDimitry Andric }; 200*81ad6265SDimitry Andric StringRef getMemoryModelName(MemoryModel e); 201*81ad6265SDimitry Andric 202*81ad6265SDimitry Andric enum class ExecutionMode : uint32_t { 203*81ad6265SDimitry Andric Invocations = 0, 204*81ad6265SDimitry Andric SpacingEqual = 1, 205*81ad6265SDimitry Andric SpacingFractionalEven = 2, 206*81ad6265SDimitry Andric SpacingFractionalOdd = 3, 207*81ad6265SDimitry Andric VertexOrderCw = 4, 208*81ad6265SDimitry Andric VertexOrderCcw = 5, 209*81ad6265SDimitry Andric PixelCenterInteger = 6, 210*81ad6265SDimitry Andric OriginUpperLeft = 7, 211*81ad6265SDimitry Andric OriginLowerLeft = 8, 212*81ad6265SDimitry Andric EarlyFragmentTests = 9, 213*81ad6265SDimitry Andric PointMode = 10, 214*81ad6265SDimitry Andric Xfb = 11, 215*81ad6265SDimitry Andric DepthReplacing = 12, 216*81ad6265SDimitry Andric DepthGreater = 14, 217*81ad6265SDimitry Andric DepthLess = 15, 218*81ad6265SDimitry Andric DepthUnchanged = 16, 219*81ad6265SDimitry Andric LocalSize = 17, 220*81ad6265SDimitry Andric LocalSizeHint = 18, 221*81ad6265SDimitry Andric InputPoints = 19, 222*81ad6265SDimitry Andric InputLines = 20, 223*81ad6265SDimitry Andric InputLinesAdjacency = 21, 224*81ad6265SDimitry Andric Triangles = 22, 225*81ad6265SDimitry Andric InputTrianglesAdjacency = 23, 226*81ad6265SDimitry Andric Quads = 24, 227*81ad6265SDimitry Andric Isolines = 25, 228*81ad6265SDimitry Andric OutputVertices = 26, 229*81ad6265SDimitry Andric OutputPoints = 27, 230*81ad6265SDimitry Andric OutputLineStrip = 28, 231*81ad6265SDimitry Andric OutputTriangleStrip = 29, 232*81ad6265SDimitry Andric VecTypeHint = 30, 233*81ad6265SDimitry Andric ContractionOff = 31, 234*81ad6265SDimitry Andric Initializer = 33, 235*81ad6265SDimitry Andric Finalizer = 34, 236*81ad6265SDimitry Andric SubgroupSize = 35, 237*81ad6265SDimitry Andric SubgroupsPerWorkgroup = 36, 238*81ad6265SDimitry Andric SubgroupsPerWorkgroupId = 37, 239*81ad6265SDimitry Andric LocalSizeId = 38, 240*81ad6265SDimitry Andric LocalSizeHintId = 39, 241*81ad6265SDimitry Andric PostDepthCoverage = 4446, 242*81ad6265SDimitry Andric DenormPreserve = 4459, 243*81ad6265SDimitry Andric DenormFlushToZero = 4460, 244*81ad6265SDimitry Andric SignedZeroInfNanPreserve = 4461, 245*81ad6265SDimitry Andric RoundingModeRTE = 4462, 246*81ad6265SDimitry Andric RoundingModeRTZ = 4463, 247*81ad6265SDimitry Andric StencilRefReplacingEXT = 5027, 248*81ad6265SDimitry Andric OutputLinesNV = 5269, 249*81ad6265SDimitry Andric DerivativeGroupQuadsNV = 5289, 250*81ad6265SDimitry Andric DerivativeGroupLinearNV = 5290, 251*81ad6265SDimitry Andric OutputTrianglesNV = 5298, 252*81ad6265SDimitry Andric }; 253*81ad6265SDimitry Andric StringRef getExecutionModeName(ExecutionMode e); 254*81ad6265SDimitry Andric 255*81ad6265SDimitry Andric enum class StorageClass : uint32_t { 256*81ad6265SDimitry Andric UniformConstant = 0, 257*81ad6265SDimitry Andric Input = 1, 258*81ad6265SDimitry Andric Uniform = 2, 259*81ad6265SDimitry Andric Output = 3, 260*81ad6265SDimitry Andric Workgroup = 4, 261*81ad6265SDimitry Andric CrossWorkgroup = 5, 262*81ad6265SDimitry Andric Private = 6, 263*81ad6265SDimitry Andric Function = 7, 264*81ad6265SDimitry Andric Generic = 8, 265*81ad6265SDimitry Andric PushConstant = 9, 266*81ad6265SDimitry Andric AtomicCounter = 10, 267*81ad6265SDimitry Andric Image = 11, 268*81ad6265SDimitry Andric StorageBuffer = 12, 269*81ad6265SDimitry Andric CallableDataNV = 5328, 270*81ad6265SDimitry Andric IncomingCallableDataNV = 5329, 271*81ad6265SDimitry Andric RayPayloadNV = 5338, 272*81ad6265SDimitry Andric HitAttributeNV = 5339, 273*81ad6265SDimitry Andric IncomingRayPayloadNV = 5342, 274*81ad6265SDimitry Andric ShaderRecordBufferNV = 5343, 275*81ad6265SDimitry Andric PhysicalStorageBufferEXT = 5349, 276*81ad6265SDimitry Andric }; 277*81ad6265SDimitry Andric StringRef getStorageClassName(StorageClass e); 278*81ad6265SDimitry Andric 279*81ad6265SDimitry Andric enum class Dim : uint32_t { 280*81ad6265SDimitry Andric DIM_1D = 0, 281*81ad6265SDimitry Andric DIM_2D = 1, 282*81ad6265SDimitry Andric DIM_3D = 2, 283*81ad6265SDimitry Andric DIM_Cube = 3, 284*81ad6265SDimitry Andric DIM_Rect = 4, 285*81ad6265SDimitry Andric DIM_Buffer = 5, 286*81ad6265SDimitry Andric DIM_SubpassData = 6, 287*81ad6265SDimitry Andric }; 288*81ad6265SDimitry Andric StringRef getDimName(Dim e); 289*81ad6265SDimitry Andric 290*81ad6265SDimitry Andric enum class SamplerAddressingMode : uint32_t { 291*81ad6265SDimitry Andric None = 0, 292*81ad6265SDimitry Andric ClampToEdge = 1, 293*81ad6265SDimitry Andric Clamp = 2, 294*81ad6265SDimitry Andric Repeat = 3, 295*81ad6265SDimitry Andric RepeatMirrored = 4, 296*81ad6265SDimitry Andric }; 297*81ad6265SDimitry Andric StringRef getSamplerAddressingModeName(SamplerAddressingMode e); 298*81ad6265SDimitry Andric 299*81ad6265SDimitry Andric enum class SamplerFilterMode : uint32_t { 300*81ad6265SDimitry Andric Nearest = 0, 301*81ad6265SDimitry Andric Linear = 1, 302*81ad6265SDimitry Andric }; 303*81ad6265SDimitry Andric StringRef getSamplerFilterModeName(SamplerFilterMode e); 304*81ad6265SDimitry Andric 305*81ad6265SDimitry Andric enum class ImageFormat : uint32_t { 306*81ad6265SDimitry Andric Unknown = 0, 307*81ad6265SDimitry Andric Rgba32f = 1, 308*81ad6265SDimitry Andric Rgba16f = 2, 309*81ad6265SDimitry Andric R32f = 3, 310*81ad6265SDimitry Andric Rgba8 = 4, 311*81ad6265SDimitry Andric Rgba8Snorm = 5, 312*81ad6265SDimitry Andric Rg32f = 6, 313*81ad6265SDimitry Andric Rg16f = 7, 314*81ad6265SDimitry Andric R11fG11fB10f = 8, 315*81ad6265SDimitry Andric R16f = 9, 316*81ad6265SDimitry Andric Rgba16 = 10, 317*81ad6265SDimitry Andric Rgb10A2 = 11, 318*81ad6265SDimitry Andric Rg16 = 12, 319*81ad6265SDimitry Andric Rg8 = 13, 320*81ad6265SDimitry Andric R16 = 14, 321*81ad6265SDimitry Andric R8 = 15, 322*81ad6265SDimitry Andric Rgba16Snorm = 16, 323*81ad6265SDimitry Andric Rg16Snorm = 17, 324*81ad6265SDimitry Andric Rg8Snorm = 18, 325*81ad6265SDimitry Andric R16Snorm = 19, 326*81ad6265SDimitry Andric R8Snorm = 20, 327*81ad6265SDimitry Andric Rgba32i = 21, 328*81ad6265SDimitry Andric Rgba16i = 22, 329*81ad6265SDimitry Andric Rgba8i = 23, 330*81ad6265SDimitry Andric R32i = 24, 331*81ad6265SDimitry Andric Rg32i = 25, 332*81ad6265SDimitry Andric Rg16i = 26, 333*81ad6265SDimitry Andric Rg8i = 27, 334*81ad6265SDimitry Andric R16i = 28, 335*81ad6265SDimitry Andric R8i = 29, 336*81ad6265SDimitry Andric Rgba32ui = 30, 337*81ad6265SDimitry Andric Rgba16ui = 31, 338*81ad6265SDimitry Andric Rgba8ui = 32, 339*81ad6265SDimitry Andric R32ui = 33, 340*81ad6265SDimitry Andric Rgb10a2ui = 34, 341*81ad6265SDimitry Andric Rg32ui = 35, 342*81ad6265SDimitry Andric Rg16ui = 36, 343*81ad6265SDimitry Andric Rg8ui = 37, 344*81ad6265SDimitry Andric R16ui = 38, 345*81ad6265SDimitry Andric R8ui = 39, 346*81ad6265SDimitry Andric }; 347*81ad6265SDimitry Andric StringRef getImageFormatName(ImageFormat e); 348*81ad6265SDimitry Andric 349*81ad6265SDimitry Andric enum class ImageChannelOrder : uint32_t { 350*81ad6265SDimitry Andric R = 0, 351*81ad6265SDimitry Andric A = 1, 352*81ad6265SDimitry Andric RG = 2, 353*81ad6265SDimitry Andric RA = 3, 354*81ad6265SDimitry Andric RGB = 4, 355*81ad6265SDimitry Andric RGBA = 5, 356*81ad6265SDimitry Andric BGRA = 6, 357*81ad6265SDimitry Andric ARGB = 7, 358*81ad6265SDimitry Andric Intensity = 8, 359*81ad6265SDimitry Andric Luminance = 9, 360*81ad6265SDimitry Andric Rx = 10, 361*81ad6265SDimitry Andric RGx = 11, 362*81ad6265SDimitry Andric RGBx = 12, 363*81ad6265SDimitry Andric Depth = 13, 364*81ad6265SDimitry Andric DepthStencil = 14, 365*81ad6265SDimitry Andric sRGB = 15, 366*81ad6265SDimitry Andric sRGBx = 16, 367*81ad6265SDimitry Andric sRGBA = 17, 368*81ad6265SDimitry Andric sBGRA = 18, 369*81ad6265SDimitry Andric ABGR = 19, 370*81ad6265SDimitry Andric }; 371*81ad6265SDimitry Andric StringRef getImageChannelOrderName(ImageChannelOrder e); 372*81ad6265SDimitry Andric 373*81ad6265SDimitry Andric enum class ImageChannelDataType : uint32_t { 374*81ad6265SDimitry Andric SnormInt8 = 0, 375*81ad6265SDimitry Andric SnormInt16 = 1, 376*81ad6265SDimitry Andric UnormInt8 = 2, 377*81ad6265SDimitry Andric UnormInt16 = 3, 378*81ad6265SDimitry Andric UnormShort565 = 4, 379*81ad6265SDimitry Andric UnormShort555 = 5, 380*81ad6265SDimitry Andric UnormInt101010 = 6, 381*81ad6265SDimitry Andric SignedInt8 = 7, 382*81ad6265SDimitry Andric SignedInt16 = 8, 383*81ad6265SDimitry Andric SignedInt32 = 9, 384*81ad6265SDimitry Andric UnsignedInt8 = 10, 385*81ad6265SDimitry Andric UnsignedInt16 = 11, 386*81ad6265SDimitry Andric UnsigendInt32 = 12, 387*81ad6265SDimitry Andric HalfFloat = 13, 388*81ad6265SDimitry Andric Float = 14, 389*81ad6265SDimitry Andric UnormInt24 = 15, 390*81ad6265SDimitry Andric UnormInt101010_2 = 16, 391*81ad6265SDimitry Andric }; 392*81ad6265SDimitry Andric StringRef getImageChannelDataTypeName(ImageChannelDataType e); 393*81ad6265SDimitry Andric 394*81ad6265SDimitry Andric enum class ImageOperand : uint32_t { 395*81ad6265SDimitry Andric None = 0x0, 396*81ad6265SDimitry Andric Bias = 0x1, 397*81ad6265SDimitry Andric Lod = 0x2, 398*81ad6265SDimitry Andric Grad = 0x4, 399*81ad6265SDimitry Andric ConstOffset = 0x8, 400*81ad6265SDimitry Andric Offset = 0x10, 401*81ad6265SDimitry Andric ConstOffsets = 0x20, 402*81ad6265SDimitry Andric Sample = 0x40, 403*81ad6265SDimitry Andric MinLod = 0x80, 404*81ad6265SDimitry Andric MakeTexelAvailableKHR = 0x100, 405*81ad6265SDimitry Andric MakeTexelVisibleKHR = 0x200, 406*81ad6265SDimitry Andric NonPrivateTexelKHR = 0x400, 407*81ad6265SDimitry Andric VolatileTexelKHR = 0x800, 408*81ad6265SDimitry Andric SignExtend = 0x1000, 409*81ad6265SDimitry Andric ZeroExtend = 0x2000, 410*81ad6265SDimitry Andric }; 411*81ad6265SDimitry Andric std::string getImageOperandName(uint32_t e); 412*81ad6265SDimitry Andric 413*81ad6265SDimitry Andric enum class FPFastMathMode : uint32_t { 414*81ad6265SDimitry Andric None = 0x0, 415*81ad6265SDimitry Andric NotNaN = 0x1, 416*81ad6265SDimitry Andric NotInf = 0x2, 417*81ad6265SDimitry Andric NSZ = 0x4, 418*81ad6265SDimitry Andric AllowRecip = 0x8, 419*81ad6265SDimitry Andric Fast = 0x10, 420*81ad6265SDimitry Andric }; 421*81ad6265SDimitry Andric std::string getFPFastMathModeName(uint32_t e); 422*81ad6265SDimitry Andric 423*81ad6265SDimitry Andric enum class FPRoundingMode : uint32_t { 424*81ad6265SDimitry Andric RTE = 0, 425*81ad6265SDimitry Andric RTZ = 1, 426*81ad6265SDimitry Andric RTP = 2, 427*81ad6265SDimitry Andric RTN = 3, 428*81ad6265SDimitry Andric }; 429*81ad6265SDimitry Andric StringRef getFPRoundingModeName(FPRoundingMode e); 430*81ad6265SDimitry Andric 431*81ad6265SDimitry Andric enum class LinkageType : uint32_t { 432*81ad6265SDimitry Andric Export = 0, 433*81ad6265SDimitry Andric Import = 1, 434*81ad6265SDimitry Andric }; 435*81ad6265SDimitry Andric StringRef getLinkageTypeName(LinkageType e); 436*81ad6265SDimitry Andric 437*81ad6265SDimitry Andric enum class AccessQualifier : uint32_t { 438*81ad6265SDimitry Andric ReadOnly = 0, 439*81ad6265SDimitry Andric WriteOnly = 1, 440*81ad6265SDimitry Andric ReadWrite = 2, 441*81ad6265SDimitry Andric }; 442*81ad6265SDimitry Andric StringRef getAccessQualifierName(AccessQualifier e); 443*81ad6265SDimitry Andric 444*81ad6265SDimitry Andric enum class FunctionParameterAttribute : uint32_t { 445*81ad6265SDimitry Andric Zext = 0, 446*81ad6265SDimitry Andric Sext = 1, 447*81ad6265SDimitry Andric ByVal = 2, 448*81ad6265SDimitry Andric Sret = 3, 449*81ad6265SDimitry Andric NoAlias = 4, 450*81ad6265SDimitry Andric NoCapture = 5, 451*81ad6265SDimitry Andric NoWrite = 6, 452*81ad6265SDimitry Andric NoReadWrite = 7, 453*81ad6265SDimitry Andric }; 454*81ad6265SDimitry Andric StringRef getFunctionParameterAttributeName(FunctionParameterAttribute e); 455*81ad6265SDimitry Andric 456*81ad6265SDimitry Andric enum class Decoration : uint32_t { 457*81ad6265SDimitry Andric RelaxedPrecision = 0, 458*81ad6265SDimitry Andric SpecId = 1, 459*81ad6265SDimitry Andric Block = 2, 460*81ad6265SDimitry Andric BufferBlock = 3, 461*81ad6265SDimitry Andric RowMajor = 4, 462*81ad6265SDimitry Andric ColMajor = 5, 463*81ad6265SDimitry Andric ArrayStride = 6, 464*81ad6265SDimitry Andric MatrixStride = 7, 465*81ad6265SDimitry Andric GLSLShared = 8, 466*81ad6265SDimitry Andric GLSLPacked = 9, 467*81ad6265SDimitry Andric CPacked = 10, 468*81ad6265SDimitry Andric BuiltIn = 11, 469*81ad6265SDimitry Andric NoPerspective = 13, 470*81ad6265SDimitry Andric Flat = 14, 471*81ad6265SDimitry Andric Patch = 15, 472*81ad6265SDimitry Andric Centroid = 16, 473*81ad6265SDimitry Andric Sample = 17, 474*81ad6265SDimitry Andric Invariant = 18, 475*81ad6265SDimitry Andric Restrict = 19, 476*81ad6265SDimitry Andric Aliased = 20, 477*81ad6265SDimitry Andric Volatile = 21, 478*81ad6265SDimitry Andric Constant = 22, 479*81ad6265SDimitry Andric Coherent = 23, 480*81ad6265SDimitry Andric NonWritable = 24, 481*81ad6265SDimitry Andric NonReadable = 25, 482*81ad6265SDimitry Andric Uniform = 26, 483*81ad6265SDimitry Andric UniformId = 27, 484*81ad6265SDimitry Andric SaturatedConversion = 28, 485*81ad6265SDimitry Andric Stream = 29, 486*81ad6265SDimitry Andric Location = 30, 487*81ad6265SDimitry Andric Component = 31, 488*81ad6265SDimitry Andric Index = 32, 489*81ad6265SDimitry Andric Binding = 33, 490*81ad6265SDimitry Andric DescriptorSet = 34, 491*81ad6265SDimitry Andric Offset = 35, 492*81ad6265SDimitry Andric XfbBuffer = 36, 493*81ad6265SDimitry Andric XfbStride = 37, 494*81ad6265SDimitry Andric FuncParamAttr = 38, 495*81ad6265SDimitry Andric FPRoundingMode = 39, 496*81ad6265SDimitry Andric FPFastMathMode = 40, 497*81ad6265SDimitry Andric LinkageAttributes = 41, 498*81ad6265SDimitry Andric NoContraction = 42, 499*81ad6265SDimitry Andric InputAttachmentIndex = 43, 500*81ad6265SDimitry Andric Alignment = 44, 501*81ad6265SDimitry Andric MaxByteOffset = 45, 502*81ad6265SDimitry Andric AlignmentId = 46, 503*81ad6265SDimitry Andric MaxByteOffsetId = 47, 504*81ad6265SDimitry Andric NoSignedWrap = 4469, 505*81ad6265SDimitry Andric NoUnsignedWrap = 4470, 506*81ad6265SDimitry Andric ExplicitInterpAMD = 4999, 507*81ad6265SDimitry Andric OverrideCoverageNV = 5248, 508*81ad6265SDimitry Andric PassthroughNV = 5250, 509*81ad6265SDimitry Andric ViewportRelativeNV = 5252, 510*81ad6265SDimitry Andric SecondaryViewportRelativeNV = 5256, 511*81ad6265SDimitry Andric PerPrimitiveNV = 5271, 512*81ad6265SDimitry Andric PerViewNV = 5272, 513*81ad6265SDimitry Andric PerVertexNV = 5273, 514*81ad6265SDimitry Andric NonUniformEXT = 5300, 515*81ad6265SDimitry Andric CountBuffer = 5634, 516*81ad6265SDimitry Andric UserSemantic = 5635, 517*81ad6265SDimitry Andric RestrictPointerEXT = 5355, 518*81ad6265SDimitry Andric AliasedPointerEXT = 5356, 519*81ad6265SDimitry Andric }; 520*81ad6265SDimitry Andric StringRef getDecorationName(Decoration e); 521*81ad6265SDimitry Andric 522*81ad6265SDimitry Andric enum class BuiltIn : uint32_t { 523*81ad6265SDimitry Andric Position = 0, 524*81ad6265SDimitry Andric PointSize = 1, 525*81ad6265SDimitry Andric ClipDistance = 3, 526*81ad6265SDimitry Andric CullDistance = 4, 527*81ad6265SDimitry Andric VertexId = 5, 528*81ad6265SDimitry Andric InstanceId = 6, 529*81ad6265SDimitry Andric PrimitiveId = 7, 530*81ad6265SDimitry Andric InvocationId = 8, 531*81ad6265SDimitry Andric Layer = 9, 532*81ad6265SDimitry Andric ViewportIndex = 10, 533*81ad6265SDimitry Andric TessLevelOuter = 11, 534*81ad6265SDimitry Andric TessLevelInner = 12, 535*81ad6265SDimitry Andric TessCoord = 13, 536*81ad6265SDimitry Andric PatchVertices = 14, 537*81ad6265SDimitry Andric FragCoord = 15, 538*81ad6265SDimitry Andric PointCoord = 16, 539*81ad6265SDimitry Andric FrontFacing = 17, 540*81ad6265SDimitry Andric SampleId = 18, 541*81ad6265SDimitry Andric SamplePosition = 19, 542*81ad6265SDimitry Andric SampleMask = 20, 543*81ad6265SDimitry Andric FragDepth = 22, 544*81ad6265SDimitry Andric HelperInvocation = 23, 545*81ad6265SDimitry Andric NumWorkgroups = 24, 546*81ad6265SDimitry Andric WorkgroupSize = 25, 547*81ad6265SDimitry Andric WorkgroupId = 26, 548*81ad6265SDimitry Andric LocalInvocationId = 27, 549*81ad6265SDimitry Andric GlobalInvocationId = 28, 550*81ad6265SDimitry Andric LocalInvocationIndex = 29, 551*81ad6265SDimitry Andric WorkDim = 30, 552*81ad6265SDimitry Andric GlobalSize = 31, 553*81ad6265SDimitry Andric EnqueuedWorkgroupSize = 32, 554*81ad6265SDimitry Andric GlobalOffset = 33, 555*81ad6265SDimitry Andric GlobalLinearId = 34, 556*81ad6265SDimitry Andric SubgroupSize = 36, 557*81ad6265SDimitry Andric SubgroupMaxSize = 37, 558*81ad6265SDimitry Andric NumSubgroups = 38, 559*81ad6265SDimitry Andric NumEnqueuedSubgroups = 39, 560*81ad6265SDimitry Andric SubgroupId = 40, 561*81ad6265SDimitry Andric SubgroupLocalInvocationId = 41, 562*81ad6265SDimitry Andric VertexIndex = 42, 563*81ad6265SDimitry Andric InstanceIndex = 43, 564*81ad6265SDimitry Andric SubgroupEqMask = 4416, 565*81ad6265SDimitry Andric SubgroupGeMask = 4417, 566*81ad6265SDimitry Andric SubgroupGtMask = 4418, 567*81ad6265SDimitry Andric SubgroupLeMask = 4419, 568*81ad6265SDimitry Andric SubgroupLtMask = 4420, 569*81ad6265SDimitry Andric BaseVertex = 4424, 570*81ad6265SDimitry Andric BaseInstance = 4425, 571*81ad6265SDimitry Andric DrawIndex = 4426, 572*81ad6265SDimitry Andric DeviceIndex = 4438, 573*81ad6265SDimitry Andric ViewIndex = 4440, 574*81ad6265SDimitry Andric BaryCoordNoPerspAMD = 4492, 575*81ad6265SDimitry Andric BaryCoordNoPerspCentroidAMD = 4493, 576*81ad6265SDimitry Andric BaryCoordNoPerspSampleAMD = 4494, 577*81ad6265SDimitry Andric BaryCoordSmoothAMD = 4495, 578*81ad6265SDimitry Andric BaryCoordSmoothCentroid = 4496, 579*81ad6265SDimitry Andric BaryCoordSmoothSample = 4497, 580*81ad6265SDimitry Andric BaryCoordPullModel = 4498, 581*81ad6265SDimitry Andric FragStencilRefEXT = 5014, 582*81ad6265SDimitry Andric ViewportMaskNV = 5253, 583*81ad6265SDimitry Andric SecondaryPositionNV = 5257, 584*81ad6265SDimitry Andric SecondaryViewportMaskNV = 5258, 585*81ad6265SDimitry Andric PositionPerViewNV = 5261, 586*81ad6265SDimitry Andric ViewportMaskPerViewNV = 5262, 587*81ad6265SDimitry Andric FullyCoveredEXT = 5264, 588*81ad6265SDimitry Andric TaskCountNV = 5274, 589*81ad6265SDimitry Andric PrimitiveCountNV = 5275, 590*81ad6265SDimitry Andric PrimitiveIndicesNV = 5276, 591*81ad6265SDimitry Andric ClipDistancePerViewNV = 5277, 592*81ad6265SDimitry Andric CullDistancePerViewNV = 5278, 593*81ad6265SDimitry Andric LayerPerViewNV = 5279, 594*81ad6265SDimitry Andric MeshViewCountNV = 5280, 595*81ad6265SDimitry Andric MeshViewIndices = 5281, 596*81ad6265SDimitry Andric BaryCoordNV = 5286, 597*81ad6265SDimitry Andric BaryCoordNoPerspNV = 5287, 598*81ad6265SDimitry Andric FragSizeEXT = 5292, 599*81ad6265SDimitry Andric FragInvocationCountEXT = 5293, 600*81ad6265SDimitry Andric LaunchIdNV = 5319, 601*81ad6265SDimitry Andric LaunchSizeNV = 5320, 602*81ad6265SDimitry Andric WorldRayOriginNV = 5321, 603*81ad6265SDimitry Andric WorldRayDirectionNV = 5322, 604*81ad6265SDimitry Andric ObjectRayOriginNV = 5323, 605*81ad6265SDimitry Andric ObjectRayDirectionNV = 5324, 606*81ad6265SDimitry Andric RayTminNV = 5325, 607*81ad6265SDimitry Andric RayTmaxNV = 5326, 608*81ad6265SDimitry Andric InstanceCustomIndexNV = 5327, 609*81ad6265SDimitry Andric ObjectToWorldNV = 5330, 610*81ad6265SDimitry Andric WorldToObjectNV = 5331, 611*81ad6265SDimitry Andric HitTNV = 5332, 612*81ad6265SDimitry Andric HitKindNV = 5333, 613*81ad6265SDimitry Andric IncomingRayFlagsNV = 5351, 614*81ad6265SDimitry Andric }; 615*81ad6265SDimitry Andric StringRef getBuiltInName(BuiltIn e); 616*81ad6265SDimitry Andric 617*81ad6265SDimitry Andric enum class SelectionControl : uint32_t { 618*81ad6265SDimitry Andric None = 0x0, 619*81ad6265SDimitry Andric Flatten = 0x1, 620*81ad6265SDimitry Andric DontFlatten = 0x2, 621*81ad6265SDimitry Andric }; 622*81ad6265SDimitry Andric std::string getSelectionControlName(uint32_t e); 623*81ad6265SDimitry Andric 624*81ad6265SDimitry Andric enum class LoopControl : uint32_t { 625*81ad6265SDimitry Andric None = 0x0, 626*81ad6265SDimitry Andric Unroll = 0x1, 627*81ad6265SDimitry Andric DontUnroll = 0x2, 628*81ad6265SDimitry Andric DependencyInfinite = 0x4, 629*81ad6265SDimitry Andric DependencyLength = 0x8, 630*81ad6265SDimitry Andric MinIterations = 0x10, 631*81ad6265SDimitry Andric MaxIterations = 0x20, 632*81ad6265SDimitry Andric IterationMultiple = 0x40, 633*81ad6265SDimitry Andric PeelCount = 0x80, 634*81ad6265SDimitry Andric PartialCount = 0x100, 635*81ad6265SDimitry Andric }; 636*81ad6265SDimitry Andric std::string getLoopControlName(uint32_t e); 637*81ad6265SDimitry Andric 638*81ad6265SDimitry Andric enum class FunctionControl : uint32_t { 639*81ad6265SDimitry Andric None = 0x0, 640*81ad6265SDimitry Andric Inline = 0x1, 641*81ad6265SDimitry Andric DontInline = 0x2, 642*81ad6265SDimitry Andric Pure = 0x4, 643*81ad6265SDimitry Andric Const = 0x8, 644*81ad6265SDimitry Andric }; 645*81ad6265SDimitry Andric std::string getFunctionControlName(uint32_t e); 646*81ad6265SDimitry Andric 647*81ad6265SDimitry Andric enum class MemorySemantics : uint32_t { 648*81ad6265SDimitry Andric None = 0x0, 649*81ad6265SDimitry Andric Acquire = 0x2, 650*81ad6265SDimitry Andric Release = 0x4, 651*81ad6265SDimitry Andric AcquireRelease = 0x8, 652*81ad6265SDimitry Andric SequentiallyConsistent = 0x10, 653*81ad6265SDimitry Andric UniformMemory = 0x40, 654*81ad6265SDimitry Andric SubgroupMemory = 0x80, 655*81ad6265SDimitry Andric WorkgroupMemory = 0x100, 656*81ad6265SDimitry Andric CrossWorkgroupMemory = 0x200, 657*81ad6265SDimitry Andric AtomicCounterMemory = 0x400, 658*81ad6265SDimitry Andric ImageMemory = 0x800, 659*81ad6265SDimitry Andric OutputMemoryKHR = 0x1000, 660*81ad6265SDimitry Andric MakeAvailableKHR = 0x2000, 661*81ad6265SDimitry Andric MakeVisibleKHR = 0x4000, 662*81ad6265SDimitry Andric }; 663*81ad6265SDimitry Andric std::string getMemorySemanticsName(uint32_t e); 664*81ad6265SDimitry Andric 665*81ad6265SDimitry Andric enum class MemoryOperand : uint32_t { 666*81ad6265SDimitry Andric None = 0x0, 667*81ad6265SDimitry Andric Volatile = 0x1, 668*81ad6265SDimitry Andric Aligned = 0x2, 669*81ad6265SDimitry Andric Nontemporal = 0x4, 670*81ad6265SDimitry Andric MakePointerAvailableKHR = 0x8, 671*81ad6265SDimitry Andric MakePointerVisibleKHR = 0x10, 672*81ad6265SDimitry Andric NonPrivatePointerKHR = 0x20, 673*81ad6265SDimitry Andric }; 674*81ad6265SDimitry Andric std::string getMemoryOperandName(uint32_t e); 675*81ad6265SDimitry Andric 676*81ad6265SDimitry Andric enum class Scope : uint32_t { 677*81ad6265SDimitry Andric CrossDevice = 0, 678*81ad6265SDimitry Andric Device = 1, 679*81ad6265SDimitry Andric Workgroup = 2, 680*81ad6265SDimitry Andric Subgroup = 3, 681*81ad6265SDimitry Andric Invocation = 4, 682*81ad6265SDimitry Andric QueueFamilyKHR = 5, 683*81ad6265SDimitry Andric }; 684*81ad6265SDimitry Andric StringRef getScopeName(Scope e); 685*81ad6265SDimitry Andric 686*81ad6265SDimitry Andric enum class GroupOperation : uint32_t { 687*81ad6265SDimitry Andric Reduce = 0, 688*81ad6265SDimitry Andric InclusiveScan = 1, 689*81ad6265SDimitry Andric ExclusiveScan = 2, 690*81ad6265SDimitry Andric ClusteredReduce = 3, 691*81ad6265SDimitry Andric PartitionedReduceNV = 6, 692*81ad6265SDimitry Andric PartitionedInclusiveScanNV = 7, 693*81ad6265SDimitry Andric PartitionedExclusiveScanNV = 8, 694*81ad6265SDimitry Andric }; 695*81ad6265SDimitry Andric StringRef getGroupOperationName(GroupOperation e); 696*81ad6265SDimitry Andric 697*81ad6265SDimitry Andric enum class KernelEnqueueFlags : uint32_t { 698*81ad6265SDimitry Andric NoWait = 0, 699*81ad6265SDimitry Andric WaitKernel = 1, 700*81ad6265SDimitry Andric WaitWorkGroup = 2, 701*81ad6265SDimitry Andric }; 702*81ad6265SDimitry Andric StringRef getKernelEnqueueFlagsName(KernelEnqueueFlags e); 703*81ad6265SDimitry Andric 704*81ad6265SDimitry Andric enum class KernelProfilingInfo : uint32_t { 705*81ad6265SDimitry Andric None = 0x0, 706*81ad6265SDimitry Andric CmdExecTime = 0x1, 707*81ad6265SDimitry Andric }; 708*81ad6265SDimitry Andric StringRef getKernelProfilingInfoName(KernelProfilingInfo e); 709*81ad6265SDimitry Andric } // namespace SPIRV 710*81ad6265SDimitry Andric } // namespace llvm 711*81ad6265SDimitry Andric 712*81ad6265SDimitry Andric // Return a string representation of the operands from startIndex onwards. 713*81ad6265SDimitry Andric // Templated to allow both MachineInstr and MCInst to use the same logic. 714*81ad6265SDimitry Andric template <class InstType> 715*81ad6265SDimitry Andric std::string getSPIRVStringOperand(const InstType &MI, unsigned StartIndex) { 716*81ad6265SDimitry Andric std::string s; // Iteratively append to this string. 717*81ad6265SDimitry Andric 718*81ad6265SDimitry Andric const unsigned NumOps = MI.getNumOperands(); 719*81ad6265SDimitry Andric bool IsFinished = false; 720*81ad6265SDimitry Andric for (unsigned i = StartIndex; i < NumOps && !IsFinished; ++i) { 721*81ad6265SDimitry Andric const auto &Op = MI.getOperand(i); 722*81ad6265SDimitry Andric if (!Op.isImm()) // Stop if we hit a register operand. 723*81ad6265SDimitry Andric break; 724*81ad6265SDimitry Andric assert((Op.getImm() >> 32) == 0 && "Imm operand should be i32 word"); 725*81ad6265SDimitry Andric const uint32_t Imm = Op.getImm(); // Each i32 word is up to 4 characters. 726*81ad6265SDimitry Andric for (unsigned ShiftAmount = 0; ShiftAmount < 32; ShiftAmount += 8) { 727*81ad6265SDimitry Andric char c = (Imm >> ShiftAmount) & 0xff; 728*81ad6265SDimitry Andric if (c == 0) { // Stop if we hit a null-terminator character. 729*81ad6265SDimitry Andric IsFinished = true; 730*81ad6265SDimitry Andric break; 731*81ad6265SDimitry Andric } else { 732*81ad6265SDimitry Andric s += c; // Otherwise, append the character to the result string. 733*81ad6265SDimitry Andric } 734*81ad6265SDimitry Andric } 735*81ad6265SDimitry Andric } 736*81ad6265SDimitry Andric return s; 737*81ad6265SDimitry Andric } 738*81ad6265SDimitry Andric 739*81ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_SPIRV_MCTARGETDESC_SPIRVBASEINFO_H 740