1//===- SPIRVSymbolicOperands.td ----------------------------*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines symbolic/named operands for various SPIR-V instructions. 10// 11//===----------------------------------------------------------------------===// 12 13include "llvm/TableGen/SearchableTable.td" 14 15//===----------------------------------------------------------------------===// 16// Lookup table containing symbolic operands with the following columns: 17// - Category (Extension/Capability/BuiltIn/etc.) 18// - Value (32-bit representation for binary emission) 19// - Mnemonic (String representation for textual emission) 20// - MinVersion 21// - MaxVersion 22//===----------------------------------------------------------------------===// 23 24// Forward-declare classes used in SymbolicOperand 25class OperandCategory; 26 27class SymbolicOperand<OperandCategory category, bits<32> value, string mnemonic, bits<32> minVersion, bits<32> maxVersion> { 28 OperandCategory Category = category; 29 bits<32> Value = value; 30 string Mnemonic = mnemonic; 31 bits<32> MinVersion = minVersion; 32 bits<32> MaxVersion = maxVersion; 33} 34 35def SymbolicOperands : GenericTable { 36 let FilterClass = "SymbolicOperand"; 37 let Fields = ["Category", "Value", "Mnemonic", "MinVersion", "MaxVersion"]; 38 string TypeOf_Category = "OperandCategory"; 39 let PrimaryKey = ["Category", "Value"]; 40 // Function for looking up symbolic operands based on category and value. 41 let PrimaryKeyName = "lookupSymbolicOperandByCategoryAndValue"; 42} 43 44// Function for looking up symbolic operands based on just category. 45def lookupSymbolicOperandByCategory : SearchIndex { 46 let Table = SymbolicOperands; 47 let Key = ["Category"]; 48} 49 50// Function for looking up symbolic operands based on category and mnemonic. 51def lookupSymbolicOperandByCategoryAndMnemonic : SearchIndex { 52 let Table = SymbolicOperands; 53 let Key = ["Category", "Mnemonic"]; 54} 55 56//===----------------------------------------------------------------------===// 57// Lookup table for matching symbolic operands (category + 32-bit value) to 58// a SPIR-V extension. 59//===----------------------------------------------------------------------===// 60 61// Forward-declare classes used in ExtensionEntry 62class Extension; 63 64class ExtensionEntry<OperandCategory category, bits<32> value, Extension reqExtension> { 65 OperandCategory Category = category; 66 bits<32> Value = value; 67 Extension ReqExtension = reqExtension; 68} 69 70def ExtensionEntries : GenericTable { 71 let FilterClass = "ExtensionEntry"; 72 let Fields = ["Category", "Value", "ReqExtension"]; 73 string TypeOf_Category = "OperandCategory"; 74 string TypeOf_ReqExtension = "Extension"; 75 let PrimaryKey = ["Category", "Value"]; 76 // Function for looking up the extension by category + value. 77 let PrimaryKeyName = "lookupExtensionByCategoryAndValue"; 78} 79 80// Function to lookup symbolic operands enabled by a given extension. 81def lookupSymbolicOperandsEnabledByExtension : SearchIndex { 82 let Table = ExtensionEntries; 83 let Key = ["ReqExtension", "Category"]; 84} 85 86//===----------------------------------------------------------------------===// 87// Lookup table for matching symbolic operands (category + 32-bit value) to 88// SPIR-V capabilities. If an operand requires more than one capability, there 89// will be multiple consecutive entries present in the table. 90//===----------------------------------------------------------------------===// 91 92// Forward-declare classes used in ExtensionEntry 93class Capability; 94 95class CapabilityEntry<OperandCategory category, bits<32> value, Capability reqCabaility> { 96 OperandCategory Category = category; 97 bits<32> Value = value; 98 Capability ReqCapability = reqCabaility; 99} 100 101def CapabilityEntries : GenericTable { 102 let FilterClass = "CapabilityEntry"; 103 let Fields = ["Category", "Value", "ReqCapability"]; 104 string TypeOf_Category = "OperandCategory"; 105 string TypeOf_ReqCapability = "Capability"; 106 let PrimaryKey = ["Category", "Value"]; 107 // Function for looking up a (the first) capability by category + value. Next 108 // capabilities should be consecutive. 109 let PrimaryKeyName = "lookupCapabilityByCategoryAndValue"; 110} 111 112//===----------------------------------------------------------------------===// 113// Multiclass used to define a SymbolicOperand and at the same time declare 114// required extension and capabilities. 115//===----------------------------------------------------------------------===// 116 117multiclass SymbolicOperandWithRequirements<OperandCategory category, bits<32> value, string mnemonic, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 118 assert !ge(!size(mnemonic), 1), "No mnemonic/string representation provided for symbolic operand with value " # value; 119 def : SymbolicOperand<category, value, mnemonic, minVersion, maxVersion>; 120 121 assert !le(!size(reqExtensions), 1), "Too many required extensions for a symbolic/named operand: " # mnemonic; 122 if !eq(!size(reqExtensions), 1) then { 123 def : ExtensionEntry<category, value, reqExtensions[0]>; 124 } 125 126 foreach capability = reqCapabilities in { 127 def : CapabilityEntry<category, value, capability>; 128 } 129} 130 131//===----------------------------------------------------------------------===// 132// Enum defining different categories of symbolic/named operands. 133//===----------------------------------------------------------------------===// 134 135def OperandCategory : GenericEnum { 136 let FilterClass = "OperandCategory"; 137} 138 139class OperandCategory; 140 141def ExtensionOperand : OperandCategory; 142def CapabilityOperand : OperandCategory; 143def SourceLanguageOperand : OperandCategory; 144def AddressingModelOperand : OperandCategory; 145def ExecutionModelOperand : OperandCategory; 146def MemoryModelOperand : OperandCategory; 147def ExecutionModeOperand : OperandCategory; 148def StorageClassOperand : OperandCategory; 149def DimOperand : OperandCategory; 150def SamplerAddressingModeOperand : OperandCategory; 151def SamplerFilterModeOperand : OperandCategory; 152def ImageFormatOperand : OperandCategory; 153def ImageChannelOrderOperand : OperandCategory; 154def ImageChannelDataTypeOperand : OperandCategory; 155def ImageOperandOperand : OperandCategory; 156def FPFastMathModeOperand : OperandCategory; 157def FPRoundingModeOperand : OperandCategory; 158def LinkageTypeOperand : OperandCategory; 159def AccessQualifierOperand : OperandCategory; 160def FunctionParameterAttributeOperand : OperandCategory; 161def DecorationOperand : OperandCategory; 162def BuiltInOperand : OperandCategory; 163def SelectionControlOperand : OperandCategory; 164def LoopControlOperand : OperandCategory; 165def FunctionControlOperand : OperandCategory; 166def MemorySemanticsOperand : OperandCategory; 167def MemoryOperandOperand : OperandCategory; 168def ScopeOperand : OperandCategory; 169def GroupOperationOperand : OperandCategory; 170def KernelEnqueueFlagsOperand : OperandCategory; 171def KernelProfilingInfoOperand : OperandCategory; 172def OpcodeOperand : OperandCategory; 173 174//===----------------------------------------------------------------------===// 175// Multiclass used to define Extesions enum values and at the same time 176// SymbolicOperand entries. 177//===----------------------------------------------------------------------===// 178 179def Extension : GenericEnum, Operand<i32> { 180 let FilterClass = "Extension"; 181 let NameField = "Name"; 182 let ValueField = "Value"; 183 let PrintMethod = "printExtension"; 184} 185 186class Extension<string name, bits<32> value> { 187 string Name = name; 188 bits<32> Value = value; 189} 190 191multiclass ExtensionOperand<bits<32> value> { 192 def NAME : Extension<NAME, value>; 193 defm : SymbolicOperandWithRequirements<ExtensionOperand, value, NAME, 0, 0, [], []>; 194} 195 196defm SPV_AMD_shader_explicit_vertex_parameter : ExtensionOperand<1>; 197defm SPV_AMD_shader_trinary_minmax_extension : ExtensionOperand<2>; 198defm SPV_AMD_gcn_shader : ExtensionOperand<3>; 199defm SPV_KHR_shader_ballot : ExtensionOperand<4>; 200defm SPV_AMD_shader_ballot : ExtensionOperand<5>; 201defm SPV_AMD_gpu_shader_half_float : ExtensionOperand<6>; 202defm SPV_KHR_shader_draw_parameters : ExtensionOperand<7>; 203defm SPV_KHR_subgroup_vote : ExtensionOperand<8>; 204defm SPV_KHR_16bit_storage : ExtensionOperand<9>; 205defm SPV_KHR_device_group : ExtensionOperand<10>; 206defm SPV_KHR_multiview : ExtensionOperand<11>; 207defm SPV_NVX_multiview_per_view_attributes : ExtensionOperand<12>; 208defm SPV_NV_viewport_array2 : ExtensionOperand<13>; 209defm SPV_NV_stereo_view_rendering : ExtensionOperand<14>; 210defm SPV_NV_sample_mask_override_coverage : ExtensionOperand<15>; 211defm SPV_NV_geometry_shader_passthrough : ExtensionOperand<16>; 212defm SPV_AMD_texture_gather_bias_lod : ExtensionOperand<17>; 213defm SPV_KHR_storage_buffer_storage_class : ExtensionOperand<18>; 214defm SPV_KHR_variable_pointers : ExtensionOperand<19>; 215defm SPV_AMD_gpu_shader_int16 : ExtensionOperand<20>; 216defm SPV_KHR_post_depth_coverage : ExtensionOperand<21>; 217defm SPV_KHR_shader_atomic_counter_ops : ExtensionOperand<22>; 218defm SPV_EXT_shader_stencil_export : ExtensionOperand<23>; 219defm SPV_EXT_shader_viewport_index_layer : ExtensionOperand<24>; 220defm SPV_AMD_shader_image_load_store_lod : ExtensionOperand<25>; 221defm SPV_AMD_shader_fragment_mask : ExtensionOperand<26>; 222defm SPV_EXT_fragment_fully_covered : ExtensionOperand<27>; 223defm SPV_AMD_gpu_shader_half_float_fetch : ExtensionOperand<28>; 224defm SPV_GOOGLE_decorate_string : ExtensionOperand<29>; 225defm SPV_GOOGLE_hlsl_functionality1 : ExtensionOperand<30>; 226defm SPV_NV_shader_subgroup_partitioned : ExtensionOperand<31>; 227defm SPV_EXT_descriptor_indexing : ExtensionOperand<32>; 228defm SPV_KHR_8bit_storage : ExtensionOperand<33>; 229defm SPV_KHR_vulkan_memory_model : ExtensionOperand<34>; 230defm SPV_NV_ray_tracing : ExtensionOperand<35>; 231defm SPV_NV_compute_shader_derivatives : ExtensionOperand<36>; 232defm SPV_NV_fragment_shader_barycentric : ExtensionOperand<37>; 233defm SPV_NV_mesh_shader : ExtensionOperand<38>; 234defm SPV_NV_shader_image_footprint : ExtensionOperand<39>; 235defm SPV_NV_shading_rate : ExtensionOperand<40>; 236defm SPV_INTEL_subgroups : ExtensionOperand<41>; 237defm SPV_INTEL_media_block_io : ExtensionOperand<42>; 238defm SPV_EXT_fragment_invocation_density : ExtensionOperand<44>; 239defm SPV_KHR_no_integer_wrap_decoration : ExtensionOperand<45>; 240defm SPV_KHR_float_controls : ExtensionOperand<46>; 241defm SPV_EXT_physical_storage_buffer : ExtensionOperand<47>; 242defm SPV_INTEL_fpga_memory_attributes : ExtensionOperand<48>; 243defm SPV_NV_cooperative_matrix : ExtensionOperand<49>; 244defm SPV_INTEL_shader_integer_functions2 : ExtensionOperand<50>; 245defm SPV_INTEL_fpga_loop_controls : ExtensionOperand<51>; 246defm SPV_EXT_fragment_shader_interlock : ExtensionOperand<52>; 247defm SPV_NV_shader_sm_builtins : ExtensionOperand<53>; 248defm SPV_KHR_shader_clock : ExtensionOperand<54>; 249defm SPV_INTEL_unstructured_loop_controls : ExtensionOperand<55>; 250defm SPV_EXT_demote_to_helper_invocation : ExtensionOperand<56>; 251defm SPV_INTEL_fpga_reg : ExtensionOperand<57>; 252defm SPV_INTEL_blocking_pipes : ExtensionOperand<58>; 253defm SPV_GOOGLE_user_type : ExtensionOperand<59>; 254defm SPV_KHR_physical_storage_buffer : ExtensionOperand<60>; 255defm SPV_INTEL_kernel_attributes : ExtensionOperand<61>; 256defm SPV_KHR_non_semantic_info : ExtensionOperand<62>; 257defm SPV_INTEL_io_pipes : ExtensionOperand<63>; 258defm SPV_KHR_ray_tracing : ExtensionOperand<64>; 259defm SPV_KHR_ray_query : ExtensionOperand<65>; 260defm SPV_INTEL_fpga_memory_accesses : ExtensionOperand<66>; 261defm SPV_INTEL_arbitrary_precision_integers : ExtensionOperand<67>; 262defm SPV_EXT_shader_atomic_float_add : ExtensionOperand<68>; 263defm SPV_KHR_terminate_invocation : ExtensionOperand<69>; 264defm SPV_KHR_fragment_shading_rate : ExtensionOperand<70>; 265defm SPV_EXT_shader_image_int64 : ExtensionOperand<71>; 266defm SPV_INTEL_fp_fast_math_mode : ExtensionOperand<72>; 267defm SPV_INTEL_fpga_cluster_attributes : ExtensionOperand<73>; 268defm SPV_INTEL_loop_fuse : ExtensionOperand<74>; 269defm SPV_EXT_shader_atomic_float_min_max : ExtensionOperand<75>; 270defm SPV_KHR_workgroup_memory_explicit_layout : ExtensionOperand<76>; 271defm SPV_KHR_linkonce_odr : ExtensionOperand<77>; 272defm SPV_KHR_expect_assume : ExtensionOperand<78>; 273defm SPV_INTEL_fpga_dsp_control : ExtensionOperand<79>; 274defm SPV_NV_bindless_texture : ExtensionOperand<80>; 275defm SPV_INTEL_fpga_invocation_pipelining_attributes : ExtensionOperand<81>; 276defm SPV_KHR_subgroup_uniform_control_flow : ExtensionOperand<82>; 277defm SPV_HUAWEI_subpass_shading : ExtensionOperand<83>; 278defm SPV_KHR_integer_dot_product : ExtensionOperand<84>; 279defm SPV_EXT_shader_atomic_float16_add : ExtensionOperand<85>; 280defm SPV_INTEL_runtime_aligned : ExtensionOperand<86>; 281defm SPV_KHR_bit_instructions : ExtensionOperand<87>; 282defm SPV_NV_ray_tracing_motion_blur : ExtensionOperand<88>; 283defm SPV_KHR_uniform_group_instructions : ExtensionOperand<89>; 284defm SPV_KHR_subgroup_rotate : ExtensionOperand<90>; 285defm SPV_INTEL_split_barrier : ExtensionOperand<91>; 286defm SPV_KHR_ray_cull_mask : ExtensionOperand<92>; 287defm SPV_KHR_fragment_shader_barycentric : ExtensionOperand<93>; 288defm SPV_EXT_relaxed_printf_string_address_space : ExtensionOperand<94>; 289defm SPV_EXT_ycbcr_attachments : ExtensionOperand<95>; 290defm SPV_EXT_mesh_shader : ExtensionOperand<96>; 291defm SPV_ARM_core_builtins : ExtensionOperand<97>; 292defm SPV_EXT_opacity_micromap : ExtensionOperand<98>; 293defm SPV_NV_shader_invocation_reorder : ExtensionOperand<99>; 294defm SPV_INTEL_usm_storage_classes : ExtensionOperand<100>; 295defm SPV_INTEL_fpga_latency_control : ExtensionOperand<101>; 296defm SPV_INTEL_fpga_argument_interfaces : ExtensionOperand<102>; 297defm SPV_INTEL_optnone : ExtensionOperand<103>; 298 299//===----------------------------------------------------------------------===// 300// Multiclass used to define Capabilities enum values and at the same time 301// SymbolicOperand entries with string mnemonics, versioning, extensions, and 302// capabilities. 303//===----------------------------------------------------------------------===// 304 305def Capability : GenericEnum, Operand<i32> { 306 let FilterClass = "Capability"; 307 let NameField = "Name"; 308 let ValueField = "Value"; 309 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 310} 311 312class Capability<string name, bits<32> value> { 313 string Name = name; 314 bits<32> Value = value; 315} 316 317multiclass CapabilityOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 318 def NAME : Capability<NAME, value>; 319 defm : SymbolicOperandWithRequirements<CapabilityOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 320} 321 322defm Matrix : CapabilityOperand<0, 0, 0, [], []>; 323defm Shader : CapabilityOperand<1, 0, 0, [], [Matrix]>; 324defm Geometry : CapabilityOperand<2, 0, 0, [], [Shader]>; 325defm Tessellation : CapabilityOperand<3, 0, 0, [], [Shader]>; 326defm Addresses : CapabilityOperand<4, 0, 0, [], []>; 327defm Linkage : CapabilityOperand<5, 0, 0, [], []>; 328defm Kernel : CapabilityOperand<6, 0, 0, [], []>; 329defm Vector16 : CapabilityOperand<7, 0, 0, [], [Kernel]>; 330defm Float16Buffer : CapabilityOperand<8, 0, 0, [], [Kernel]>; 331defm Float16 : CapabilityOperand<9, 0, 0, [], []>; 332defm Float64 : CapabilityOperand<10, 0, 0, [], []>; 333defm Int64 : CapabilityOperand<11, 0, 0, [], []>; 334defm Int64Atomics : CapabilityOperand<12, 0, 0, [], [Int64]>; 335defm ImageBasic : CapabilityOperand<13, 0, 0, [], [Kernel]>; 336defm ImageReadWrite : CapabilityOperand<14, 0, 0, [], [ImageBasic]>; 337defm ImageMipmap : CapabilityOperand<15, 0, 0, [], [ImageBasic]>; 338defm Pipes : CapabilityOperand<17, 0, 0, [], [Kernel]>; 339defm Groups : CapabilityOperand<18, 0, 0, [], []>; 340defm DeviceEnqueue : CapabilityOperand<19, 0, 0, [], []>; 341defm LiteralSampler : CapabilityOperand<20, 0, 0, [], [Kernel]>; 342defm AtomicStorage : CapabilityOperand<21, 0, 0, [], [Shader]>; 343defm Int16 : CapabilityOperand<22, 0, 0, [], []>; 344defm TessellationPointSize : CapabilityOperand<23, 0, 0, [], [Tessellation]>; 345defm GeometryPointSize : CapabilityOperand<24, 0, 0, [], [Geometry]>; 346defm ImageGatherExtended : CapabilityOperand<25, 0, 0, [], [Shader]>; 347defm StorageImageMultisample : CapabilityOperand<27, 0, 0, [], [Shader]>; 348defm UniformBufferArrayDynamicIndexing : CapabilityOperand<28, 0, 0, [], [Shader]>; 349defm SampledImageArrayDymnamicIndexing : CapabilityOperand<29, 0, 0, [], [Shader]>; 350defm ClipDistance : CapabilityOperand<32, 0, 0, [], [Shader]>; 351defm CullDistance : CapabilityOperand<33, 0, 0, [], [Shader]>; 352defm SampleRateShading : CapabilityOperand<35, 0, 0, [], [Shader]>; 353defm SampledRect : CapabilityOperand<37, 0, 0, [], [Shader]>; 354defm ImageRect : CapabilityOperand<36, 0, 0, [], [SampledRect]>; 355defm GenericPointer : CapabilityOperand<38, 0, 0, [], [Addresses]>; 356defm Int8 : CapabilityOperand<39, 0, 0, [], []>; 357defm InputAttachment : CapabilityOperand<40, 0, 0, [], [Shader]>; 358defm SparseResidency : CapabilityOperand<41, 0, 0, [], [Shader]>; 359defm MinLod : CapabilityOperand<42, 0, 0, [], [Shader]>; 360defm Sampled1D : CapabilityOperand<43, 0, 0, [], []>; 361defm Image1D : CapabilityOperand<44, 0, 0, [], [Sampled1D]>; 362defm SampledCubeArray : CapabilityOperand<45, 0, 0, [], [Shader]>; 363defm ImageCubeArray : CapabilityOperand<34, 0, 0, [], [SampledCubeArray]>; 364defm SampledBuffer : CapabilityOperand<46, 0, 0, [], []>; 365defm ImageBuffer : CapabilityOperand<47, 0, 0, [], [SampledBuffer]>; 366defm ImageMSArray : CapabilityOperand<48, 0, 0, [], [Shader]>; 367defm StorageImageExtendedFormats : CapabilityOperand<49, 0, 0, [], [Shader]>; 368defm ImageQuery : CapabilityOperand<50, 0, 0, [], [Shader]>; 369defm DerivativeControl : CapabilityOperand<51, 0, 0, [], [Shader]>; 370defm InterpolationFunction : CapabilityOperand<52, 0, 0, [], [Shader]>; 371defm TransformFeedback : CapabilityOperand<53, 0, 0, [], [Shader]>; 372defm GeometryStreams : CapabilityOperand<54, 0, 0, [], [Geometry]>; 373defm StorageImageReadWithoutFormat : CapabilityOperand<55, 0, 0, [], [Shader]>; 374defm StorageImageWriteWithoutFormat : CapabilityOperand<56, 0, 0, [], [Shader]>; 375defm MultiViewport : CapabilityOperand<57, 0, 0, [], [Geometry]>; 376defm SubgroupDispatch : CapabilityOperand<58, 0x10100, 0, [], [DeviceEnqueue]>; 377defm NamedBarrier : CapabilityOperand<59, 0x10100, 0, [], [Kernel]>; 378defm PipeStorage : CapabilityOperand<60, 0x10100, 0, [], [Pipes]>; 379defm GroupNonUniform : CapabilityOperand<61, 0x10300, 0, [], []>; 380defm GroupNonUniformVote : CapabilityOperand<62, 0x10300, 0, [], [GroupNonUniform]>; 381defm GroupNonUniformArithmetic : CapabilityOperand<63, 0x10300, 0, [], [GroupNonUniform]>; 382defm GroupNonUniformBallot : CapabilityOperand<64, 0x10300, 0, [], [GroupNonUniform]>; 383defm GroupNonUniformShuffle : CapabilityOperand<65, 0x10300, 0, [], [GroupNonUniform]>; 384defm GroupNonUniformShuffleRelative : CapabilityOperand<66, 0x10300, 0, [], [GroupNonUniform]>; 385defm GroupNonUniformClustered : CapabilityOperand<67, 0x10300, 0, [], [GroupNonUniform]>; 386defm GroupNonUniformQuad : CapabilityOperand<68, 0x10300, 0, [], [GroupNonUniform]>; 387defm SubgroupBallotKHR : CapabilityOperand<4423, 0, 0, [SPV_KHR_shader_ballot], []>; 388defm DrawParameters : CapabilityOperand<4427, 0x10300, 0, [SPV_KHR_shader_draw_parameters], [Shader]>; 389defm SubgroupVoteKHR : CapabilityOperand<4431, 0, 0, [SPV_KHR_subgroup_vote], []>; 390defm StorageBuffer16BitAccess : CapabilityOperand<4433, 0x10300, 0, [SPV_KHR_16bit_storage], []>; 391defm StorageUniform16 : CapabilityOperand<4434, 0x10300, 0, [SPV_KHR_16bit_storage], [StorageBuffer16BitAccess]>; 392defm StoragePushConstant16 : CapabilityOperand<4435, 0x10300, 0, [SPV_KHR_16bit_storage], []>; 393defm StorageInputOutput16 : CapabilityOperand<4436, 0x10300, 0, [SPV_KHR_16bit_storage], []>; 394defm DeviceGroup : CapabilityOperand<4437, 0x10300, 0, [SPV_KHR_device_group], []>; 395defm MultiView : CapabilityOperand<4439, 0x10300, 0, [SPV_KHR_multiview], [Shader]>; 396defm VariablePointersStorageBuffer : CapabilityOperand<4441, 0x10300, 0, [SPV_KHR_variable_pointers], [Shader]>; 397defm VariablePointers : CapabilityOperand<4442, 0x10300, 0, [SPV_KHR_variable_pointers], [VariablePointersStorageBuffer]>; 398defm AtomicStorageOps : CapabilityOperand<4445, 0, 0, [SPV_KHR_shader_atomic_counter_ops], []>; 399defm SampleMaskPostDepthCoverage : CapabilityOperand<4447, 0, 0, [SPV_KHR_post_depth_coverage], []>; 400defm StorageBuffer8BitAccess : CapabilityOperand<4448, 0, 0, [SPV_KHR_8bit_storage], []>; 401defm UniformAndStorageBuffer8BitAccess : CapabilityOperand<4449, 0, 0, [SPV_KHR_8bit_storage], [StorageBuffer8BitAccess]>; 402defm StoragePushConstant8 : CapabilityOperand<4450, 0, 0, [SPV_KHR_8bit_storage], []>; 403defm DenormPreserve : CapabilityOperand<4464, 0x10400, 0, [SPV_KHR_float_controls], []>; 404defm DenormFlushToZero : CapabilityOperand<4465, 0x10400, 0, [SPV_KHR_float_controls], []>; 405defm SignedZeroInfNanPreserve : CapabilityOperand<4466, 0x10400, 0, [SPV_KHR_float_controls], []>; 406defm RoundingModeRTE : CapabilityOperand<4467, 0x10400, 0, [SPV_KHR_float_controls], []>; 407defm RoundingModeRTZ : CapabilityOperand<4468, 0x10400, 0, [SPV_KHR_float_controls], []>; 408defm Float16ImageAMD : CapabilityOperand<5008, 0, 0, [], [Shader]>; 409defm ImageGatherBiasLodAMD : CapabilityOperand<5009, 0, 0, [], [Shader]>; 410defm FragmentMaskAMD : CapabilityOperand<5010, 0, 0, [], [Shader]>; 411defm StencilExportEXT : CapabilityOperand<5013, 0, 0, [], [Shader]>; 412defm ImageReadWriteLodAMD : CapabilityOperand<5015, 0, 0, [], [Shader]>; 413defm SampleMaskOverrideCoverageNV : CapabilityOperand<5249, 0, 0, [], [SampleRateShading]>; 414defm GeometryShaderPassthroughNV : CapabilityOperand<5251, 0, 0, [], [Geometry]>; 415defm ShaderViewportIndexLayerEXT : CapabilityOperand<5254, 0, 0, [], [MultiViewport]>; 416defm ShaderViewportMaskNV : CapabilityOperand<5255, 0, 0, [], [ShaderViewportIndexLayerEXT]>; 417defm ShaderStereoViewNV : CapabilityOperand<5259, 0, 0, [], [ShaderViewportMaskNV]>; 418defm PerViewAttributesNV : CapabilityOperand<5260, 0, 0, [], [MultiView]>; 419defm FragmentFullyCoveredEXT : CapabilityOperand<5265, 0, 0, [], [Shader]>; 420defm MeshShadingNV : CapabilityOperand<5266, 0, 0, [], [Shader]>; 421defm ShaderNonUniformEXT : CapabilityOperand<5301, 0, 0, [], [Shader]>; 422defm RuntimeDescriptorArrayEXT : CapabilityOperand<5302, 0, 0, [], [Shader]>; 423defm InputAttachmentArrayDynamicIndexingEXT : CapabilityOperand<5303, 0, 0, [], [InputAttachment]>; 424defm UniformTexelBufferArrayDynamicIndexingEXT : CapabilityOperand<5304, 0, 0, [], [SampledBuffer]>; 425defm StorageTexelBufferArrayDynamicIndexingEXT : CapabilityOperand<5305, 0, 0, [], [ImageBuffer]>; 426defm UniformBufferArrayNonUniformIndexingEXT : CapabilityOperand<5306, 0, 0, [], [ShaderNonUniformEXT]>; 427defm SampledImageArrayNonUniformIndexingEXT : CapabilityOperand<5307, 0, 0, [], [ShaderNonUniformEXT]>; 428defm StorageBufferArrayNonUniformIndexingEXT : CapabilityOperand<5308, 0, 0, [], [ShaderNonUniformEXT]>; 429defm StorageImageArrayNonUniformIndexingEXT : CapabilityOperand<5309, 0, 0, [], [ShaderNonUniformEXT]>; 430defm InputAttachmentArrayNonUniformIndexingEXT : CapabilityOperand<5310, 0, 0, [], [InputAttachment, ShaderNonUniformEXT]>; 431defm UniformTexelBufferArrayNonUniformIndexingEXT : CapabilityOperand<5311, 0, 0, [], [SampledBuffer, ShaderNonUniformEXT]>; 432defm StorageTexelBufferArrayNonUniformIndexingEXT : CapabilityOperand<5312, 0, 0, [], [ImageBuffer, ShaderNonUniformEXT]>; 433defm RayTracingNV : CapabilityOperand<5340, 0, 0, [], [Shader]>; 434defm SubgroupShuffleINTEL : CapabilityOperand<5568, 0, 0, [], []>; 435defm SubgroupBufferBlockIOINTEL : CapabilityOperand<5569, 0, 0, [], []>; 436defm SubgroupImageBlockIOINTEL : CapabilityOperand<5570, 0, 0, [], []>; 437defm SubgroupImageMediaBlockIOINTEL : CapabilityOperand<5579, 0, 0, [], []>; 438defm SubgroupAvcMotionEstimationINTEL : CapabilityOperand<5696, 0, 0, [], []>; 439defm SubgroupAvcMotionEstimationIntraINTEL : CapabilityOperand<5697, 0, 0, [], []>; 440defm SubgroupAvcMotionEstimationChromaINTEL : CapabilityOperand<5698, 0, 0, [], []>; 441defm GroupNonUniformPartitionedNV : CapabilityOperand<5297, 0, 0, [], []>; 442defm VulkanMemoryModelKHR : CapabilityOperand<5345, 0, 0, [], []>; 443defm VulkanMemoryModelDeviceScopeKHR : CapabilityOperand<5346, 0, 0, [], []>; 444defm ImageFootprintNV : CapabilityOperand<5282, 0, 0, [], []>; 445defm FragmentBarycentricNV : CapabilityOperand<5284, 0, 0, [], []>; 446defm ComputeDerivativeGroupQuadsNV : CapabilityOperand<5288, 0, 0, [], []>; 447defm ComputeDerivativeGroupLinearNV : CapabilityOperand<5350, 0, 0, [], []>; 448defm FragmentDensityEXT : CapabilityOperand<5291, 0, 0, [], [Shader]>; 449defm PhysicalStorageBufferAddressesEXT : CapabilityOperand<5347, 0, 0, [], [Shader]>; 450defm CooperativeMatrixNV : CapabilityOperand<5357, 0, 0, [], [Shader]>; 451defm ArbitraryPrecisionIntegersINTEL : CapabilityOperand<5844, 0, 0, [SPV_INTEL_arbitrary_precision_integers], [Int8, Int16]>; 452defm OptNoneINTEL : CapabilityOperand<6094, 0, 0, [SPV_INTEL_optnone], []>; 453defm BitInstructions : CapabilityOperand<6025, 0, 0, [SPV_KHR_bit_instructions], []>; 454defm ExpectAssumeKHR : CapabilityOperand<5629, 0, 0, [SPV_KHR_expect_assume], []>; 455 456//===----------------------------------------------------------------------===// 457// Multiclass used to define SourceLanguage enum values and at the same time 458// SymbolicOperand entries. 459//===----------------------------------------------------------------------===// 460 461def SourceLanguage : GenericEnum, Operand<i32> { 462 let FilterClass = "SourceLanguage"; 463 let NameField = "Name"; 464 let ValueField = "Value"; 465 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 466} 467 468class SourceLanguage<string name, bits<32> value> { 469 string Name = name; 470 bits<32> Value = value; 471} 472 473multiclass SourceLanguageOperand<bits<32> value> { 474 def : SourceLanguage<NAME, value>; 475 defm : SymbolicOperandWithRequirements<SourceLanguageOperand, value, NAME, 0, 0, [], []>; 476} 477 478defm Unknown : SourceLanguageOperand<0>; 479defm ESSL : SourceLanguageOperand<1>; 480defm GLSL : SourceLanguageOperand<2>; 481defm OpenCL_C : SourceLanguageOperand<3>; 482defm OpenCL_CPP : SourceLanguageOperand<4>; 483defm HLSL : SourceLanguageOperand<5>; 484 485//===----------------------------------------------------------------------===// 486// Multiclass used to define AddressingModel enum values and at the same time 487// SymbolicOperand entries with string mnemonics, and capabilities. 488//===----------------------------------------------------------------------===// 489 490def AddressingModel : GenericEnum, Operand<i32> { 491 let FilterClass = "AddressingModel"; 492 let NameField = "Name"; 493 let ValueField = "Value"; 494 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 495} 496 497class AddressingModel<string name, bits<32> value> { 498 string Name = name; 499 bits<32> Value = value; 500} 501 502multiclass AddressingModelOperand<bits<32> value, list<Capability> reqCapabilities> { 503 def : AddressingModel<NAME, value>; 504 defm : SymbolicOperandWithRequirements<AddressingModelOperand, value, NAME, 0, 0, [], reqCapabilities>; 505} 506 507defm Logical : AddressingModelOperand<0, []>; 508defm Physical32 : AddressingModelOperand<1, [Addresses]>; 509defm Physical64 : AddressingModelOperand<2, [Addresses]>; 510defm PhysicalStorageBuffer64EXT : AddressingModelOperand<5348, [PhysicalStorageBufferAddressesEXT]>; 511 512//===----------------------------------------------------------------------===// 513// Multiclass used to define ExecutionModel enum values and at the same time 514// SymbolicOperand entries with string mnemonics and capabilities. 515//===----------------------------------------------------------------------===// 516 517def ExecutionModel : GenericEnum, Operand<i32> { 518 let FilterClass = "ExecutionModel"; 519 let NameField = "Name"; 520 let ValueField = "Value"; 521 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 522} 523 524class ExecutionModel<string name, bits<32> value> { 525 string Name = name; 526 bits<32> Value = value; 527} 528 529multiclass ExecutionModelOperand<bits<32> value, list<Capability> reqCapabilities> { 530 def : ExecutionModel<NAME, value>; 531 defm : SymbolicOperandWithRequirements<ExecutionModelOperand, value, NAME, 0, 0, [], reqCapabilities>; 532} 533 534defm Vertex : ExecutionModelOperand<0, [Shader]>; 535defm TessellationControl: ExecutionModelOperand<1, [Tessellation]>; 536defm TessellationEvaluation: ExecutionModelOperand<2, [Tessellation]>; 537defm Geometry: ExecutionModelOperand<3, [Geometry]>; 538defm Fragment: ExecutionModelOperand<4, [Shader]>; 539defm GLCompute: ExecutionModelOperand<5, [Shader]>; 540defm Kernel: ExecutionModelOperand<6, [Kernel]>; 541defm TaskNV: ExecutionModelOperand<5267, [MeshShadingNV]>; 542defm MeshNV: ExecutionModelOperand<5268, [MeshShadingNV]>; 543defm RayGenerationNV: ExecutionModelOperand<5313, [RayTracingNV]>; 544defm IntersectionNV: ExecutionModelOperand<5314, [RayTracingNV]>; 545defm AnyHitNV: ExecutionModelOperand<5315, [RayTracingNV]>; 546defm ClosestHitNV: ExecutionModelOperand<5316, [RayTracingNV]>; 547defm MissNV: ExecutionModelOperand<5317, [RayTracingNV]>; 548defm CallableNV: ExecutionModelOperand<5318, [RayTracingNV]>; 549 550//===----------------------------------------------------------------------===// 551// Multiclass used to define MemoryModel enum values and at the same time 552// SymbolicOperand entries with string mnemonics and capabilities. 553//===----------------------------------------------------------------------===// 554 555def MemoryModel : GenericEnum, Operand<i32> { 556 let FilterClass = "MemoryModel"; 557 let NameField = "Name"; 558 let ValueField = "Value"; 559 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 560} 561 562class MemoryModel<string name, bits<32> value> { 563 string Name = name; 564 bits<32> Value = value; 565} 566 567multiclass MemoryModelOperand<bits<32> value, list<Capability> reqCapabilities> { 568 def : MemoryModel<NAME, value>; 569 defm : SymbolicOperandWithRequirements<MemoryModelOperand, value, NAME, 0, 0, [], reqCapabilities>; 570} 571 572defm Simple : MemoryModelOperand<0, [Shader]>; 573defm GLSL450 : MemoryModelOperand<1, [Shader]>; 574defm OpenCL : MemoryModelOperand<2, [Kernel]>; 575defm VulkanKHR : MemoryModelOperand<3, [VulkanMemoryModelKHR]>; 576 577//===----------------------------------------------------------------------===// 578// Multiclass used to define ExecutionMode enum values and at the same time 579// SymbolicOperand entries with string mnemonics and capabilities. 580//===----------------------------------------------------------------------===// 581 582def ExecutionMode : GenericEnum, Operand<i32> { 583 let FilterClass = "ExecutionMode"; 584 let NameField = "Name"; 585 let ValueField = "Value"; 586 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 587} 588 589class ExecutionMode<string name, bits<32> value> { 590 string Name = name; 591 bits<32> Value = value; 592} 593 594multiclass ExecutionModeOperand<bits<32> value, list<Capability> reqCapabilities> { 595 def : ExecutionMode<NAME, value>; 596 defm : SymbolicOperandWithRequirements<ExecutionModeOperand, value, NAME, 0, 0, [], reqCapabilities>; 597} 598 599defm Invocations : ExecutionModeOperand<0, [Geometry]>; 600defm SpacingEqual : ExecutionModeOperand<1, [Tessellation]>; 601defm SpacingFractionalEven : ExecutionModeOperand<2, [Tessellation]>; 602defm SpacingFractionalOdd : ExecutionModeOperand<3, [Tessellation]>; 603defm VertexOrderCw : ExecutionModeOperand<4, [Tessellation]>; 604defm VertexOrderCcw : ExecutionModeOperand<5, [Tessellation]>; 605defm PixelCenterInteger : ExecutionModeOperand<6, [Shader]>; 606defm OriginUpperLeft : ExecutionModeOperand<7, [Shader]>; 607defm OriginLowerLeft : ExecutionModeOperand<8, [Shader]>; 608defm EarlyFragmentTests : ExecutionModeOperand<9, [Shader]>; 609defm PointMode : ExecutionModeOperand<10, [Tessellation]>; 610defm Xfb : ExecutionModeOperand<11, [TransformFeedback]>; 611defm DepthReplacing : ExecutionModeOperand<12, [Shader]>; 612defm DepthGreater : ExecutionModeOperand<14, [Shader]>; 613defm DepthLess : ExecutionModeOperand<15, [Shader]>; 614defm DepthUnchanged : ExecutionModeOperand<16, [Shader]>; 615defm LocalSize : ExecutionModeOperand<17, []>; 616defm LocalSizeHint : ExecutionModeOperand<18, [Kernel]>; 617defm InputPoints : ExecutionModeOperand<19, [Geometry]>; 618defm InputLines : ExecutionModeOperand<20, [Geometry]>; 619defm InputLinesAdjacency : ExecutionModeOperand<21, [Geometry]>; 620defm Triangles : ExecutionModeOperand<22, [Geometry]>; 621defm InputTrianglesAdjacency : ExecutionModeOperand<23, [Geometry]>; 622defm Quads : ExecutionModeOperand<24, [Tessellation]>; 623defm Isolines : ExecutionModeOperand<25, [Tessellation]>; 624defm OutputVertices : ExecutionModeOperand<26, [Geometry]>; 625defm OutputPoints : ExecutionModeOperand<27, [Geometry]>; 626defm OutputLineStrip : ExecutionModeOperand<28, [Geometry]>; 627defm OutputTriangleStrip : ExecutionModeOperand<29, [Geometry]>; 628defm VecTypeHint : ExecutionModeOperand<30, [Kernel]>; 629defm ContractionOff : ExecutionModeOperand<31, [Kernel]>; 630defm Initializer : ExecutionModeOperand<33, [Kernel]>; 631defm Finalizer : ExecutionModeOperand<34, [Kernel]>; 632defm SubgroupSize : ExecutionModeOperand<35, [SubgroupDispatch]>; 633defm SubgroupsPerWorkgroup : ExecutionModeOperand<36, [SubgroupDispatch]>; 634defm SubgroupsPerWorkgroupId : ExecutionModeOperand<37, [SubgroupDispatch]>; 635defm LocalSizeId : ExecutionModeOperand<38, []>; 636defm LocalSizeHintId : ExecutionModeOperand<39, [Kernel]>; 637defm PostDepthCoverage : ExecutionModeOperand<4446, [SampleMaskPostDepthCoverage]>; 638defm DenormPreserve : ExecutionModeOperand<4459, [DenormPreserve]>; 639defm DenormFlushToZero : ExecutionModeOperand<4460, [DenormFlushToZero]>; 640defm SignedZeroInfNanPreserve : ExecutionModeOperand<4461, [SignedZeroInfNanPreserve]>; 641defm RoundingModeRTE : ExecutionModeOperand<4462, [RoundingModeRTE]>; 642defm RoundingModeRTZ : ExecutionModeOperand<4463, [RoundingModeRTZ]>; 643defm StencilRefReplacingEXT : ExecutionModeOperand<5027, [StencilExportEXT]>; 644defm OutputLinesNV : ExecutionModeOperand<5269, [MeshShadingNV]>; 645defm DerivativeGroupQuadsNV : ExecutionModeOperand<5289, [ComputeDerivativeGroupQuadsNV]>; 646defm DerivativeGroupLinearNV : ExecutionModeOperand<5290, [ComputeDerivativeGroupLinearNV]>; 647defm OutputTrianglesNV : ExecutionModeOperand<5298, [MeshShadingNV]>; 648 649//===----------------------------------------------------------------------===// 650// Multiclass used to define StorageClass enum values and at the same time 651// SymbolicOperand entries with string mnemonics and capabilities. 652//===----------------------------------------------------------------------===// 653 654def StorageClass : GenericEnum, Operand<i32> { 655 let FilterClass = "StorageClass"; 656 let NameField = "Name"; 657 let ValueField = "Value"; 658 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 659} 660 661class StorageClass<string name, bits<32> value> { 662 string Name = name; 663 bits<32> Value = value; 664} 665 666multiclass StorageClassOperand<bits<32> value, list<Capability> reqCapabilities> { 667 def : StorageClass<NAME, value>; 668 defm : SymbolicOperandWithRequirements<StorageClassOperand, value, NAME, 0, 0, [], reqCapabilities>; 669} 670 671defm UniformConstant : StorageClassOperand<0, []>; 672defm Input : StorageClassOperand<1, []>; 673defm Uniform : StorageClassOperand<2, [Shader]>; 674defm Output : StorageClassOperand<3, [Shader]>; 675defm Workgroup : StorageClassOperand<4, []>; 676defm CrossWorkgroup : StorageClassOperand<5, []>; 677defm Private : StorageClassOperand<6, [Shader]>; 678defm Function : StorageClassOperand<7, []>; 679defm Generic : StorageClassOperand<8, [GenericPointer]>; 680defm PushConstant : StorageClassOperand<9, [Shader]>; 681defm AtomicCounter : StorageClassOperand<10, [AtomicStorage]>; 682defm Image : StorageClassOperand<11, []>; 683defm StorageBuffer : StorageClassOperand<12, [Shader]>; 684defm CallableDataNV : StorageClassOperand<5328, [RayTracingNV]>; 685defm IncomingCallableDataNV : StorageClassOperand<5329, [RayTracingNV]>; 686defm RayPayloadNV : StorageClassOperand<5338, [RayTracingNV]>; 687defm HitAttributeNV : StorageClassOperand<5339, [RayTracingNV]>; 688defm IncomingRayPayloadNV : StorageClassOperand<5342, [RayTracingNV]>; 689defm ShaderRecordBufferNV : StorageClassOperand<5343, [RayTracingNV]>; 690defm PhysicalStorageBufferEXT : StorageClassOperand<5349, [PhysicalStorageBufferAddressesEXT]>; 691 692//===----------------------------------------------------------------------===// 693// Multiclass used to define Dim enum values and at the same time 694// SymbolicOperand entries with string mnemonics and capabilities. 695//===----------------------------------------------------------------------===// 696 697def Dim : GenericEnum, Operand<i32> { 698 let FilterClass = "Dim"; 699 let NameField = "Name"; 700 let ValueField = "Value"; 701 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 702} 703 704class Dim<string name, bits<32> value> { 705 string Name = name; 706 bits<32> Value = value; 707} 708 709multiclass DimOperand<bits<32> value, string mnemonic, list<Capability> reqCapabilities> { 710 def NAME : Dim<NAME, value>; 711 defm : SymbolicOperandWithRequirements<DimOperand, value, mnemonic, 0, 0, [], reqCapabilities>; 712} 713 714defm DIM_1D : DimOperand<0, "1D", [Sampled1D, Image1D]>; 715defm DIM_2D : DimOperand<1, "2D", [Shader, Kernel, ImageMSArray]>; 716defm DIM_3D : DimOperand<2, "3D", []>; 717defm DIM_Cube : DimOperand<3, "Cube", [Shader, ImageCubeArray]>; 718defm DIM_Rect : DimOperand<4, "Rect", [SampledRect, ImageRect]>; 719defm DIM_Buffer : DimOperand<5, "Buffer", [SampledBuffer, ImageBuffer]>; 720defm DIM_SubpassData : DimOperand<6, "SubpassData", [InputAttachment]>; 721 722//===----------------------------------------------------------------------===// 723// Multiclass used to define SamplerAddressingMode enum values and at the same 724// time SymbolicOperand entries with string mnemonics and capabilities. 725//===----------------------------------------------------------------------===// 726 727def SamplerAddressingMode : GenericEnum, Operand<i32> { 728 let FilterClass = "SamplerAddressingMode"; 729 let NameField = "Name"; 730 let ValueField = "Value"; 731 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 732} 733 734class SamplerAddressingMode<string name, bits<32> value> { 735 string Name = name; 736 bits<32> Value = value; 737} 738 739multiclass SamplerAddressingModeOperand<bits<32> value, list<Capability> reqCapabilities> { 740 def : SamplerAddressingMode<NAME, value>; 741 defm : SymbolicOperandWithRequirements<SamplerAddressingModeOperand, value, NAME, 0, 0, [], reqCapabilities>; 742} 743 744defm None : SamplerAddressingModeOperand<0, [Kernel]>; 745defm ClampToEdge : SamplerAddressingModeOperand<1, [Kernel]>; 746defm Clamp : SamplerAddressingModeOperand<2, [Kernel]>; 747defm Repeat : SamplerAddressingModeOperand<3, [Kernel]>; 748defm RepeatMirrored : SamplerAddressingModeOperand<4, [Kernel]>; 749 750//===----------------------------------------------------------------------===// 751// Multiclass used to define SamplerFilterMode enum values and at the same 752// time SymbolicOperand entries with string mnemonics and capabilities. 753//===----------------------------------------------------------------------===// 754 755def SamplerFilterMode : GenericEnum, Operand<i32> { 756 let FilterClass = "SamplerFilterMode"; 757 let NameField = "Name"; 758 let ValueField = "Value"; 759 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 760} 761 762class SamplerFilterMode<string name, bits<32> value> { 763 string Name = name; 764 bits<32> Value = value; 765} 766 767multiclass SamplerFilterModeOperand<bits<32> value, list<Capability> reqCapabilities> { 768 def : SamplerFilterMode<NAME, value>; 769 defm : SymbolicOperandWithRequirements<SamplerFilterModeOperand, value, NAME, 0, 0, [], reqCapabilities>; 770} 771 772defm Nearest : SamplerFilterModeOperand<0, [Kernel]>; 773defm Linear : SamplerFilterModeOperand<1, [Kernel]>; 774 775//===----------------------------------------------------------------------===// 776// Multiclass used to define ImageFormat enum values and at the same time 777// SymbolicOperand entries with string mnemonics and capabilities. 778//===----------------------------------------------------------------------===// 779 780def ImageFormat : GenericEnum, Operand<i32> { 781 let FilterClass = "ImageFormat"; 782 let NameField = "Name"; 783 let ValueField = "Value"; 784 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 785} 786 787class ImageFormat<string name, bits<32> value> { 788 string Name = name; 789 bits<32> Value = value; 790} 791 792multiclass ImageFormatOperand<bits<32> value, list<Capability> reqCapabilities> { 793 def NAME : ImageFormat<NAME, value>; 794 defm : SymbolicOperandWithRequirements<ImageFormatOperand, value, NAME, 0, 0, [], reqCapabilities>; 795} 796 797defm Unknown : ImageFormatOperand<0, []>; 798defm Rgba32f : ImageFormatOperand<1, [Shader]>; 799defm Rgba16f : ImageFormatOperand<2, [Shader]>; 800defm R32f : ImageFormatOperand<3, [Shader]>; 801defm Rgba8 : ImageFormatOperand<4, [Shader]>; 802defm Rgba8Snorm : ImageFormatOperand<5, [Shader]>; 803defm Rg32f : ImageFormatOperand<6, [StorageImageExtendedFormats]>; 804defm Rg16f : ImageFormatOperand<7, [StorageImageExtendedFormats]>; 805defm R11fG11fB10f : ImageFormatOperand<8, [StorageImageExtendedFormats]>; 806defm R16f : ImageFormatOperand<9, [StorageImageExtendedFormats]>; 807defm Rgba16 : ImageFormatOperand<10, [StorageImageExtendedFormats]>; 808defm Rgb10A2 : ImageFormatOperand<11, [StorageImageExtendedFormats]>; 809defm Rg16 : ImageFormatOperand<12, [StorageImageExtendedFormats]>; 810defm Rg8 : ImageFormatOperand<13, [StorageImageExtendedFormats]>; 811defm R16 : ImageFormatOperand<14, [StorageImageExtendedFormats]>; 812defm R8 : ImageFormatOperand<15, [StorageImageExtendedFormats]>; 813defm Rgba16Snorm : ImageFormatOperand<16, [StorageImageExtendedFormats]>; 814defm Rg16Snorm : ImageFormatOperand<17, [StorageImageExtendedFormats]>; 815defm Rg8Snorm : ImageFormatOperand<18, [StorageImageExtendedFormats]>; 816defm R16Snorm : ImageFormatOperand<19, [StorageImageExtendedFormats]>; 817defm R8Snorm : ImageFormatOperand<20, [StorageImageExtendedFormats]>; 818defm Rgba32i : ImageFormatOperand<21, [Shader]>; 819defm Rgba16i : ImageFormatOperand<22, [Shader]>; 820defm Rgba8i : ImageFormatOperand<23, [Shader]>; 821defm R32i : ImageFormatOperand<24, [Shader]>; 822defm Rg32i : ImageFormatOperand<25, [StorageImageExtendedFormats]>; 823defm Rg16i : ImageFormatOperand<26, [StorageImageExtendedFormats]>; 824defm Rg8i : ImageFormatOperand<27, [StorageImageExtendedFormats]>; 825defm R16i : ImageFormatOperand<28, [StorageImageExtendedFormats]>; 826defm R8i : ImageFormatOperand<29, [StorageImageExtendedFormats]>; 827defm Rgba32ui : ImageFormatOperand<30, [Shader]>; 828defm Rgba16ui : ImageFormatOperand<31, [Shader]>; 829defm Rgba8ui : ImageFormatOperand<32, [Shader]>; 830defm R32ui : ImageFormatOperand<33, [Shader]>; 831defm Rgb10a2ui : ImageFormatOperand<34, [StorageImageExtendedFormats]>; 832defm Rg32ui : ImageFormatOperand<35, [StorageImageExtendedFormats]>; 833defm Rg16ui : ImageFormatOperand<36, [StorageImageExtendedFormats]>; 834defm Rg8ui : ImageFormatOperand<37, [StorageImageExtendedFormats]>; 835defm R16ui : ImageFormatOperand<38, [StorageImageExtendedFormats]>; 836defm R8ui : ImageFormatOperand<39, [StorageImageExtendedFormats]>; 837 838//===----------------------------------------------------------------------===// 839// Multiclass used to define ImageChannelOrder enum values and at the same time 840// SymbolicOperand entries with string mnemonics and capabilities. 841//===----------------------------------------------------------------------===// 842 843def ImageChannelOrder : GenericEnum, Operand<i32> { 844 let FilterClass = "ImageChannelOrder"; 845 let NameField = "Name"; 846 let ValueField = "Value"; 847 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 848} 849 850class ImageChannelOrder<string name, bits<32> value> { 851 string Name = name; 852 bits<32> Value = value; 853} 854 855multiclass ImageChannelOrderOperand<bits<32> value, list<Capability> reqCapabilities> { 856 def : ImageChannelOrder<NAME, value>; 857 defm : SymbolicOperandWithRequirements<ImageChannelOrderOperand, value, NAME, 0, 0, [], reqCapabilities>; 858} 859 860defm R : ImageChannelOrderOperand<0, [Kernel]>; 861defm A : ImageChannelOrderOperand<1, [Kernel]>; 862defm RG : ImageChannelOrderOperand<2, [Kernel]>; 863defm RA : ImageChannelOrderOperand<3, [Kernel]>; 864defm RGB : ImageChannelOrderOperand<4, [Kernel]>; 865defm RGBA : ImageChannelOrderOperand<5, [Kernel]>; 866defm BGRA : ImageChannelOrderOperand<6, [Kernel]>; 867defm ARGB : ImageChannelOrderOperand<7, [Kernel]>; 868defm Intensity : ImageChannelOrderOperand<8, [Kernel]>; 869defm Luminance : ImageChannelOrderOperand<9, [Kernel]>; 870defm Rx : ImageChannelOrderOperand<10, [Kernel]>; 871defm RGx : ImageChannelOrderOperand<11, [Kernel]>; 872defm RGBx : ImageChannelOrderOperand<12, [Kernel]>; 873defm Depth : ImageChannelOrderOperand<13, [Kernel]>; 874defm DepthStencil : ImageChannelOrderOperand<14, [Kernel]>; 875defm sRGB : ImageChannelOrderOperand<15, [Kernel]>; 876defm sRGBx : ImageChannelOrderOperand<16, [Kernel]>; 877defm sRGBA : ImageChannelOrderOperand<17, [Kernel]>; 878defm sBGRA : ImageChannelOrderOperand<18, [Kernel]>; 879defm ABGR : ImageChannelOrderOperand<19, [Kernel]>; 880 881//===----------------------------------------------------------------------===// 882// Multiclass used to define ImageChannelDataType enum values and at the same 883// time SymbolicOperand entries with string mnemonics and capabilities. 884//===----------------------------------------------------------------------===// 885 886def ImageChannelDataType : GenericEnum, Operand<i32> { 887 let FilterClass = "ImageChannelDataType"; 888 let NameField = "Name"; 889 let ValueField = "Value"; 890 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 891} 892 893class ImageChannelDataType<string name, bits<32> value> { 894 string Name = name; 895 bits<32> Value = value; 896} 897 898multiclass ImageChannelDataTypeOperand<bits<32> value, list<Capability> reqCapabilities> { 899 def : ImageChannelDataType<NAME, value>; 900 defm : SymbolicOperandWithRequirements<ImageChannelDataTypeOperand, value, NAME, 0, 0, [], reqCapabilities>; 901} 902 903defm SnormInt8 : ImageChannelDataTypeOperand<0, []>; 904defm SnormInt16 : ImageChannelDataTypeOperand<1, []>; 905defm UnormInt8 : ImageChannelDataTypeOperand<2, [Kernel]>; 906defm UnormInt16 : ImageChannelDataTypeOperand<3, [Kernel]>; 907defm UnormShort565 : ImageChannelDataTypeOperand<4, [Kernel]>; 908defm UnormShort555 : ImageChannelDataTypeOperand<5, [Kernel]>; 909defm UnormInt101010 : ImageChannelDataTypeOperand<6, [Kernel]>; 910defm SignedInt8 : ImageChannelDataTypeOperand<7, [Kernel]>; 911defm SignedInt16 : ImageChannelDataTypeOperand<8, [Kernel]>; 912defm SignedInt32 : ImageChannelDataTypeOperand<9, [Kernel]>; 913defm UnsignedInt8 : ImageChannelDataTypeOperand<10, [Kernel]>; 914defm UnsignedInt16 : ImageChannelDataTypeOperand<11, [Kernel]>; 915defm UnsigendInt32 : ImageChannelDataTypeOperand<12, [Kernel]>; 916defm HalfFloat : ImageChannelDataTypeOperand<13, [Kernel]>; 917defm Float : ImageChannelDataTypeOperand<14, [Kernel]>; 918defm UnormInt24 : ImageChannelDataTypeOperand<15, [Kernel]>; 919defm UnormInt101010_2 : ImageChannelDataTypeOperand<16, [Kernel]>; 920 921//===----------------------------------------------------------------------===// 922// Multiclass used to define ImageOperand enum values and at the same time 923// SymbolicOperand entries with string mnemonics and capabilities. 924//===----------------------------------------------------------------------===// 925 926def ImageOperand : GenericEnum, Operand<i32> { 927 let FilterClass = "ImageOperand"; 928 let NameField = "Name"; 929 let ValueField = "Value"; 930 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 931} 932 933class ImageOperand<string name, bits<32> value> { 934 string Name = name; 935 bits<32> Value = value; 936} 937 938multiclass ImageOperandOperand<bits<32> value, list<Capability> reqCapabilities> { 939 def : ImageOperand<NAME, value>; 940 defm : SymbolicOperandWithRequirements<ImageOperandOperand, value, NAME, 0, 0, [], reqCapabilities>; 941} 942 943defm None : ImageOperandOperand<0x0, []>; 944defm Bias : ImageOperandOperand<0x1, [Shader]>; 945defm Lod : ImageOperandOperand<0x2, []>; 946defm Grad : ImageOperandOperand<0x4, []>; 947defm ConstOffset : ImageOperandOperand<0x8, []>; 948defm Offset : ImageOperandOperand<0x10, [ImageGatherExtended]>; 949defm ConstOffsets : ImageOperandOperand<0x20, [ImageGatherExtended]>; 950defm Sample : ImageOperandOperand<0x40, []>; 951defm MinLod : ImageOperandOperand<0x80, [MinLod]>; 952defm MakeTexelAvailableKHR : ImageOperandOperand<0x100, [VulkanMemoryModelKHR]>; 953defm MakeTexelVisibleKHR : ImageOperandOperand<0x200, [VulkanMemoryModelKHR]>; 954defm NonPrivateTexelKHR : ImageOperandOperand<0x400, [VulkanMemoryModelKHR]>; 955defm VolatileTexelKHR : ImageOperandOperand<0x800, [VulkanMemoryModelKHR]>; 956defm SignExtend : ImageOperandOperand<0x1000, []>; 957defm ZeroExtend : ImageOperandOperand<0x2000, []>; 958 959//===----------------------------------------------------------------------===// 960// Multiclass used to define FPFastMathMode enum values and at the same time 961// SymbolicOperand entries with string mnemonics and capabilities. 962//===----------------------------------------------------------------------===// 963 964def FPFastMathMode : GenericEnum, Operand<i32> { 965 let FilterClass = "FPFastMathMode"; 966 let NameField = "Name"; 967 let ValueField = "Value"; 968 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 969} 970 971class FPFastMathMode<string name, bits<32> value> { 972 string Name = name; 973 bits<32> Value = value; 974} 975 976multiclass FPFastMathModeOperand<bits<32> value, list<Capability> reqCapabilities> { 977 def : FPFastMathMode<NAME, value>; 978 defm : SymbolicOperandWithRequirements<FPFastMathModeOperand, value, NAME, 0, 0, [], reqCapabilities>; 979} 980 981defm None : FPFastMathModeOperand<0x0, []>; 982defm NotNaN : FPFastMathModeOperand<0x1, [Kernel]>; 983defm NotInf : FPFastMathModeOperand<0x2, [Kernel]>; 984defm NSZ : FPFastMathModeOperand<0x4, [Kernel]>; 985defm AllowRecip : FPFastMathModeOperand<0x8, [Kernel]>; 986defm Fast : FPFastMathModeOperand<0x10, [Kernel]>; 987 988//===----------------------------------------------------------------------===// 989// Multiclass used to define FPRoundingMode enum values and at the same time 990// SymbolicOperand entries with string mnemonics. 991//===----------------------------------------------------------------------===// 992 993def FPRoundingMode : GenericEnum, Operand<i32> { 994 let FilterClass = "FPRoundingMode"; 995 let NameField = "Name"; 996 let ValueField = "Value"; 997 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 998} 999 1000class FPRoundingMode<string name, bits<32> value> { 1001 string Name = name; 1002 bits<32> Value = value; 1003} 1004 1005multiclass FPRoundingModeOperand<bits<32> value> { 1006 def NAME : FPRoundingMode<NAME, value>; 1007 defm : SymbolicOperandWithRequirements<FPRoundingModeOperand, value, NAME, 0, 0, [], []>; 1008} 1009 1010defm RTE : FPRoundingModeOperand<0>; 1011defm RTZ : FPRoundingModeOperand<1>; 1012defm RTP : FPRoundingModeOperand<2>; 1013defm RTN : FPRoundingModeOperand<3>; 1014 1015//===----------------------------------------------------------------------===// 1016// Multiclass used to define LinkageType enum values and at the same time 1017// SymbolicOperand entries with string mnemonics and capabilities. 1018//===----------------------------------------------------------------------===// 1019 1020def LinkageType : GenericEnum, Operand<i32> { 1021 let FilterClass = "LinkageType"; 1022 let NameField = "Name"; 1023 let ValueField = "Value"; 1024 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1025} 1026 1027class LinkageType<string name, bits<32> value> { 1028 string Name = name; 1029 bits<32> Value = value; 1030} 1031 1032multiclass LinkageTypeOperand<bits<32> value, list<Capability> reqCapabilities> { 1033 def : LinkageType<NAME, value>; 1034 defm : SymbolicOperandWithRequirements<LinkageTypeOperand, value, NAME, 0, 0, [], reqCapabilities>; 1035} 1036 1037defm Export : LinkageTypeOperand<0, [Linkage]>; 1038defm Import : LinkageTypeOperand<1, [Linkage]>; 1039 1040//===----------------------------------------------------------------------===// 1041// Multiclass used to define AccessQualifier enum values and at the same time 1042// SymbolicOperand entries with string mnemonics and capabilities. 1043//===----------------------------------------------------------------------===// 1044 1045def AccessQualifier : GenericEnum, Operand<i32> { 1046 let FilterClass = "AccessQualifier"; 1047 let NameField = "Name"; 1048 let ValueField = "Value"; 1049 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1050} 1051 1052class AccessQualifier<string name, bits<32> value> { 1053 string Name = name; 1054 bits<32> Value = value; 1055} 1056 1057multiclass AccessQualifierOperand<bits<32> value, list<Capability> reqCapabilities> { 1058 def NAME : AccessQualifier<NAME, value>; 1059 defm : SymbolicOperandWithRequirements<AccessQualifierOperand, value, NAME, 0, 0, [], reqCapabilities>; 1060} 1061 1062defm ReadOnly : AccessQualifierOperand<0, [Kernel]>; 1063defm WriteOnly : AccessQualifierOperand<1, [Kernel]>; 1064defm ReadWrite : AccessQualifierOperand<2, [Kernel]>; 1065 1066//===----------------------------------------------------------------------===// 1067// Multiclass used to define FunctionParameterAttribute enum values and at the 1068// same time SymbolicOperand entries with string mnemonics and capabilities. 1069//===----------------------------------------------------------------------===// 1070 1071def FunctionParameterAttribute : GenericEnum, Operand<i32> { 1072 let FilterClass = "FunctionParameterAttribute"; 1073 let NameField = "Name"; 1074 let ValueField = "Value"; 1075 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1076} 1077 1078class FunctionParameterAttribute<string name, bits<32> value> { 1079 string Name = name; 1080 bits<32> Value = value; 1081} 1082 1083multiclass FunctionParameterAttributeOperand<bits<32> value, list<Capability> reqCapabilities> { 1084 def : FunctionParameterAttribute<NAME, value>; 1085 defm : SymbolicOperandWithRequirements<FunctionParameterAttributeOperand, value, NAME, 0, 0, [], reqCapabilities>; 1086} 1087 1088defm Zext : FunctionParameterAttributeOperand<0, [Kernel]>; 1089defm Sext : FunctionParameterAttributeOperand<1, [Kernel]>; 1090defm ByVal : FunctionParameterAttributeOperand<2, [Kernel]>; 1091defm Sret : FunctionParameterAttributeOperand<3, [Kernel]>; 1092defm NoAlias : FunctionParameterAttributeOperand<4, [Kernel]>; 1093defm NoCapture : FunctionParameterAttributeOperand<5, [Kernel]>; 1094defm NoWrite : FunctionParameterAttributeOperand<6, [Kernel]>; 1095defm NoReadWrite : FunctionParameterAttributeOperand<7, [Kernel]>; 1096 1097//===----------------------------------------------------------------------===// 1098// Multiclass used to define Decoration enum values and at the same time 1099// SymbolicOperand entries with string mnemonics, versioning, extensions and 1100// capabilities. 1101//===----------------------------------------------------------------------===// 1102 1103def Decoration : GenericEnum, Operand<i32> { 1104 let FilterClass = "Decoration"; 1105 let NameField = "Name"; 1106 let ValueField = "Value"; 1107 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1108} 1109 1110class Decoration<string name, bits<32> value> { 1111 string Name = name; 1112 bits<32> Value = value; 1113} 1114 1115multiclass DecorationOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1116 def : Decoration<NAME, value>; 1117 defm : SymbolicOperandWithRequirements<DecorationOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1118} 1119 1120defm RelaxedPrecision : DecorationOperand<0, 0, 0, [], [Shader]>; 1121defm SpecId : DecorationOperand<1, 0, 0, [], [Shader, Kernel]>; 1122defm Block : DecorationOperand<2, 0, 0, [], [Shader]>; 1123defm BufferBlock : DecorationOperand<3, 0, 0, [], [Shader]>; 1124defm RowMajor : DecorationOperand<4, 0, 0, [], [Matrix]>; 1125defm ColMajor : DecorationOperand<5, 0, 0, [], [Matrix]>; 1126defm ArrayStride : DecorationOperand<6, 0, 0, [], [Shader]>; 1127defm MatrixStride : DecorationOperand<7, 0, 0, [], [Matrix]>; 1128defm GLSLShared : DecorationOperand<8, 0, 0, [], [Shader]>; 1129defm GLSLPacked : DecorationOperand<9, 0, 0, [], [Shader]>; 1130defm CPacked : DecorationOperand<10, 0, 0, [], [Kernel]>; 1131defm BuiltIn : DecorationOperand<11, 0, 0, [], []>; 1132defm NoPerspective : DecorationOperand<13, 0, 0, [], [Shader]>; 1133defm Flat : DecorationOperand<14, 0, 0, [], [Shader]>; 1134defm Patch : DecorationOperand<15, 0, 0, [], [Tessellation]>; 1135defm Centroid : DecorationOperand<16, 0, 0, [], [Shader]>; 1136defm Sample : DecorationOperand<17, 0, 0, [], [SampleRateShading]>; 1137defm Invariant : DecorationOperand<18, 0, 0, [], [Shader]>; 1138defm Restrict : DecorationOperand<19, 0, 0, [], []>; 1139defm Aliased : DecorationOperand<20, 0, 0, [], []>; 1140defm Volatile : DecorationOperand<21, 0, 0, [], []>; 1141defm Constant : DecorationOperand<22, 0, 0, [], [Kernel]>; 1142defm Coherent : DecorationOperand<23, 0, 0, [], []>; 1143defm NonWritable : DecorationOperand<24, 0, 0, [], []>; 1144defm NonReadable : DecorationOperand<25, 0, 0, [], []>; 1145defm Uniform : DecorationOperand<26, 0, 0, [], [Shader]>; 1146defm UniformId : DecorationOperand<27, 0, 0, [], [Shader]>; 1147defm SaturatedConversion : DecorationOperand<28, 0, 0, [], [Kernel]>; 1148defm Stream : DecorationOperand<29, 0, 0, [], [GeometryStreams]>; 1149defm Location : DecorationOperand<30, 0, 0, [], [Shader]>; 1150defm Component : DecorationOperand<31, 0, 0, [], [Shader]>; 1151defm Index : DecorationOperand<32, 0, 0, [], [Shader]>; 1152defm Binding : DecorationOperand<33, 0, 0, [], [Shader]>; 1153defm DescriptorSet : DecorationOperand<34, 0, 0, [], [Shader]>; 1154defm Offset : DecorationOperand<35, 0, 0, [], [Shader]>; 1155defm XfbBuffer : DecorationOperand<36, 0, 0, [], [TransformFeedback]>; 1156defm XfbStride : DecorationOperand<37, 0, 0, [], [TransformFeedback]>; 1157defm FuncParamAttr : DecorationOperand<38, 0, 0, [], [Kernel]>; 1158defm FPRoundingMode : DecorationOperand<39, 0, 0, [], []>; 1159defm FPFastMathMode : DecorationOperand<40, 0, 0, [], [Kernel]>; 1160defm LinkageAttributes : DecorationOperand<41, 0, 0, [], [Linkage]>; 1161defm NoContraction : DecorationOperand<42, 0, 0, [], [Shader]>; 1162defm InputAttachmentIndex : DecorationOperand<43, 0, 0, [], [InputAttachment]>; 1163defm Alignment : DecorationOperand<44, 0, 0, [], [Kernel]>; 1164defm MaxByteOffset : DecorationOperand<45, 0, 0, [], [Addresses]>; 1165defm AlignmentId : DecorationOperand<46, 0, 0, [], [Kernel]>; 1166defm MaxByteOffsetId : DecorationOperand<47, 0, 0, [], [Addresses]>; 1167defm NoSignedWrap : DecorationOperand<4469, 0x10400, 0, [SPV_KHR_no_integer_wrap_decoration], []>; 1168defm NoUnsignedWrap : DecorationOperand<4470, 0x10400, 0, [SPV_KHR_no_integer_wrap_decoration], []>; 1169defm ExplicitInterpAMD : DecorationOperand<4999, 0, 0, [], []>; 1170defm OverrideCoverageNV : DecorationOperand<5248, 0, 0, [], [SampleMaskOverrideCoverageNV]>; 1171defm PassthroughNV : DecorationOperand<5250, 0, 0, [], [GeometryShaderPassthroughNV]>; 1172defm ViewportRelativeNV : DecorationOperand<5252, 0, 0, [], [ShaderViewportMaskNV]>; 1173defm SecondaryViewportRelativeNV : DecorationOperand<5256, 0, 0, [], [ShaderStereoViewNV]>; 1174defm PerPrimitiveNV : DecorationOperand<5271, 0, 0, [], [MeshShadingNV]>; 1175defm PerViewNV : DecorationOperand<5272, 0, 0, [], [MeshShadingNV]>; 1176defm PerVertexNV : DecorationOperand<5273, 0, 0, [], [FragmentBarycentricNV]>; 1177defm NonUniformEXT : DecorationOperand<5300, 0, 0, [], [ShaderNonUniformEXT]>; 1178defm CountBuffer : DecorationOperand<5634, 0, 0, [], []>; 1179defm UserSemantic : DecorationOperand<5635, 0, 0, [], []>; 1180defm RestrictPointerEXT : DecorationOperand<5355, 0, 0, [], [PhysicalStorageBufferAddressesEXT]>; 1181defm AliasedPointerEXT : DecorationOperand<5356, 0, 0, [], [PhysicalStorageBufferAddressesEXT]>; 1182 1183//===----------------------------------------------------------------------===// 1184// Multiclass used to define BuiltIn enum values and at the same time 1185// SymbolicOperand entries with string mnemonics, versioning, extensions and 1186// capabilities. 1187//===----------------------------------------------------------------------===// 1188 1189def BuiltIn : GenericEnum, Operand<i32> { 1190 let FilterClass = "BuiltIn"; 1191 let NameField = "Name"; 1192 let ValueField = "Value"; 1193 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1194} 1195 1196class BuiltIn<string name, bits<32> value> { 1197 string Name = name; 1198 bits<32> Value = value; 1199} 1200 1201multiclass BuiltInOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1202 def NAME : BuiltIn<NAME, value>; 1203 defm : SymbolicOperandWithRequirements<BuiltInOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1204} 1205 1206defm Position : BuiltInOperand<0, 0, 0, [], [Shader]>; 1207defm PointSize : BuiltInOperand<1, 0, 0, [], [Shader]>; 1208defm ClipDistanceVariable : BuiltInOperand<3, 0, 0, [], [ClipDistance]>; 1209defm CullDistanceVariable : BuiltInOperand<4, 0, 0, [], [CullDistance]>; 1210defm VertexId : BuiltInOperand<5, 0, 0, [], [Shader]>; 1211defm InstanceId : BuiltInOperand<6, 0, 0, [], [Shader]>; 1212defm PrimitiveId : BuiltInOperand<7, 0, 0, [], [Geometry, Tessellation, RayTracingNV]>; 1213defm InvocationId : BuiltInOperand<8, 0, 0, [], [Geometry, Tessellation]>; 1214defm Layer : BuiltInOperand<9, 0, 0, [], [Geometry]>; 1215defm ViewportIndex : BuiltInOperand<10, 0, 0, [], [MultiViewport]>; 1216defm TessLevelOuter : BuiltInOperand<11, 0, 0, [], [Tessellation]>; 1217defm TessLevelInner : BuiltInOperand<12, 0, 0, [], [Tessellation]>; 1218defm TessCoord : BuiltInOperand<13, 0, 0, [], [Tessellation]>; 1219defm PatchVertices : BuiltInOperand<14, 0, 0, [], [Tessellation]>; 1220defm FragCoord : BuiltInOperand<15, 0, 0, [], [Shader]>; 1221defm PointCoord : BuiltInOperand<16, 0, 0, [], [Shader]>; 1222defm FrontFacing : BuiltInOperand<17, 0, 0, [], [Shader]>; 1223defm SampleId : BuiltInOperand<18, 0, 0, [], [SampleRateShading]>; 1224defm SamplePosition : BuiltInOperand<19, 0, 0, [], [SampleRateShading]>; 1225defm SampleMask : BuiltInOperand<20, 0, 0, [], [Shader]>; 1226defm FragDepth : BuiltInOperand<22, 0, 0, [], [Shader]>; 1227defm HelperInvocation : BuiltInOperand<23, 0, 0, [], [Shader]>; 1228defm NumWorkgroups : BuiltInOperand<24, 0, 0, [], []>; 1229defm WorkgroupSize : BuiltInOperand<25, 0, 0, [], []>; 1230defm WorkgroupId : BuiltInOperand<26, 0, 0, [], []>; 1231defm LocalInvocationId : BuiltInOperand<27, 0, 0, [], []>; 1232defm GlobalInvocationId : BuiltInOperand<28, 0, 0, [], []>; 1233defm LocalInvocationIndex : BuiltInOperand<29, 0, 0, [], []>; 1234defm WorkDim : BuiltInOperand<30, 0, 0, [], [Kernel]>; 1235defm GlobalSize : BuiltInOperand<31, 0, 0, [], [Kernel]>; 1236defm EnqueuedWorkgroupSize : BuiltInOperand<32, 0, 0, [], [Kernel]>; 1237defm GlobalOffset : BuiltInOperand<33, 0, 0, [], [Kernel]>; 1238defm GlobalLinearId : BuiltInOperand<34, 0, 0, [], [Kernel]>; 1239defm SubgroupSize : BuiltInOperand<36, 0, 0, [], [Kernel, GroupNonUniform, SubgroupBallotKHR]>; 1240defm SubgroupMaxSize : BuiltInOperand<37, 0, 0, [], [Kernel]>; 1241defm NumSubgroups : BuiltInOperand<38, 0, 0, [], [Kernel, GroupNonUniform]>; 1242defm NumEnqueuedSubgroups : BuiltInOperand<39, 0, 0, [], [Kernel]>; 1243defm SubgroupId : BuiltInOperand<40, 0, 0, [], [Kernel, GroupNonUniform]>; 1244defm SubgroupLocalInvocationId : BuiltInOperand<41, 0, 0, [], [Kernel, GroupNonUniform, SubgroupBallotKHR]>; 1245defm VertexIndex : BuiltInOperand<42, 0, 0, [], [Shader]>; 1246defm InstanceIndex : BuiltInOperand<43, 0, 0, [], [Shader]>; 1247defm SubgroupEqMask : BuiltInOperand<4416, 0, 0, [], [SubgroupBallotKHR, GroupNonUniformBallot]>; 1248defm SubgroupGeMask : BuiltInOperand<4417, 0, 0, [], [SubgroupBallotKHR, GroupNonUniformBallot]>; 1249defm SubgroupGtMask : BuiltInOperand<4418, 0, 0, [], [SubgroupBallotKHR, GroupNonUniformBallot]>; 1250defm SubgroupLeMask : BuiltInOperand<4419, 0, 0, [], [SubgroupBallotKHR, GroupNonUniformBallot]>; 1251defm SubgroupLtMask : BuiltInOperand<4420, 0, 0, [], [SubgroupBallotKHR, GroupNonUniformBallot]>; 1252defm BaseVertex : BuiltInOperand<4424, 0, 0, [], [DrawParameters]>; 1253defm BaseInstance : BuiltInOperand<4425, 0, 0, [], [DrawParameters]>; 1254defm DrawIndex : BuiltInOperand<4426, 0, 0, [], [DrawParameters, MeshShadingNV]>; 1255defm DeviceIndex : BuiltInOperand<4438, 0, 0, [], [DeviceGroup]>; 1256defm ViewIndex : BuiltInOperand<4440, 0, 0, [], [MultiView]>; 1257defm BaryCoordNoPerspAMD : BuiltInOperand<4492, 0, 0, [], []>; 1258defm BaryCoordNoPerspCentroidAMD : BuiltInOperand<4493, 0, 0, [], []>; 1259defm BaryCoordNoPerspSampleAMD : BuiltInOperand<4494, 0, 0, [], []>; 1260defm BaryCoordSmoothAMD : BuiltInOperand<4495, 0, 0, [], []>; 1261defm BaryCoordSmoothCentroid : BuiltInOperand<4496, 0, 0, [], []>; 1262defm BaryCoordSmoothSample : BuiltInOperand<4497, 0, 0, [], []>; 1263defm BaryCoordPullModel : BuiltInOperand<4498, 0, 0, [], []>; 1264defm FragStencilRefEXT : BuiltInOperand<5014, 0, 0, [], [StencilExportEXT]>; 1265defm ViewportMaskNV : BuiltInOperand<5253, 0, 0, [], [ShaderViewportMaskNV, MeshShadingNV]>; 1266defm SecondaryPositionNV : BuiltInOperand<5257, 0, 0, [], [ShaderStereoViewNV]>; 1267defm SecondaryViewportMaskNV : BuiltInOperand<5258, 0, 0, [], [ShaderStereoViewNV]>; 1268defm PositionPerViewNV : BuiltInOperand<5261, 0, 0, [], [PerViewAttributesNV, MeshShadingNV]>; 1269defm ViewportMaskPerViewNV : BuiltInOperand<5262, 0, 0, [], [PerViewAttributesNV, MeshShadingNV]>; 1270defm FullyCoveredEXT : BuiltInOperand<5264, 0, 0, [], [FragmentFullyCoveredEXT]>; 1271defm TaskCountNV : BuiltInOperand<5274, 0, 0, [], [MeshShadingNV]>; 1272defm PrimitiveCountNV : BuiltInOperand<5275, 0, 0, [], [MeshShadingNV]>; 1273defm PrimitiveIndicesNV : BuiltInOperand<5276, 0, 0, [], [MeshShadingNV]>; 1274defm ClipDistancePerViewNV : BuiltInOperand<5277, 0, 0, [], [MeshShadingNV]>; 1275defm CullDistancePerViewNV : BuiltInOperand<5278, 0, 0, [], [MeshShadingNV]>; 1276defm LayerPerViewNV : BuiltInOperand<5279, 0, 0, [], [MeshShadingNV]>; 1277defm MeshViewCountNV : BuiltInOperand<5280, 0, 0, [], [MeshShadingNV]>; 1278defm MeshViewIndices : BuiltInOperand<5281, 0, 0, [], [MeshShadingNV]>; 1279defm BaryCoordNV : BuiltInOperand<5286, 0, 0, [], [FragmentBarycentricNV]>; 1280defm BaryCoordNoPerspNV : BuiltInOperand<5287, 0, 0, [], [FragmentBarycentricNV]>; 1281defm FragSizeEXT : BuiltInOperand<5292, 0, 0, [], [FragmentDensityEXT]>; 1282defm FragInvocationCountEXT : BuiltInOperand<5293, 0, 0, [], [FragmentDensityEXT]>; 1283defm LaunchIdNV : BuiltInOperand<5319, 0, 0, [], [RayTracingNV]>; 1284defm LaunchSizeNV : BuiltInOperand<5320, 0, 0, [], [RayTracingNV]>; 1285defm WorldRayOriginNV : BuiltInOperand<5321, 0, 0, [], [RayTracingNV]>; 1286defm WorldRayDirectionNV : BuiltInOperand<5322, 0, 0, [], [RayTracingNV]>; 1287defm ObjectRayOriginNV : BuiltInOperand<5323, 0, 0, [], [RayTracingNV]>; 1288defm ObjectRayDirectionNV : BuiltInOperand<5324, 0, 0, [], [RayTracingNV]>; 1289defm RayTminNV : BuiltInOperand<5325, 0, 0, [], [RayTracingNV]>; 1290defm RayTmaxNV : BuiltInOperand<5326, 0, 0, [], [RayTracingNV]>; 1291defm InstanceCustomIndexNV : BuiltInOperand<5327, 0, 0, [], [RayTracingNV]>; 1292defm ObjectToWorldNV : BuiltInOperand<5330, 0, 0, [], [RayTracingNV]>; 1293defm WorldToObjectNV : BuiltInOperand<5331, 0, 0, [], [RayTracingNV]>; 1294defm HitTNV : BuiltInOperand<5332, 0, 0, [], [RayTracingNV]>; 1295defm HitKindNV : BuiltInOperand<5333, 0, 0, [], [RayTracingNV]>; 1296defm IncomingRayFlagsNV : BuiltInOperand<5351, 0, 0, [], [RayTracingNV]>; 1297 1298//===----------------------------------------------------------------------===// 1299// Multiclass used to define SelectionControl enum values and at the same time 1300// SymbolicOperand entries with string mnemonics. 1301//===----------------------------------------------------------------------===// 1302 1303def SelectionControl : GenericEnum, Operand<i32> { 1304 let FilterClass = "SelectionControl"; 1305 let NameField = "Name"; 1306 let ValueField = "Value"; 1307 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1308} 1309 1310class SelectionControl<string name, bits<32> value> { 1311 string Name = name; 1312 bits<32> Value = value; 1313} 1314 1315multiclass SelectionControlOperand<bits<32> value> { 1316 def : SelectionControl<NAME, value>; 1317 defm : SymbolicOperandWithRequirements<SelectionControlOperand, value, NAME, 0, 0, [], []>; 1318} 1319 1320defm None : SelectionControlOperand<0x0>; 1321defm Flatten : SelectionControlOperand<0x1>; 1322defm DontFlatten : SelectionControlOperand<0x2>; 1323 1324//===----------------------------------------------------------------------===// 1325// Multiclass used to define LoopControl enum values and at the same time 1326// SymbolicOperand entries with string mnemonics. 1327//===----------------------------------------------------------------------===// 1328 1329def LoopControl : GenericEnum, Operand<i32> { 1330 let FilterClass = "LoopControl"; 1331 let NameField = "Name"; 1332 let ValueField = "Value"; 1333 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1334} 1335 1336class LoopControl<string name, bits<32> value> { 1337 string Name = name; 1338 bits<32> Value = value; 1339} 1340 1341multiclass LoopControlOperand<bits<32> value> { 1342 def : LoopControl<NAME, value>; 1343 defm : SymbolicOperandWithRequirements<LoopControlOperand, value, NAME, 0, 0, [], []>; 1344} 1345 1346defm None : LoopControlOperand<0x0>; 1347defm Unroll : LoopControlOperand<0x1>; 1348defm DontUnroll : LoopControlOperand<0x2>; 1349defm DependencyInfinite : LoopControlOperand<0x4>; 1350defm DependencyLength : LoopControlOperand<0x8>; 1351defm MinIterations : LoopControlOperand<0x10>; 1352defm MaxIterations : LoopControlOperand<0x20>; 1353defm IterationMultiple : LoopControlOperand<0x40>; 1354defm PeelCount : LoopControlOperand<0x80>; 1355defm PartialCount : LoopControlOperand<0x100>; 1356 1357//===----------------------------------------------------------------------===// 1358// Multiclass used to define FunctionControl enum values and at the same time 1359// SymbolicOperand entries with string mnemonics. 1360//===----------------------------------------------------------------------===// 1361 1362def FunctionControl : GenericEnum, Operand<i32> { 1363 let FilterClass = "FunctionControl"; 1364 let NameField = "Name"; 1365 let ValueField = "Value"; 1366 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1367} 1368 1369class FunctionControl<string name, bits<32> value> { 1370 string Name = name; 1371 bits<32> Value = value; 1372} 1373 1374multiclass FunctionControlOperand<bits<32> value> { 1375 def : FunctionControl<NAME, value>; 1376 defm : SymbolicOperandWithRequirements<FunctionControlOperand, value, NAME, 0, 0, [], []>; 1377} 1378 1379defm None : FunctionControlOperand<0x0>; 1380defm Inline : FunctionControlOperand<0x1>; 1381defm DontInline : FunctionControlOperand<0x2>; 1382defm Pure : FunctionControlOperand<0x4>; 1383defm Const : FunctionControlOperand<0x8>; 1384 1385//===----------------------------------------------------------------------===// 1386// Multiclass used to define MemorySemantics enum values and at the same time 1387// SymbolicOperand entries with string mnemonics, versioning, extensions and 1388// capabilities. 1389//===----------------------------------------------------------------------===// 1390 1391def MemorySemantics : GenericEnum, Operand<i32> { 1392 let FilterClass = "MemorySemantics"; 1393 let NameField = "Name"; 1394 let ValueField = "Value"; 1395 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1396} 1397 1398class MemorySemantics<string name, bits<32> value> { 1399 string Name = name; 1400 bits<32> Value = value; 1401} 1402 1403multiclass MemorySemanticsOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1404 def : MemorySemantics<NAME, value>; 1405 defm : SymbolicOperandWithRequirements<MemorySemanticsOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1406} 1407 1408defm None : MemorySemanticsOperand<0x0, 0, 0, [], []>; 1409defm Acquire : MemorySemanticsOperand<0x2, 0, 0, [], []>; 1410defm Release : MemorySemanticsOperand<0x4, 0, 0, [], []>; 1411defm AcquireRelease : MemorySemanticsOperand<0x8, 0, 0, [], []>; 1412defm SequentiallyConsistent : MemorySemanticsOperand<0x10, 0, 0, [], []>; 1413defm UniformMemory : MemorySemanticsOperand<0x40, 0, 0, [], [Shader]>; 1414defm SubgroupMemory : MemorySemanticsOperand<0x80, 0, 0, [], []>; 1415defm WorkgroupMemory : MemorySemanticsOperand<0x100, 0, 0, [], []>; 1416defm CrossWorkgroupMemory : MemorySemanticsOperand<0x200, 0, 0, [], []>; 1417defm AtomicCounterMemory : MemorySemanticsOperand<0x400, 0, 0, [], [AtomicStorage]>; 1418defm ImageMemory : MemorySemanticsOperand<0x800, 0, 0, [], []>; 1419defm OutputMemoryKHR : MemorySemanticsOperand<0x1000, 0, 0, [], [VulkanMemoryModelKHR]>; 1420defm MakeAvailableKHR : MemorySemanticsOperand<0x2000, 0, 0, [], [VulkanMemoryModelKHR]>; 1421defm MakeVisibleKHR : MemorySemanticsOperand<0x4000, 0, 0, [], [VulkanMemoryModelKHR]>; 1422 1423//===----------------------------------------------------------------------===// 1424// Multiclass used to define MemoryOperand enum values and at the same time 1425// SymbolicOperand entries with string mnemonics, versioning, extensions and 1426// capabilities. 1427//===----------------------------------------------------------------------===// 1428 1429def MemoryOperand : GenericEnum, Operand<i32> { 1430 let FilterClass = "MemoryOperand"; 1431 let NameField = "Name"; 1432 let ValueField = "Value"; 1433 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1434} 1435 1436class MemoryOperand<string name, bits<32> value> { 1437 string Name = name; 1438 bits<32> Value = value; 1439} 1440 1441multiclass MemoryOperandOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1442 def : MemoryOperand<NAME, value>; 1443 defm : SymbolicOperandWithRequirements<MemoryOperandOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1444} 1445 1446defm None : MemoryOperandOperand<0x0, 0, 0, [], []>; 1447defm Volatile : MemoryOperandOperand<0x1, 0, 0, [], []>; 1448defm Aligned : MemoryOperandOperand<0x2, 0, 0, [], []>; 1449defm Nontemporal : MemoryOperandOperand<0x4, 0, 0, [], []>; 1450defm MakePointerAvailableKHR : MemoryOperandOperand<0x8, 0, 0, [], [VulkanMemoryModelKHR]>; 1451defm MakePointerVisibleKHR : MemoryOperandOperand<0x10, 0, 0, [], [VulkanMemoryModelKHR]>; 1452defm NonPrivatePointerKHR : MemoryOperandOperand<0x20, 0, 0, [], [VulkanMemoryModelKHR]>; 1453 1454//===----------------------------------------------------------------------===// 1455// Multiclass used to define Scope enum values and at the same time 1456// SymbolicOperand entries with string mnemonics, versioning, extensions and 1457// capabilities. 1458//===----------------------------------------------------------------------===// 1459 1460def Scope : GenericEnum, Operand<i32> { 1461 let FilterClass = "Scope"; 1462 let NameField = "Name"; 1463 let ValueField = "Value"; 1464 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1465} 1466 1467class Scope<string name, bits<32> value> { 1468 string Name = name; 1469 bits<32> Value = value; 1470} 1471 1472multiclass ScopeOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1473 def : Scope<NAME, value>; 1474 defm : SymbolicOperandWithRequirements<ScopeOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1475} 1476 1477defm CrossDevice : ScopeOperand<0, 0, 0, [], []>; 1478defm Device : ScopeOperand<1, 0, 0, [], []>; 1479defm Workgroup : ScopeOperand<2, 0, 0, [], []>; 1480defm Subgroup : ScopeOperand<3, 0, 0, [], []>; 1481defm Invocation : ScopeOperand<4, 0, 0, [], []>; 1482defm QueueFamilyKHR : ScopeOperand<5, 0, 0, [], [VulkanMemoryModelKHR]>; 1483 1484//===----------------------------------------------------------------------===// 1485// Multiclass used to define GroupOperation enum values and at the same time 1486// SymbolicOperand entries with string mnemonics, versioning, extensions and 1487// capabilities. 1488//===----------------------------------------------------------------------===// 1489 1490def GroupOperation : GenericEnum, Operand<i32> { 1491 let FilterClass = "GroupOperation"; 1492 let NameField = "Name"; 1493 let ValueField = "Value"; 1494 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1495} 1496 1497class GroupOperation<string name, bits<32> value> { 1498 string Name = name; 1499 bits<32> Value = value; 1500} 1501 1502multiclass GroupOperationOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1503 def NAME : GroupOperation<NAME, value>; 1504 defm : SymbolicOperandWithRequirements<GroupOperationOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1505} 1506 1507defm Reduce : GroupOperationOperand<0, 0, 0, [], [Kernel, GroupNonUniformArithmetic, GroupNonUniformBallot]>; 1508defm InclusiveScan : GroupOperationOperand<1, 0, 0, [], [Kernel, GroupNonUniformArithmetic, GroupNonUniformBallot]>; 1509defm ExclusiveScan : GroupOperationOperand<2, 0, 0, [], [Kernel, GroupNonUniformArithmetic, GroupNonUniformBallot]>; 1510defm ClusteredReduce : GroupOperationOperand<3, 0, 0, [], [GroupNonUniformClustered]>; 1511defm PartitionedReduceNV : GroupOperationOperand<6, 0, 0, [], [GroupNonUniformPartitionedNV]>; 1512defm PartitionedInclusiveScanNV : GroupOperationOperand<7, 0, 0, [], [GroupNonUniformPartitionedNV]>; 1513defm PartitionedExclusiveScanNV : GroupOperationOperand<8, 0, 0, [], [GroupNonUniformPartitionedNV]>; 1514 1515//===----------------------------------------------------------------------===// 1516// Multiclass used to define KernelEnqueueFlags enum values and at the same time 1517// SymbolicOperand entries with string mnemonics, versioning, extensions and 1518// capabilities. 1519//===----------------------------------------------------------------------===// 1520 1521def KernelEnqueueFlags : GenericEnum, Operand<i32> { 1522 let FilterClass = "KernelEnqueueFlags"; 1523 let NameField = "Name"; 1524 let ValueField = "Value"; 1525 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1526} 1527 1528class KernelEnqueueFlags<string name, bits<32> value> { 1529 string Name = name; 1530 bits<32> Value = value; 1531} 1532 1533multiclass KernelEnqueueFlagsOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1534 def : KernelEnqueueFlags<NAME, value>; 1535 defm : SymbolicOperandWithRequirements<KernelEnqueueFlagsOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1536} 1537 1538defm NoWait : KernelEnqueueFlagsOperand<0, 0, 0, [], [Kernel]>; 1539defm WaitKernel : KernelEnqueueFlagsOperand<1, 0, 0, [], [Kernel]>; 1540defm WaitWorkGroup : KernelEnqueueFlagsOperand<2, 0, 0, [], [Kernel]>; 1541 1542//===----------------------------------------------------------------------===// 1543// Multiclass used to define KernelProfilingInfo enum values and at the same time 1544// SymbolicOperand entries with string mnemonics, versioning, extensions and 1545// capabilities. 1546//===----------------------------------------------------------------------===// 1547 1548def KernelProfilingInfo : GenericEnum, Operand<i32> { 1549 let FilterClass = "KernelProfilingInfo"; 1550 let NameField = "Name"; 1551 let ValueField = "Value"; 1552 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1553} 1554 1555class KernelProfilingInfo<string name, bits<32> value> { 1556 string Name = name; 1557 bits<32> Value = value; 1558} 1559 1560multiclass KernelProfilingInfoOperand<bits<32> value, bits<32> minVersion, bits<32> maxVersion, list<Extension> reqExtensions, list<Capability> reqCapabilities> { 1561 def : KernelProfilingInfo<NAME, value>; 1562 defm : SymbolicOperandWithRequirements<KernelProfilingInfoOperand, value, NAME, minVersion, maxVersion, reqExtensions, reqCapabilities>; 1563} 1564 1565defm None : KernelProfilingInfoOperand<0x0, 0, 0, [], []>; 1566defm CmdExecTime : KernelProfilingInfoOperand<0x1, 0, 0, [], [Kernel]>; 1567 1568//===----------------------------------------------------------------------===// 1569// Multiclass used to define Opcode enum values and at the same time 1570// SymbolicOperand entries with string mnemonics and capabilities. 1571//===----------------------------------------------------------------------===// 1572 1573def Opcode : GenericEnum, Operand<i32> { 1574 let FilterClass = "Opcode"; 1575 let NameField = "Name"; 1576 let ValueField = "Value"; 1577 let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>"); 1578} 1579 1580class Opcode<string name, bits<32> value> { 1581 string Name = name; 1582 bits<32> Value = value; 1583} 1584 1585multiclass OpcodeOperand<bits<32> value> { 1586 def : Opcode<NAME, value>; 1587 defm : SymbolicOperandWithRequirements<OpcodeOperand, value, NAME, 0, 0, [], []>; 1588} 1589// TODO: implement other mnemonics. 1590defm InBoundsPtrAccessChain : OpcodeOperand<70>; 1591defm PtrCastToGeneric : OpcodeOperand<121>; 1592