[llvm-branch-commits] [llvm] 5a22e82 - Revert "[SPIRV][NFCI] Use unordered data structures for SPIR-V extensions (#1…"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Feb 27 09:18:40 PST 2026


Author: Nick Sarnie
Date: 2026-02-27T17:18:35Z
New Revision: 5a22e826192f6698370defe0e01ef2a16ee1d8b1

URL: https://github.com/llvm/llvm-project/commit/5a22e826192f6698370defe0e01ef2a16ee1d8b1
DIFF: https://github.com/llvm/llvm-project/commit/5a22e826192f6698370defe0e01ef2a16ee1d8b1.diff

LOG: Revert "[SPIRV][NFCI] Use unordered data structures for SPIR-V extensions (#1…"

This reverts commit d8956d7796bb2d7e5feb7945dffb2dbcf372aaa3.

Added: 
    

Modified: 
    llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.h
    llvm/lib/Target/SPIRV/SPIRVAPI.cpp
    llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
    llvm/lib/Target/SPIRV/SPIRVCommandLine.h
    llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp
    llvm/lib/Target/SPIRV/SPIRVSubtarget.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.h b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.h
index 9b186e2973174..ea41716bf204e 100644
--- a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.h
+++ b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.h
@@ -15,12 +15,10 @@
 #ifndef LLVM_LIB_TARGET_SPIRV_SPIRVSYMBOLICOPERANDS_H
 #define LLVM_LIB_TARGET_SPIRV_SPIRVSYMBOLICOPERANDS_H
 
-#include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/VersionTuple.h"
 #include <string>
-#include <type_traits>
 
 namespace llvm {
 namespace SPIRV {
@@ -258,27 +256,6 @@ using CapabilityList = SmallVector<SPIRV::Capability::Capability, 8>;
 using ExtensionList = SmallVector<SPIRV::Extension::Extension, 8>;
 using EnvironmentList = SmallVector<SPIRV::Environment::Environment, 8>;
 
-// Tablegen enum types don't have an underlying type which is required for
-// DenseMap so just use the DenseMapInfo for std::underlying_type_t.
-template <> struct DenseMapInfo<SPIRV::Extension::Extension> {
-  using DMI = DenseMapInfo<std::underlying_type_t<SPIRV::Extension::Extension>>;
-  static SPIRV::Extension::Extension getEmptyKey() {
-    return static_cast<SPIRV::Extension::Extension>(DMI::getEmptyKey());
-  }
-  static SPIRV::Extension::Extension getTombstoneKey() {
-    return static_cast<SPIRV::Extension::Extension>(DMI::getTombstoneKey());
-  }
-  static unsigned getHashValue(SPIRV::Extension::Extension Ty) {
-    return DMI::getHashValue(Ty);
-  }
-  static bool isEqual(SPIRV::Extension::Extension Ty1,
-                      SPIRV::Extension::Extension Ty2) {
-    return Ty1 == Ty2;
-  }
-};
-
-using ExtensionSet = DenseSet<SPIRV::Extension::Extension>;
-
 std::string
 getSymbolicOperandMnemonic(SPIRV::OperandCategory::OperandCategory Category,
                            int32_t Value);

diff  --git a/llvm/lib/Target/SPIRV/SPIRVAPI.cpp b/llvm/lib/Target/SPIRV/SPIRVAPI.cpp
index ab3c1c09fd819..d6581b274e00f 100644
--- a/llvm/lib/Target/SPIRV/SPIRVAPI.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVAPI.cpp
@@ -59,7 +59,7 @@ SPIRVTranslate(Module *M, std::string &SpirvObj, std::string &ErrMsg,
   static const std::string DefaultTriple = "spirv64-unknown-unknown";
   static const std::string DefaultMArch = "";
 
-  ExtensionSet AllowedExtIds;
+  std::set<SPIRV::Extension::Extension> AllowedExtIds;
   StringRef UnknownExt =
       SPIRVExtensionsParser::checkExtensions(AllowExtNames, AllowedExtIds);
   if (!UnknownExt.empty()) {

diff  --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
index 33e1b52b724e6..31c7a61e1a3d8 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp
@@ -14,11 +14,12 @@
 #include "SPIRVCommandLine.h"
 #include "MCTargetDesc/SPIRVBaseInfo.h"
 #include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringMap.h"
 #include "llvm/TargetParser/Triple.h"
 
 #include <functional>
 #include <iterator>
+#include <map>
+#include <set>
 #include <string>
 #include <utility>
 #include <vector>
@@ -27,167 +28,178 @@
 
 using namespace llvm;
 
-ExtensionSet SPIRVExtensionsParser::DisabledExtensions;
+std::set<SPIRV::Extension::Extension> SPIRVExtensionsParser::DisabledExtensions;
 
-static const StringMap<SPIRV::Extension::Extension> SPIRVExtensionMap = {
-    {"SPV_EXT_shader_atomic_float_add",
-     SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_add},
-    {"SPV_EXT_shader_atomic_float16_add",
-     SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float16_add},
-    {"SPV_EXT_shader_atomic_float_min_max",
-     SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_min_max},
-    {"SPV_INTEL_16bit_atomics",
-     SPIRV::Extension::Extension::SPV_INTEL_16bit_atomics},
-    {"SPV_NV_shader_atomic_fp16_vector",
-     SPIRV::Extension::Extension::SPV_NV_shader_atomic_fp16_vector},
-    {"SPV_EXT_arithmetic_fence",
-     SPIRV::Extension::Extension::SPV_EXT_arithmetic_fence},
-    {"SPV_EXT_demote_to_helper_invocation",
-     SPIRV::Extension::Extension::SPV_EXT_demote_to_helper_invocation},
-    {"SPV_EXT_descriptor_indexing",
-     SPIRV::Extension::Extension::SPV_EXT_descriptor_indexing},
-    {"SPV_EXT_fragment_fully_covered",
-     SPIRV::Extension::Extension::SPV_EXT_fragment_fully_covered},
-    {"SPV_EXT_fragment_invocation_density",
-     SPIRV::Extension::Extension::SPV_EXT_fragment_invocation_density},
-    {"SPV_EXT_fragment_shader_interlock",
-     SPIRV::Extension::Extension::SPV_EXT_fragment_shader_interlock},
-    {"SPV_EXT_mesh_shader", SPIRV::Extension::Extension::SPV_EXT_mesh_shader},
-    {"SPV_EXT_shader_stencil_export",
-     SPIRV::Extension::Extension::SPV_EXT_shader_stencil_export},
-    {"SPV_EXT_shader_viewport_index_layer",
-     SPIRV::Extension::Extension::SPV_EXT_shader_viewport_index_layer},
-    {"SPV_GOOGLE_hlsl_functionality1",
-     SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1},
-    {"SPV_GOOGLE_user_type", SPIRV::Extension::Extension::SPV_GOOGLE_user_type},
-    {"SPV_ALTERA_arbitrary_precision_integers",
-     SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_integers},
-    {"SPV_ALTERA_arbitrary_precision_floating_point",
-     SPIRV::Extension::Extension::
-         SPV_ALTERA_arbitrary_precision_floating_point},
-    {"SPV_INTEL_cache_controls",
-     SPIRV::Extension::Extension::SPV_INTEL_cache_controls},
-    {"SPV_INTEL_float_controls2",
-     SPIRV::Extension::Extension::SPV_INTEL_float_controls2},
-    {"SPV_INTEL_global_variable_fpga_decorations",
-     SPIRV::Extension::Extension::SPV_INTEL_global_variable_fpga_decorations},
-    {"SPV_INTEL_global_variable_host_access",
-     SPIRV::Extension::Extension::SPV_INTEL_global_variable_host_access},
-    {"SPV_INTEL_optnone", SPIRV::Extension::Extension::SPV_INTEL_optnone},
-    {"SPV_EXT_optnone", SPIRV::Extension::Extension::SPV_EXT_optnone},
-    {"SPV_INTEL_usm_storage_classes",
-     SPIRV::Extension::Extension::SPV_INTEL_usm_storage_classes},
-    {"SPV_INTEL_split_barrier",
-     SPIRV::Extension::Extension::SPV_INTEL_split_barrier},
-    {"SPV_INTEL_subgroups", SPIRV::Extension::Extension::SPV_INTEL_subgroups},
-    {"SPV_INTEL_media_block_io",
-     SPIRV::Extension::Extension::SPV_INTEL_media_block_io},
-    {"SPV_INTEL_memory_access_aliasing",
-     SPIRV::Extension::Extension::SPV_INTEL_memory_access_aliasing},
-    {"SPV_INTEL_joint_matrix",
-     SPIRV::Extension::Extension::SPV_INTEL_joint_matrix},
-    {"SPV_KHR_16bit_storage",
-     SPIRV::Extension::Extension::SPV_KHR_16bit_storage},
-    {"SPV_KHR_device_group", SPIRV::Extension::Extension::SPV_KHR_device_group},
-    {"SPV_KHR_fragment_shading_rate",
-     SPIRV::Extension::Extension::SPV_KHR_fragment_shading_rate},
-    {"SPV_KHR_multiview", SPIRV::Extension::Extension::SPV_KHR_multiview},
-    {"SPV_KHR_post_depth_coverage",
-     SPIRV::Extension::Extension::SPV_KHR_post_depth_coverage},
-    {"SPV_KHR_shader_draw_parameters",
-     SPIRV::Extension::Extension::SPV_KHR_shader_draw_parameters},
-    {"SPV_KHR_ray_tracing", SPIRV::Extension::Extension::SPV_KHR_ray_tracing},
-    {"SPV_KHR_uniform_group_instructions",
-     SPIRV::Extension::Extension::SPV_KHR_uniform_group_instructions},
-    {"SPV_KHR_no_integer_wrap_decoration",
-     SPIRV::Extension::Extension::SPV_KHR_no_integer_wrap_decoration},
-    {"SPV_KHR_float_controls",
-     SPIRV::Extension::Extension::SPV_KHR_float_controls},
-    {"SPV_KHR_expect_assume",
-     SPIRV::Extension::Extension::SPV_KHR_expect_assume},
-    {"SPV_KHR_bit_instructions",
-     SPIRV::Extension::Extension::SPV_KHR_bit_instructions},
-    {"SPV_KHR_integer_dot_product",
-     SPIRV::Extension::Extension::SPV_KHR_integer_dot_product},
-    {"SPV_KHR_linkonce_odr", SPIRV::Extension::Extension::SPV_KHR_linkonce_odr},
-    {"SPV_KHR_fma", SPIRV::Extension::Extension::SPV_KHR_fma},
-    {"SPV_INTEL_inline_assembly",
-     SPIRV::Extension::Extension::SPV_INTEL_inline_assembly},
-    {"SPV_INTEL_bindless_images",
-     SPIRV::Extension::Extension::SPV_INTEL_bindless_images},
-    {"SPV_INTEL_bfloat16_arithmetic",
-     SPIRV::Extension::Extension::SPV_INTEL_bfloat16_arithmetic},
-    {"SPV_INTEL_bfloat16_conversion",
-     SPIRV::Extension::Extension::SPV_INTEL_bfloat16_conversion},
-    {"SPV_KHR_subgroup_rotate",
-     SPIRV::Extension::Extension::SPV_KHR_subgroup_rotate},
-    {"SPV_INTEL_variable_length_array",
-     SPIRV::Extension::Extension::SPV_INTEL_variable_length_array},
-    {"SPV_INTEL_function_pointers",
-     SPIRV::Extension::Extension::SPV_INTEL_function_pointers},
-    {"SPV_KHR_shader_clock", SPIRV::Extension::Extension::SPV_KHR_shader_clock},
-    {"SPV_KHR_cooperative_matrix",
-     SPIRV::Extension::Extension::SPV_KHR_cooperative_matrix},
-    {"SPV_KHR_non_semantic_info",
-     SPIRV::Extension::Extension::SPV_KHR_non_semantic_info},
-    {"SPV_KHR_ray_query", SPIRV::Extension::Extension::SPV_KHR_ray_query},
-    {"SPV_EXT_shader_image_int64",
-     SPIRV::Extension::Extension::SPV_EXT_shader_image_int64},
-    {"SPV_KHR_fragment_shader_barycentric",
-     SPIRV::Extension::Extension::SPV_KHR_fragment_shader_barycentric},
-    {"SPV_KHR_physical_storage_buffer",
-     SPIRV::Extension::Extension::SPV_KHR_physical_storage_buffer},
-    {"SPV_KHR_vulkan_memory_model",
-     SPIRV::Extension::Extension::SPV_KHR_vulkan_memory_model},
-    {"SPV_NV_shader_subgroup_partitioned",
-     SPIRV::Extension::Extension::SPV_NV_shader_subgroup_partitioned},
-    {"SPV_INTEL_long_composites",
-     SPIRV::Extension::Extension::SPV_INTEL_long_composites},
-    {"SPV_INTEL_fp_max_error",
-     SPIRV::Extension::Extension::SPV_INTEL_fp_max_error},
-    {"SPV_INTEL_subgroup_matrix_multiply_accumulate",
-     SPIRV::Extension::Extension::
-         SPV_INTEL_subgroup_matrix_multiply_accumulate},
-    {"SPV_INTEL_ternary_bitwise_function",
-     SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function},
-    {"SPV_INTEL_2d_block_io",
-     SPIRV::Extension::Extension::SPV_INTEL_2d_block_io},
-    {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
-    {"SPV_KHR_float_controls2",
-     SPIRV::Extension::Extension::SPV_KHR_float_controls2},
-    {"SPV_INTEL_tensor_float32_conversion",
-     SPIRV::Extension::Extension::SPV_INTEL_tensor_float32_conversion},
-    {"SPV_KHR_bfloat16", SPIRV::Extension::Extension::SPV_KHR_bfloat16},
-    {"SPV_EXT_relaxed_printf_string_address_space",
-     SPIRV::Extension::Extension::SPV_EXT_relaxed_printf_string_address_space},
-    {"SPV_INTEL_predicated_io",
-     SPIRV::Extension::Extension::SPV_INTEL_predicated_io},
-    {"SPV_KHR_maximal_reconvergence",
-     SPIRV::Extension::Extension::SPV_KHR_maximal_reconvergence},
-    {"SPV_INTEL_kernel_attributes",
-     SPIRV::Extension::Extension::SPV_INTEL_kernel_attributes},
-    {"SPV_ALTERA_blocking_pipes",
-     SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes},
-    {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
-    {"SPV_ALTERA_arbitrary_precision_fixed_point",
-     SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_fixed_point},
-    {"SPV_EXT_image_raw10_raw12",
-     SPIRV::Extension::Extension::SPV_EXT_image_raw10_raw12},
-    {"SPV_INTEL_unstructured_loop_controls",
-     SPIRV::Extension::Extension::SPV_INTEL_unstructured_loop_controls}};
+static const std::map<StringRef, SPIRV::Extension::Extension>
+    SPIRVExtensionMap = {
+        {"SPV_EXT_shader_atomic_float_add",
+         SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_add},
+        {"SPV_EXT_shader_atomic_float16_add",
+         SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float16_add},
+        {"SPV_EXT_shader_atomic_float_min_max",
+         SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_min_max},
+        {"SPV_INTEL_16bit_atomics",
+         SPIRV::Extension::Extension::SPV_INTEL_16bit_atomics},
+        {"SPV_NV_shader_atomic_fp16_vector",
+         SPIRV::Extension::Extension::SPV_NV_shader_atomic_fp16_vector},
+        {"SPV_EXT_arithmetic_fence",
+         SPIRV::Extension::Extension::SPV_EXT_arithmetic_fence},
+        {"SPV_EXT_demote_to_helper_invocation",
+         SPIRV::Extension::Extension::SPV_EXT_demote_to_helper_invocation},
+        {"SPV_EXT_descriptor_indexing",
+         SPIRV::Extension::Extension::SPV_EXT_descriptor_indexing},
+        {"SPV_EXT_fragment_fully_covered",
+         SPIRV::Extension::Extension::SPV_EXT_fragment_fully_covered},
+        {"SPV_EXT_fragment_invocation_density",
+         SPIRV::Extension::Extension::SPV_EXT_fragment_invocation_density},
+        {"SPV_EXT_fragment_shader_interlock",
+         SPIRV::Extension::Extension::SPV_EXT_fragment_shader_interlock},
+        {"SPV_EXT_mesh_shader",
+         SPIRV::Extension::Extension::SPV_EXT_mesh_shader},
+        {"SPV_EXT_shader_stencil_export",
+         SPIRV::Extension::Extension::SPV_EXT_shader_stencil_export},
+        {"SPV_EXT_shader_viewport_index_layer",
+         SPIRV::Extension::Extension::SPV_EXT_shader_viewport_index_layer},
+        {"SPV_GOOGLE_hlsl_functionality1",
+         SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1},
+        {"SPV_GOOGLE_user_type",
+         SPIRV::Extension::Extension::SPV_GOOGLE_user_type},
+        {"SPV_ALTERA_arbitrary_precision_integers",
+         SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_integers},
+        {"SPV_ALTERA_arbitrary_precision_floating_point",
+         SPIRV::Extension::Extension::
+             SPV_ALTERA_arbitrary_precision_floating_point},
+        {"SPV_INTEL_cache_controls",
+         SPIRV::Extension::Extension::SPV_INTEL_cache_controls},
+        {"SPV_INTEL_float_controls2",
+         SPIRV::Extension::Extension::SPV_INTEL_float_controls2},
+        {"SPV_INTEL_global_variable_fpga_decorations",
+         SPIRV::Extension::Extension::
+             SPV_INTEL_global_variable_fpga_decorations},
+        {"SPV_INTEL_global_variable_host_access",
+         SPIRV::Extension::Extension::SPV_INTEL_global_variable_host_access},
+        {"SPV_INTEL_optnone", SPIRV::Extension::Extension::SPV_INTEL_optnone},
+        {"SPV_EXT_optnone", SPIRV::Extension::Extension::SPV_EXT_optnone},
+        {"SPV_INTEL_usm_storage_classes",
+         SPIRV::Extension::Extension::SPV_INTEL_usm_storage_classes},
+        {"SPV_INTEL_split_barrier",
+         SPIRV::Extension::Extension::SPV_INTEL_split_barrier},
+        {"SPV_INTEL_subgroups",
+         SPIRV::Extension::Extension::SPV_INTEL_subgroups},
+        {"SPV_INTEL_media_block_io",
+         SPIRV::Extension::Extension::SPV_INTEL_media_block_io},
+        {"SPV_INTEL_memory_access_aliasing",
+         SPIRV::Extension::Extension::SPV_INTEL_memory_access_aliasing},
+        {"SPV_INTEL_joint_matrix",
+         SPIRV::Extension::Extension::SPV_INTEL_joint_matrix},
+        {"SPV_KHR_16bit_storage",
+         SPIRV::Extension::Extension::SPV_KHR_16bit_storage},
+        {"SPV_KHR_device_group",
+         SPIRV::Extension::Extension::SPV_KHR_device_group},
+        {"SPV_KHR_fragment_shading_rate",
+         SPIRV::Extension::Extension::SPV_KHR_fragment_shading_rate},
+        {"SPV_KHR_multiview", SPIRV::Extension::Extension::SPV_KHR_multiview},
+        {"SPV_KHR_post_depth_coverage",
+         SPIRV::Extension::Extension::SPV_KHR_post_depth_coverage},
+        {"SPV_KHR_shader_draw_parameters",
+         SPIRV::Extension::Extension::SPV_KHR_shader_draw_parameters},
+        {"SPV_KHR_ray_tracing",
+         SPIRV::Extension::Extension::SPV_KHR_ray_tracing},
+        {"SPV_KHR_uniform_group_instructions",
+         SPIRV::Extension::Extension::SPV_KHR_uniform_group_instructions},
+        {"SPV_KHR_no_integer_wrap_decoration",
+         SPIRV::Extension::Extension::SPV_KHR_no_integer_wrap_decoration},
+        {"SPV_KHR_float_controls",
+         SPIRV::Extension::Extension::SPV_KHR_float_controls},
+        {"SPV_KHR_expect_assume",
+         SPIRV::Extension::Extension::SPV_KHR_expect_assume},
+        {"SPV_KHR_bit_instructions",
+         SPIRV::Extension::Extension::SPV_KHR_bit_instructions},
+        {"SPV_KHR_integer_dot_product",
+         SPIRV::Extension::Extension::SPV_KHR_integer_dot_product},
+        {"SPV_KHR_linkonce_odr",
+         SPIRV::Extension::Extension::SPV_KHR_linkonce_odr},
+        {"SPV_KHR_fma", SPIRV::Extension::Extension::SPV_KHR_fma},
+        {"SPV_INTEL_inline_assembly",
+         SPIRV::Extension::Extension::SPV_INTEL_inline_assembly},
+        {"SPV_INTEL_bindless_images",
+         SPIRV::Extension::Extension::SPV_INTEL_bindless_images},
+        {"SPV_INTEL_bfloat16_arithmetic",
+         SPIRV::Extension::Extension::SPV_INTEL_bfloat16_arithmetic},
+        {"SPV_INTEL_bfloat16_conversion",
+         SPIRV::Extension::Extension::SPV_INTEL_bfloat16_conversion},
+        {"SPV_KHR_subgroup_rotate",
+         SPIRV::Extension::Extension::SPV_KHR_subgroup_rotate},
+        {"SPV_INTEL_variable_length_array",
+         SPIRV::Extension::Extension::SPV_INTEL_variable_length_array},
+        {"SPV_INTEL_function_pointers",
+         SPIRV::Extension::Extension::SPV_INTEL_function_pointers},
+        {"SPV_KHR_shader_clock",
+         SPIRV::Extension::Extension::SPV_KHR_shader_clock},
+        {"SPV_KHR_cooperative_matrix",
+         SPIRV::Extension::Extension::SPV_KHR_cooperative_matrix},
+        {"SPV_KHR_non_semantic_info",
+         SPIRV::Extension::Extension::SPV_KHR_non_semantic_info},
+        {"SPV_KHR_ray_query", SPIRV::Extension::Extension::SPV_KHR_ray_query},
+        {"SPV_EXT_shader_image_int64",
+         SPIRV::Extension::Extension::SPV_EXT_shader_image_int64},
+        {"SPV_KHR_fragment_shader_barycentric",
+         SPIRV::Extension::Extension::SPV_KHR_fragment_shader_barycentric},
+        {"SPV_KHR_physical_storage_buffer",
+         SPIRV::Extension::Extension::SPV_KHR_physical_storage_buffer},
+        {"SPV_KHR_vulkan_memory_model",
+         SPIRV::Extension::Extension::SPV_KHR_vulkan_memory_model},
+        {"SPV_NV_shader_subgroup_partitioned",
+         SPIRV::Extension::Extension::SPV_NV_shader_subgroup_partitioned},
+        {"SPV_INTEL_long_composites",
+         SPIRV::Extension::Extension::SPV_INTEL_long_composites},
+        {"SPV_INTEL_fp_max_error",
+         SPIRV::Extension::Extension::SPV_INTEL_fp_max_error},
+        {"SPV_INTEL_subgroup_matrix_multiply_accumulate",
+         SPIRV::Extension::Extension::
+             SPV_INTEL_subgroup_matrix_multiply_accumulate},
+        {"SPV_INTEL_ternary_bitwise_function",
+         SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function},
+        {"SPV_INTEL_2d_block_io",
+         SPIRV::Extension::Extension::SPV_INTEL_2d_block_io},
+        {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
+        {"SPV_KHR_float_controls2",
+         SPIRV::Extension::Extension::SPV_KHR_float_controls2},
+        {"SPV_INTEL_tensor_float32_conversion",
+         SPIRV::Extension::Extension::SPV_INTEL_tensor_float32_conversion},
+        {"SPV_KHR_bfloat16", SPIRV::Extension::Extension::SPV_KHR_bfloat16},
+        {"SPV_EXT_relaxed_printf_string_address_space",
+         SPIRV::Extension::Extension::
+             SPV_EXT_relaxed_printf_string_address_space},
+        {"SPV_INTEL_predicated_io",
+         SPIRV::Extension::Extension::SPV_INTEL_predicated_io},
+        {"SPV_KHR_maximal_reconvergence",
+         SPIRV::Extension::Extension::SPV_KHR_maximal_reconvergence},
+        {"SPV_INTEL_kernel_attributes",
+         SPIRV::Extension::Extension::SPV_INTEL_kernel_attributes},
+        {"SPV_ALTERA_blocking_pipes",
+         SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes},
+        {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
+        {"SPV_ALTERA_arbitrary_precision_fixed_point",
+         SPIRV::Extension::Extension::
+             SPV_ALTERA_arbitrary_precision_fixed_point},
+        {"SPV_EXT_image_raw10_raw12",
+         SPIRV::Extension::Extension::SPV_EXT_image_raw10_raw12},
+        {"SPV_INTEL_unstructured_loop_controls",
+         SPIRV::Extension::Extension::SPV_INTEL_unstructured_loop_controls}};
 
 bool SPIRVExtensionsParser::parse(cl::Option &O, StringRef ArgName,
-                                  StringRef ArgValue, ExtensionSet &Vals) {
+                                  StringRef ArgValue,
+                                  std::set<SPIRV::Extension::Extension> &Vals) {
   SmallVector<StringRef, 10> Tokens;
   ArgValue.split(Tokens, ",", -1, false);
 
-  ExtensionSet EnabledExtensions;
+  std::set<SPIRV::Extension::Extension> EnabledExtensions;
 
   auto M = partition(Tokens, [](auto &&T) { return T.starts_with('+'); });
 
   if (std::any_of(M, Tokens.end(), equal_to("all")))
-    for (auto &&El : make_second_range(SPIRVExtensionMap))
-      Vals.insert(El);
+    copy(make_second_range(SPIRVExtensionMap), std::inserter(Vals, Vals.end()));
 
   for (auto &&Token : make_range(Tokens.begin(), M)) {
     StringRef ExtensionName = Token.substr(1);
@@ -215,24 +227,24 @@ bool SPIRVExtensionsParser::parse(cl::Option &O, StringRef ArgName,
 
     auto NameValuePair = SPIRVExtensionMap.find(Token.substr(1));
 
-    if (NameValuePair == SPIRVExtensionMap.end())
+    if (NameValuePair == SPIRVExtensionMap.cend())
       return O.error("Unknown SPIR-V extension: " + Token.str());
     if (EnabledExtensions.count(NameValuePair->second))
       return O.error(
           "Extension cannot be allowed and disallowed at the same time: " +
-          NameValuePair->first());
+          NameValuePair->first);
     DisabledExtensions.insert(NameValuePair->second);
     Vals.erase(NameValuePair->second);
   }
 
-  Vals.insert(EnabledExtensions.begin(), EnabledExtensions.end());
+  Vals.insert(EnabledExtensions.cbegin(), EnabledExtensions.cend());
 
   return false;
 }
 
-StringRef
-SPIRVExtensionsParser::checkExtensions(const std::vector<std::string> &ExtNames,
-                                       ExtensionSet &AllowedExtensions) {
+StringRef SPIRVExtensionsParser::checkExtensions(
+    const std::vector<std::string> &ExtNames,
+    std::set<SPIRV::Extension::Extension> &AllowedExtensions) {
   for (const auto &Ext : ExtNames) {
     if (Ext == "all") {
       for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)
@@ -247,8 +259,9 @@ SPIRVExtensionsParser::checkExtensions(const std::vector<std::string> &ExtNames,
   return StringRef();
 }
 
-ExtensionSet SPIRVExtensionsParser::getValidExtensions(const Triple &TT) {
-  ExtensionSet R;
+std::set<SPIRV::Extension::Extension>
+SPIRVExtensionsParser::getValidExtensions(const Triple &TT) {
+  std::set<SPIRV::Extension::Extension> R;
   SPIRV::Environment::Environment CurrentEnvironment =
       SPIRV::Environment::Environment::EnvOpenCL;
   if (TT.getOS() == Triple::Vulkan)

diff  --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.h b/llvm/lib/Target/SPIRV/SPIRVCommandLine.h
index d0d52eb3a2352..03dba5915d06e 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.h
+++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.h
@@ -16,6 +16,7 @@
 
 #include "MCTargetDesc/SPIRVBaseInfo.h"
 #include "llvm/Support/CommandLine.h"
+#include <set>
 #include <string>
 
 namespace llvm {
@@ -23,29 +24,33 @@ class StringRef;
 class Triple;
 
 /// Command line parser for toggling SPIR-V extensions.
-struct SPIRVExtensionsParser : public cl::parser<ExtensionSet> {
+struct SPIRVExtensionsParser
+    : public cl::parser<std::set<SPIRV::Extension::Extension>> {
 public:
-  SPIRVExtensionsParser(cl::Option &O) : cl::parser<ExtensionSet>(O) {}
+  SPIRVExtensionsParser(cl::Option &O)
+      : cl::parser<std::set<SPIRV::Extension::Extension>>(O) {}
 
   /// Parses SPIR-V extension name from CLI arguments.
   ///
   /// \return Returns true on error.
   bool parse(cl::Option &O, StringRef ArgName, StringRef ArgValue,
-             ExtensionSet &Vals);
+             std::set<SPIRV::Extension::Extension> &Vals);
 
   /// Validates and converts extension names into internal enum values.
   ///
   /// \return Returns a reference to the unknown SPIR-V extension name from the
   /// list if present, or an empty StringRef on success.
-  static StringRef checkExtensions(const std::vector<std::string> &ExtNames,
-                                   ExtensionSet &AllowedExtensions);
+  static StringRef
+  checkExtensions(const std::vector<std::string> &ExtNames,
+                  std::set<SPIRV::Extension::Extension> &AllowedExtensions);
 
   /// Returns the list of extensions that are valid for a particular
   /// target environment (i.e., OpenCL or Vulkan).
-  static ExtensionSet getValidExtensions(const Triple &TT);
+  static std::set<SPIRV::Extension::Extension>
+  getValidExtensions(const Triple &TT);
 
 private:
-  static ExtensionSet DisabledExtensions;
+  static std::set<SPIRV::Extension::Extension> DisabledExtensions;
 };
 
 } // namespace llvm

diff  --git a/llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp b/llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp
index d65d8ec53c6d0..63d7100fbf24a 100644
--- a/llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp
@@ -32,13 +32,15 @@ static cl::opt<bool>
                         cl::desc("SPIR-V Translator compatibility mode"),
                         cl::Optional, cl::init(false));
 
-static cl::opt<ExtensionSet, false, SPIRVExtensionsParser>
+static cl::opt<std::set<SPIRV::Extension::Extension>, false,
+               SPIRVExtensionsParser>
     Extensions("spirv-ext",
                cl::desc("Specify list of enabled SPIR-V extensions"));
 
 // Provides access to the cl::opt<...> `Extensions` variable from outside of the
 // module.
-void SPIRVSubtarget::addExtensionsToClOpt(const ExtensionSet &AllowList) {
+void SPIRVSubtarget::addExtensionsToClOpt(
+    const std::set<SPIRV::Extension::Extension> &AllowList) {
   Extensions.insert(AllowList.begin(), AllowList.end());
 }
 
@@ -212,9 +214,9 @@ void SPIRVSubtarget::resolveEnvFromModule(const Module &M) {
 
 // Set available extensions after SPIRVSubtarget is created.
 void SPIRVSubtarget::initAvailableExtensions(
-    const ExtensionSet &AllowedExtIds) {
+    const std::set<SPIRV::Extension::Extension> &AllowedExtIds) {
   AvailableExtensions.clear();
-  const ExtensionSet &ValidExtensions =
+  const std::set<SPIRV::Extension::Extension> &ValidExtensions =
       SPIRVExtensionsParser::getValidExtensions(TargetTriple);
 
   for (const auto &Ext : AllowedExtIds) {

diff  --git a/llvm/lib/Target/SPIRV/SPIRVSubtarget.h b/llvm/lib/Target/SPIRV/SPIRVSubtarget.h
index 1b14a89695f59..18f7e0179270c 100644
--- a/llvm/lib/Target/SPIRV/SPIRVSubtarget.h
+++ b/llvm/lib/Target/SPIRV/SPIRVSubtarget.h
@@ -73,7 +73,8 @@ class SPIRVSubtarget : public SPIRVGenSubtargetInfo {
                  const std::string &FS, const SPIRVTargetMachine &TM);
   SPIRVSubtarget &initSubtargetDependencies(StringRef CPU, StringRef FS);
 
-  void initAvailableExtensions(const ExtensionSet &AllowedExtIds);
+  void initAvailableExtensions(
+      const std::set<SPIRV::Extension::Extension> &AllowedExtIds);
   void resolveEnvFromModule(const Module &M);
 
   // Parses features string setting specified subtarget options.
@@ -144,8 +145,9 @@ class SPIRVSubtarget : public SPIRVGenSubtargetInfo {
 
   // Adds known SPIR-V extensions to the global list of allowed extensions that
   // SPIRVSubtarget module owns as
-  // cl::opt<ExtensionSet, ...> global variable.
-  static void addExtensionsToClOpt(const ExtensionSet &AllowList);
+  // cl::opt<std::set<SPIRV::Extension::Extension>, ...> global variable.
+  static void
+  addExtensionsToClOpt(const std::set<SPIRV::Extension::Extension> &AllowList);
 };
 } // namespace llvm
 


        


More information about the llvm-branch-commits mailing list