LLVM: lib/Target/SPIRV/SPIRVCommandLine.cpp Source File (original) (raw)

31 {"SPV_EXT_shader_atomic_float_add",

32 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_add},

33 {"SPV_EXT_shader_atomic_float16_add",

34 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float16_add},

35 {"SPV_EXT_shader_atomic_float_min_max",

36 SPIRV::Extension::Extension::SPV_EXT_shader_atomic_float_min_max},

37 {"SPV_INTEL_16bit_atomics",

38 SPIRV::Extension::Extension::SPV_INTEL_16bit_atomics},

39 {"SPV_NV_shader_atomic_fp16_vector",

40 SPIRV::Extension::Extension::SPV_NV_shader_atomic_fp16_vector},

41 {"SPV_EXT_arithmetic_fence",

42 SPIRV::Extension::Extension::SPV_EXT_arithmetic_fence},

43 {"SPV_EXT_demote_to_helper_invocation",

44 SPIRV::Extension::Extension::SPV_EXT_demote_to_helper_invocation},

45 {"SPV_EXT_descriptor_indexing",

46 SPIRV::Extension::Extension::SPV_EXT_descriptor_indexing},

47 {"SPV_EXT_fragment_fully_covered",

48 SPIRV::Extension::Extension::SPV_EXT_fragment_fully_covered},

49 {"SPV_EXT_fragment_invocation_density",

50 SPIRV::Extension::Extension::SPV_EXT_fragment_invocation_density},

51 {"SPV_EXT_fragment_shader_interlock",

52 SPIRV::Extension::Extension::SPV_EXT_fragment_shader_interlock},

53 {"SPV_EXT_mesh_shader",

54 SPIRV::Extension::Extension::SPV_EXT_mesh_shader},

55 {"SPV_EXT_shader_stencil_export",

56 SPIRV::Extension::Extension::SPV_EXT_shader_stencil_export},

57 {"SPV_EXT_shader_viewport_index_layer",

58 SPIRV::Extension::Extension::SPV_EXT_shader_viewport_index_layer},

59 {"SPV_GOOGLE_hlsl_functionality1",

60 SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1},

61 {"SPV_GOOGLE_user_type",

62 SPIRV::Extension::Extension::SPV_GOOGLE_user_type},

63 {"SPV_ALTERA_arbitrary_precision_integers",

64 SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_integers},

65 {"SPV_INTEL_cache_controls",

66 SPIRV::Extension::Extension::SPV_INTEL_cache_controls},

67 {"SPV_INTEL_float_controls2",

68 SPIRV::Extension::Extension::SPV_INTEL_float_controls2},

69 {"SPV_INTEL_global_variable_fpga_decorations",

70 SPIRV::Extension::Extension::

71 SPV_INTEL_global_variable_fpga_decorations},

72 {"SPV_INTEL_global_variable_host_access",

73 SPIRV::Extension::Extension::SPV_INTEL_global_variable_host_access},

74 {"SPV_INTEL_optnone", SPIRV::Extension::Extension::SPV_INTEL_optnone},

75 {"SPV_EXT_optnone", SPIRV::Extension::Extension::SPV_EXT_optnone},

76 {"SPV_INTEL_usm_storage_classes",

77 SPIRV::Extension::Extension::SPV_INTEL_usm_storage_classes},

78 {"SPV_INTEL_split_barrier",

79 SPIRV::Extension::Extension::SPV_INTEL_split_barrier},

80 {"SPV_INTEL_subgroups",

81 SPIRV::Extension::Extension::SPV_INTEL_subgroups},

82 {"SPV_INTEL_media_block_io",

83 SPIRV::Extension::Extension::SPV_INTEL_media_block_io},

84 {"SPV_INTEL_memory_access_aliasing",

85 SPIRV::Extension::Extension::SPV_INTEL_memory_access_aliasing},

86 {"SPV_INTEL_joint_matrix",

87 SPIRV::Extension::Extension::SPV_INTEL_joint_matrix},

88 {"SPV_KHR_16bit_storage",

89 SPIRV::Extension::Extension::SPV_KHR_16bit_storage},

90 {"SPV_KHR_device_group",

91 SPIRV::Extension::Extension::SPV_KHR_device_group},

92 {"SPV_KHR_fragment_shading_rate",

93 SPIRV::Extension::Extension::SPV_KHR_fragment_shading_rate},

94 {"SPV_KHR_multiview", SPIRV::Extension::Extension::SPV_KHR_multiview},

95 {"SPV_KHR_post_depth_coverage",

96 SPIRV::Extension::Extension::SPV_KHR_post_depth_coverage},

97 {"SPV_KHR_shader_draw_parameters",

98 SPIRV::Extension::Extension::SPV_KHR_shader_draw_parameters},

99 {"SPV_KHR_ray_tracing",

100 SPIRV::Extension::Extension::SPV_KHR_ray_tracing},

101 {"SPV_KHR_uniform_group_instructions",

102 SPIRV::Extension::Extension::SPV_KHR_uniform_group_instructions},

103 {"SPV_KHR_no_integer_wrap_decoration",

104 SPIRV::Extension::Extension::SPV_KHR_no_integer_wrap_decoration},

105 {"SPV_KHR_float_controls",

106 SPIRV::Extension::Extension::SPV_KHR_float_controls},

107 {"SPV_KHR_expect_assume",

108 SPIRV::Extension::Extension::SPV_KHR_expect_assume},

109 {"SPV_KHR_bit_instructions",

110 SPIRV::Extension::Extension::SPV_KHR_bit_instructions},

111 {"SPV_KHR_integer_dot_product",

112 SPIRV::Extension::Extension::SPV_KHR_integer_dot_product},

113 {"SPV_KHR_linkonce_odr",

114 SPIRV::Extension::Extension::SPV_KHR_linkonce_odr},

115 {"SPV_INTEL_inline_assembly",

116 SPIRV::Extension::Extension::SPV_INTEL_inline_assembly},

117 {"SPV_INTEL_bindless_images",

118 SPIRV::Extension::Extension::SPV_INTEL_bindless_images},

119 {"SPV_INTEL_bfloat16_arithmetic",

120 SPIRV::Extension::Extension::SPV_INTEL_bfloat16_arithmetic},

121 {"SPV_INTEL_bfloat16_conversion",

122 SPIRV::Extension::Extension::SPV_INTEL_bfloat16_conversion},

123 {"SPV_KHR_subgroup_rotate",

124 SPIRV::Extension::Extension::SPV_KHR_subgroup_rotate},

125 {"SPV_INTEL_variable_length_array",

126 SPIRV::Extension::Extension::SPV_INTEL_variable_length_array},

127 {"SPV_INTEL_function_pointers",

128 SPIRV::Extension::Extension::SPV_INTEL_function_pointers},

129 {"SPV_KHR_shader_clock",

130 SPIRV::Extension::Extension::SPV_KHR_shader_clock},

131 {"SPV_KHR_cooperative_matrix",

132 SPIRV::Extension::Extension::SPV_KHR_cooperative_matrix},

133 {"SPV_KHR_non_semantic_info",

134 SPIRV::Extension::Extension::SPV_KHR_non_semantic_info},

135 {"SPV_KHR_ray_query", SPIRV::Extension::Extension::SPV_KHR_ray_query},

136 {"SPV_EXT_shader_image_int64",

137 SPIRV::Extension::Extension::SPV_EXT_shader_image_int64},

138 {"SPV_KHR_fragment_shader_barycentric",

139 SPIRV::Extension::Extension::SPV_KHR_fragment_shader_barycentric},

140 {"SPV_KHR_physical_storage_buffer",

141 SPIRV::Extension::Extension::SPV_KHR_physical_storage_buffer},

142 {"SPV_KHR_vulkan_memory_model",

143 SPIRV::Extension::Extension::SPV_KHR_vulkan_memory_model},

144 {"SPV_NV_shader_subgroup_partitioned",

145 SPIRV::Extension::Extension::SPV_NV_shader_subgroup_partitioned},

146 {"SPV_INTEL_long_composites",

147 SPIRV::Extension::Extension::SPV_INTEL_long_composites},

148 {"SPV_INTEL_fp_max_error",

149 SPIRV::Extension::Extension::SPV_INTEL_fp_max_error},

150 {"SPV_INTEL_subgroup_matrix_multiply_accumulate",

151 SPIRV::Extension::Extension::

152 SPV_INTEL_subgroup_matrix_multiply_accumulate},

153 {"SPV_INTEL_ternary_bitwise_function",

154 SPIRV::Extension::Extension::SPV_INTEL_ternary_bitwise_function},

155 {"SPV_INTEL_2d_block_io",

156 SPIRV::Extension::Extension::SPV_INTEL_2d_block_io},

157 {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},

158 {"SPV_KHR_float_controls2",

159 SPIRV::Extension::Extension::SPV_KHR_float_controls2},

160 {"SPV_INTEL_tensor_float32_conversion",

161 SPIRV::Extension::Extension::SPV_INTEL_tensor_float32_conversion},

162 {"SPV_KHR_bfloat16", SPIRV::Extension::Extension::SPV_KHR_bfloat16},

163 {"SPV_EXT_relaxed_printf_string_address_space",

164 SPIRV::Extension::Extension::

165 SPV_EXT_relaxed_printf_string_address_space},

166 {"SPV_INTEL_predicated_io",

167 SPIRV::Extension::Extension::SPV_INTEL_predicated_io},

168 {"SPV_KHR_maximal_reconvergence",

169 SPIRV::Extension::Extension::SPV_KHR_maximal_reconvergence},

170 {"SPV_INTEL_kernel_attributes",

171 SPIRV::Extension::Extension::SPV_INTEL_kernel_attributes},

172 {"SPV_ALTERA_blocking_pipes",

173 SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes},

174 {"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},

175 {"SPV_ALTERA_arbitrary_precision_fixed_point",

176 SPIRV::Extension::Extension::

177 SPV_ALTERA_arbitrary_precision_fixed_point}};

181 std::setSPIRV::Extension::Extension &Vals) {

183 ArgValue.split(Tokens, ",", -1, false);

184 llvm::sort(Tokens, [](auto &&LHS, auto &&RHS) {

185

186

187

188

189 if (LHS == "all")

190 return true;

191 if (RHS == "all")

192 return false;

193 return !(RHS < LHS);

194 });

195

196 std::setSPIRV::Extension::Extension EnabledExtensions;

197

198 for (const auto &Token : Tokens) {

199 if (Token == "all") {

200 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)

201 EnabledExtensions.insert(ExtensionEnum);

202

203 continue;

204 }

205

206 if (Token.size() == 3 && Token.upper() == "KHR") {

207 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)

209 EnabledExtensions.insert(ExtensionEnum);

210 continue;

211 }

212

213 if (Token.empty() || (!Token.starts_with("+") && !Token.starts_with("-")))

214 return O.error("Invalid extension list format: " + Token.str());

215

218

220 return O.error("Unknown SPIR-V extension: " + Token.str());

221

222 if (Token.starts_with("+")) {

223 EnabledExtensions.insert(NameValuePair->second);

224 } else if (EnabledExtensions.count(NameValuePair->second)) {

226 return O.error(

227 "Extension cannot be allowed and disallowed at the same time: " +

228 ExtensionName.str());

229

230 EnabledExtensions.erase(NameValuePair->second);

231 }

232 }

233

234 Vals = std::move(EnabledExtensions);

235 return false;

236}

239 const std::vectorstd::string &ExtNames,

240 std::setSPIRV::Extension::Extension &AllowedExtensions) {

241 for (const auto &Ext : ExtNames) {

242 if (Ext == "all") {

243 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap)

244 AllowedExtensions.insert(ExtensionEnum);

245 break;

246 }

249 return Ext;

250 AllowedExtensions.insert(It->second);

251 }

253}

257 std::setSPIRV::Extension::Extension R;

258 SPIRV::Environment::Environment CurrentEnvironment =

259 SPIRV::Environment::Environment::EnvOpenCL;

261 CurrentEnvironment = SPIRV::Environment::Environment::EnvVulkan;

262

263 for (const auto &[ExtensionName, ExtensionEnum] : SPIRVExtensionMap) {

265 SPIRV::OperandCategory::OperandCategory::ExtensionOperand,

266 ExtensionEnum);

267

269 R.insert(ExtensionEnum);

270 }

271

273

274

275 R.erase(SPIRV::Extension::SPV_KHR_float_controls2);

276 }

277

278 return R;

279}