[mlir][spirv] Add extensions implied by SPIR-V 1.6
authorJakub Kuderski <kubak@google.com>
Mon, 5 Dec 2022 22:40:29 +0000 (17:40 -0500)
committerJakub Kuderski <kubak@google.com>
Mon, 5 Dec 2022 22:40:29 +0000 (17:40 -0500)
This adds existing extensions as implied by SPIR-V 1.6.

Also clean up the surrounding code.

Fixes: https://github.com/llvm/llvm-project/issues/59348.

Reviewed By: antiagainst

Differential Revision: https://reviews.llvm.org/D139369

mlir/include/mlir/Dialect/SPIRV/IR/SPIRVBase.td
mlir/lib/Dialect/SPIRV/IR/SPIRVEnums.cpp

index 8fa89a1..3c993cb 100644 (file)
@@ -340,6 +340,8 @@ def SPV_KHR_fragment_shader_barycentric      : I32EnumAttrCase<"SPV_KHR_fragment
 def SPV_KHR_ray_cull_mask                    : I32EnumAttrCase<"SPV_KHR_ray_cull_mask", 26>;
 def SPV_KHR_uniform_group_instructions       : I32EnumAttrCase<"SPV_KHR_uniform_group_instructions", 27>;
 def SPV_KHR_subgroup_rotate                  : I32EnumAttrCase<"SPV_KHR_subgroup_rotate", 28>;
+def SPV_KHR_non_semantic_info                : I32EnumAttrCase<"SPV_KHR_non_semantic_info", 29>;
+def SPV_KHR_terminate_invocation             : I32EnumAttrCase<"SPV_KHR_terminate_invocation", 30>;
 
 def SPV_EXT_demote_to_helper_invocation  : I32EnumAttrCase<"SPV_EXT_demote_to_helper_invocation", 1000>;
 def SPV_EXT_descriptor_indexing          : I32EnumAttrCase<"SPV_EXT_descriptor_indexing", 1001>;
@@ -430,6 +432,7 @@ def SPIRV_ExtensionAttr :
       SPV_KHR_ray_tracing, SPV_KHR_subgroup_uniform_control_flow, SPV_KHR_linkonce_odr,
       SPV_KHR_fragment_shader_barycentric, SPV_KHR_ray_cull_mask,
       SPV_KHR_uniform_group_instructions, SPV_KHR_subgroup_rotate,
+      SPV_KHR_non_semantic_info, SPV_KHR_terminate_invocation,
       SPV_EXT_demote_to_helper_invocation, SPV_EXT_descriptor_indexing,
       SPV_EXT_fragment_fully_covered, SPV_EXT_fragment_invocation_density,
       SPV_EXT_fragment_shader_interlock, SPV_EXT_physical_storage_buffer,
index a9b97c2..8ce56ec 100644 (file)
 
 #include "mlir/Dialect/SPIRV/IR/SPIRVEnums.h"
 
-#include "mlir/IR/BuiltinTypes.h"
-
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/StringExtras.h"
-#include "llvm/ADT/StringRef.h"
 
 #include <iterator>
 
@@ -54,25 +51,37 @@ ArrayRef<spirv::Extension> spirv::getImpliedExtensions(spirv::Version version) {
       Extension::SPV_KHR_physical_storage_buffer,                              \
       Extension::SPV_KHR_vulkan_memory_model
 
+#define V_1_6_IMPLIED_EXTS                                                     \
+  Extension::SPV_KHR_non_semantic_info,                                        \
+      Extension::SPV_KHR_integer_dot_product,                                  \
+      Extension::SPV_KHR_terminate_invocation,                                 \
+      Extension::SPV_EXT_demote_to_helper_invocation
+
   switch (version) {
   default:
     return {};
   case Version::V_1_3: {
     // The following manual ArrayRef constructor call is to satisfy GCC 5.
     static const Extension exts[] = {V_1_3_IMPLIED_EXTS};
-    return ArrayRef<spirv::Extension>(exts, std::size(exts));
+    return exts;
   }
   case Version::V_1_4: {
     static const Extension exts[] = {V_1_3_IMPLIED_EXTS, V_1_4_IMPLIED_EXTS};
-    return ArrayRef<spirv::Extension>(exts, std::size(exts));
+    return exts;
   }
   case Version::V_1_5: {
     static const Extension exts[] = {V_1_3_IMPLIED_EXTS, V_1_4_IMPLIED_EXTS,
                                      V_1_5_IMPLIED_EXTS};
-    return ArrayRef<spirv::Extension>(exts, std::size(exts));
+    return exts;
+  }
+  case Version::V_1_6: {
+    static const Extension exts[] = {V_1_3_IMPLIED_EXTS, V_1_4_IMPLIED_EXTS,
+                                     V_1_5_IMPLIED_EXTS, V_1_6_IMPLIED_EXTS};
+    return exts;
   }
   }
 
+#undef V_1_6_IMPLIED_EXTS
 #undef V_1_5_IMPLIED_EXTS
 #undef V_1_4_IMPLIED_EXTS
 #undef V_1_3_IMPLIED_EXTS