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}