LLVM: lib/Target/SPIRV/SPIRVCommandLine.cpp Source File (original) (raw)
26 {"SPV_EXT_shader_atomic_float_add",
27 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_add},
28 {"SPV_EXT_shader_atomic_float16_add",
29 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float16_add},
30 {"SPV_EXT_shader_atomic_float_min_max",
31 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_min_max},
32 {"SPV_INTEL_16bit_atomics",
33 SPIRV::Extension::Extension::SPV_INTEL_16bit_atomics},
34 {"SPV_NV_shader_atomic_fp16_vector",
35 SPIRV::Extension::Extension::SPV_NV_shader_atomic_fp16_vector},
36 {"SPV_EXT_arithmetic_fence",
37 SPIRV::Extension::Extension::SPV_EXT_arithmetic_fence},
38 {"SPV_EXT_demote_to_helper_invocation",
39 SPIRV::Extension::Extension::SPV_EXT_demote_to_helper_invocation},
40 {"SPV_EXT_descriptor_indexing",
41 SPIRV::Extension::Extension::SPV_EXT_descriptor_indexing},
42 {"SPV_EXT_fragment_fully_covered",
43 SPIRV::Extension::Extension::SPV_EXT_fragment_fully_covered},
44 {"SPV_EXT_fragment_invocation_density",
45 SPIRV::Extension::Extension::SPV_EXT_fragment_invocation_density},
46 {"SPV_EXT_fragment_shader_interlock",
47 SPIRV::Extension::Extension::SPV_EXT_fragment_shader_interlock},
48 {"SPV_EXT_mesh_shader",
49 SPIRV::Extension::Extension::SPV_EXT_mesh_shader},
50 {"SPV_EXT_shader_stencil_export",
51 SPIRV::Extension::Extension::SPV_EXT_shader_stencil_export},
52 {"SPV_EXT_shader_viewport_index_layer",
53 SPIRV::Extension::Extension::SPV_EXT_shader_viewport_index_layer},
54 {"SPV_GOOGLE_hlsl_functionality1",
55 SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1},
56 {"SPV_GOOGLE_user_type",
57 SPIRV::Extension::Extension::SPV_GOOGLE_user_type},
58 {"SPV_ALTERA_arbitrary_precision_integers",
59 SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_integers},
60 {"SPV_INTEL_cache_controls",
61 SPIRV::Extension::Extension::SPV_INTEL_cache_controls},
62 {"SPV_INTEL_float_controls2",
63 SPIRV::Extension::Extension::SPV_INTEL_float_controls2},
64 {"SPV_INTEL_global_variable_fpga_decorations",
65 SPIRV::Extension::Extension::
66 SPV_INTEL_global_variable_fpga_decorations},
67 {"SPV_INTEL_global_variable_host_access",
68 SPIRV::Extension::Extension::SPV_INTEL_global_variable_host_access},
69 {"SPV_INTEL_optnone", SPIRV::Extension::Extension::SPV_INTEL_optnone},
70 {"SPV_EXT_optnone", SPIRV::Extension::Extension::SPV_EXT_optnone},
71 {"SPV_INTEL_usm_storage_classes",
72 SPIRV::Extension::Extension::SPV_INTEL_usm_storage_classes},
73 {"SPV_INTEL_split_barrier",
74 SPIRV::Extension::Extension::SPV_INTEL_split_barrier},
75 {"SPV_INTEL_subgroups",
76 SPIRV::Extension::Extension::SPV_INTEL_subgroups},
77 {"SPV_INTEL_media_block_io",
78 SPIRV::Extension::Extension::SPV_INTEL_media_block_io},
79 {"SPV_INTEL_memory_access_aliasing",
80 SPIRV::Extension::Extension::SPV_INTEL_memory_access_aliasing},
81 {"SPV_INTEL_joint_matrix",
82 SPIRV::Extension::Extension::SPV_INTEL_joint_matrix},
83 {"SPV_KHR_16bit_storage",
84 SPIRV::Extension::Extension::SPV_KHR_16bit_storage},
85 {"SPV_KHR_device_group",
86 SPIRV::Extension::Extension::SPV_KHR_device_group},
87 {"SPV_KHR_fragment_shading_rate",
88 SPIRV::Extension::Extension::SPV_KHR_fragment_shading_rate},
89 {"SPV_KHR_multiview", SPIRV::Extension::Extension::SPV_KHR_multiview},
90 {"SPV_KHR_post_depth_coverage",
91 SPIRV::Extension::Extension::SPV_KHR_post_depth_coverage},
92 {"SPV_KHR_shader_draw_parameters",
93 SPIRV::Extension::Extension::SPV_KHR_shader_draw_parameters},
94 {"SPV_KHR_ray_tracing",
95 SPIRV::Extension::Extension::SPV_KHR_ray_tracing},
96 {"SPV_KHR_uniform_group_instructions",
97 SPIRV::Extension::Extension::SPV_KHR_uniform_group_instructions},
98 {"SPV_KHR_no_integer_wrap_decoration",
99 SPIRV::Extension::Extension::SPV_KHR_no_integer_wrap_decoration},
100 {"SPV_KHR_float_controls",
101 SPIRV::Extension::Extension::SPV_KHR_float_controls},
102 {"SPV_KHR_expect_assume",
103 SPIRV::Extension::Extension::SPV_KHR_expect_assume},
104 {"SPV_KHR_bit_instructions",
105 SPIRV::Extension::Extension::SPV_KHR_bit_instructions},
106 {"SPV_KHR_integer_dot_product",
107 SPIRV::Extension::Extension::SPV_KHR_integer_dot_product},
108 {"SPV_KHR_linkonce_odr",
109 SPIRV::Extension::Extension::SPV_KHR_linkonce_odr},
110 {"SPV_INTEL_inline_assembly",
111 SPIRV::Extension::Extension::SPV_INTEL_inline_assembly},
112 {"SPV_INTEL_bindless_images",
113 SPIRV::Extension::Extension::SPV_INTEL_bindless_images},
114 {"SPV_INTEL_bfloat16_arithmetic",
115 SPIRV::Extension::Extension::SPV_INTEL_bfloat16_arithmetic},
116 {"SPV_INTEL_bfloat16_conversion",
117 SPIRV::Extension::Extension::SPV_INTEL_bfloat16_conversion},
118 {"SPV_KHR_subgroup_rotate",
119 SPIRV::Extension::Extension::SPV_KHR_subgroup_rotate},
120 {"SPV_INTEL_variable_length_array",
121 SPIRV::Extension::Extension::SPV_INTEL_variable_length_array},
122 {"SPV_INTEL_function_pointers",
123 SPIRV::Extension::Extension::SPV_INTEL_function_pointers},
124 {"SPV_KHR_shader_clock",
125 SPIRV::Extension::Extension::SPV_KHR_shader_clock},
126 {"SPV_KHR_cooperative_matrix",
127 SPIRV::Extension::Extension::SPV_KHR_cooperative_matrix},
128 {"SPV_KHR_non_semantic_info",
129 SPIRV::Extension::Extension::SPV_KHR_non_semantic_info},
130 {"SPV_KHR_ray_query", SPIRV::Extension::Extension::SPV_KHR_ray_query},
131 {"SPV_EXT_shader_image_int64",
132 SPIRV::Extension::Extension::SPV_EXT_shader_image_int64},
133 {"SPV_KHR_fragment_shader_barycentric",
134 SPIRV::Extension::Extension::SPV_KHR_fragment_shader_barycentric},
135 {"SPV_KHR_physical_storage_buffer",
136 SPIRV::Extension::Extension::SPV_KHR_physical_storage_buffer},
137 {"SPV_KHR_vulkan_memory_model",
138 SPIRV::Extension::Extension::SPV_KHR_vulkan_memory_model},
139 {"SPV_NV_shader_subgroup_partitioned",
140 SPIRV::Extension::Extension::SPV_NV_shader_subgroup_partitioned},
141 {"SPV_INTEL_long_composites",
142 SPIRV::Extension::Extension::SPV_INTEL_long_composites},
143 {"SPV_INTEL_fp_max_error",
144 SPIRV::Extension::Extension::SPV_INTEL_fp_max_error},
145 {"SPV_INTEL_subgroup_matrix_multiply_accumulate",
146 SPIRV::Extension::Extension::
147 SPV_INTEL_subgroup_matrix_multiply_accumulate},
148 {"SPV_INTEL_ternary_bitwise_function",
149 SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function},
150 {"SPV_INTEL_2d_block_io",
151 SPIRV::Extension::Extension::SPV_INTEL_2d_block_io},
152 {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
153 {"SPV_KHR_float_controls2",
154 SPIRV::Extension::Extension::SPV_KHR_float_controls2},
155 {"SPV_INTEL_tensor_float32_conversion",
156 SPIRV::Extension::Extension::SPV_INTEL_tensor_float32_conversion},
157 {"SPV_KHR_bfloat16", SPIRV::Extension::Extension::SPV_KHR_bfloat16},
158 {"SPV_EXT_relaxed_printf_string_address_space",
159 SPIRV::Extension::Extension::
160 SPV_EXT_relaxed_printf_string_address_space},
161 {"SPV_INTEL_predicated_io",
162 SPIRV::Extension::Extension::SPV_INTEL_predicated_io},
163 {"SPV_KHR_maximal_reconvergence",
164 SPIRV::Extension::Extension::SPV_KHR_maximal_reconvergence},
165 {"SPV_INTEL_kernel_attributes",
166 SPIRV::Extension::Extension::SPV_INTEL_kernel_attributes},
167 {"SPV_ALTERA_blocking_pipes",
168 SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes},
169 {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
170 {"SPV_ALTERA_arbitrary_precision_fixed_point",
171 SPIRV::Extension::Extension::
172 SPV_ALTERA_arbitrary_precision_fixed_point}};
176 std::setSPIRV::Extension::Extension &Vals) {
178 ArgValue.split(Tokens, ",", -1, false);
179 std::sort(Tokens.begin(), Tokens.end());
180
181 std::setSPIRV::Extension::Extension EnabledExtensions;
182
183 for (const auto &Token : Tokens) {
184 if (Token == "all") {
185 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)
186 EnabledExtensions.insert(ExtensionEnum);
187
188 continue;
189 }
190
191 if (Token.size() == 3 && Token.upper() == "KHR") {
192 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)
194 EnabledExtensions.insert(ExtensionEnum);
195 continue;
196 }
197
198 if (Token.empty() || (!Token.starts_with("+") && !Token.starts_with("-")))
199 return O.error("Invalid extension list format: " + Token.str());
200
203
205 return O.error("Unknown SPIR-V extension: " + Token.str());
206
207 if (Token.starts_with("+")) {
208 EnabledExtensions.insert(NameValuePair->second);
209 } else if (EnabledExtensions.count(NameValuePair->second)) {
211 return O.error(
212 "Extension cannot be allowed and disallowed at the same time: " +
213 ExtensionName.str());
214
215 EnabledExtensions.erase(NameValuePair->second);
216 }
217 }
218
219 Vals = std::move(EnabledExtensions);
220 return false;
221}
224 const std::vectorstd::string &ExtNames,
225 std::setSPIRV::Extension::Extension &AllowedExtensions) {
226 for (const auto &Ext : ExtNames) {
227 if (Ext == "all") {
228 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)
229 AllowedExtensions.insert(ExtensionEnum);
230 break;
231 }
234 return Ext;
235 AllowedExtensions.insert(It->second);
236 }
238}
242 std::setSPIRV::Extension::Extension R;
243 SPIRV::Environment::Environment CurrentEnvironment =
244 SPIRV::Environment::Environment::EnvOpenCL;
246 CurrentEnvironment = SPIRV::Environment::Environment::EnvVulkan;
247
248 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap) {
250 SPIRV::OperandCategory::OperandCategory::ExtensionOperand,
251 ExtensionEnum);
252
254 R.insert(ExtensionEnum);
255 }
256
258
259
260 R.erase(SPIRV::Extension::SPV_KHR_float_controls2);
261 }
262
263 return R;
264}