Skip to content

Commit a7e993a

Browse files
maarquitos14jsji
authored andcommitted
[SYCL][SPIRV BE] Enable only selected SPIR-V extensions for SPIR-V backend.(#20497)
20489 had to be reverted because -spirv-ext=-all is not valid in the SPIR-V BE. All the extensions are disabled by default, so we only need to explicitly enable those we require.
1 parent f5d8456 commit a7e993a

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10446,16 +10446,37 @@ static void getSPIRVBackendOpts(const llvm::opt::ArgList &TCArgs,
1044610446
TCArgs.MakeArgString("--avoid-spirv-capabilities=Shader"));
1044710447
BackendArgs.push_back(
1044810448
TCArgs.MakeArgString("--translator-compatibility-mode"));
10449-
// TODO: A list of SPIR-V extensions that are supported by the SPIR-V backend
10450-
// is growing. Let's postpone the decision on which extensions to enable until
10451-
// - the list is stable, and
10452-
// - we decide on a mapping of user requested extensions into backend's ones.
10453-
// Meanwhile we enable all the SPIR-V backend extensions.
10454-
BackendArgs.push_back(TCArgs.MakeArgString("--spirv-ext=all"));
10455-
// TODO:
10456-
// - handle -Xspirv-translator option to avoid "argument unused during
10457-
// compilation" error
10458-
// - handle --spirv-ext=+<extension> and --spirv-ext=-<extension> options
10449+
// All the extensions disabled by default. We do this because there are some
10450+
// extensions supported by the SPIR-V Backend that are not supported by our
10451+
// driver.
10452+
std::string ExtArg("-spirv-ext=");
10453+
// Enable only those we require.
10454+
std::string DefaultExtArg =
10455+
",+SPV_EXT_shader_atomic_float_add,+SPV_EXT_shader_atomic_float_min_max"
10456+
",+SPV_KHR_no_integer_wrap_decoration,+SPV_KHR_float_controls"
10457+
",+SPV_KHR_expect_assume,+SPV_KHR_linkonce_odr";
10458+
std::string INTELExtArg = ",+SPV_INTEL_subgroups,+SPV_INTEL_media_block_io"
10459+
",+SPV_INTEL_function_pointers"
10460+
",+SPV_INTEL_inline_assembly"
10461+
",+SPV_INTEL_arbitrary_precision_integers"
10462+
",+SPV_INTEL_float_controls2"
10463+
",+SPV_INTEL_variable_length_array"
10464+
",+SPV_INTEL_long_composites"
10465+
",+SPV_INTEL_cache_controls"
10466+
",+SPV_KHR_shader_clock"
10467+
",+SPV_INTEL_bindless_images";
10468+
ExtArg = ExtArg + DefaultExtArg + INTELExtArg;
10469+
ExtArg += ",+SPV_INTEL_bfloat16_conversion"
10470+
",+SPV_INTEL_joint_matrix"
10471+
",+SPV_KHR_uniform_group_instructions"
10472+
",+SPV_INTEL_tensor_float32_conversion"
10473+
",+SPV_INTEL_optnone"
10474+
",+SPV_KHR_non_semantic_info"
10475+
",+SPV_KHR_cooperative_matrix"
10476+
",+SPV_EXT_shader_atomic_float16_add"
10477+
",+SPV_INTEL_fp_max_error";
10478+
10479+
BackendArgs.push_back(TCArgs.MakeArgString(ExtArg));
1045910480
}
1046010481

1046110482
// Utility function to gather all llvm-spirv options.

clang/test/Driver/sycl-spirv-backend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
///
44
// RUN: %clangxx -fsycl -fsycl-use-spirv-backend-for-spirv-gen -### %s 2>&1 | FileCheck %s
55

6-
// CHECK: llc{{.*}} "-filetype=obj" "-mtriple=spirv64{{[^-]*}}-unknown-unknown" "--avoid-spirv-capabilities=Shader" "--translator-compatibility-mode" "--spirv-ext=
6+
// CHECK: llc{{.*}} "-filetype=obj" "-mtriple=spirv64{{[^-]*}}-unknown-unknown" "--avoid-spirv-capabilities=Shader" "--translator-compatibility-mode" "-spirv-ext=+SPV_EXT_shader_atomic_float_add,+SPV_EXT_shader_atomic_float_min_max,+SPV_KHR_no_integer_wrap_decoration,+SPV_KHR_float_controls,+SPV_KHR_expect_assume,+SPV_KHR_linkonce_odr,+SPV_INTEL_subgroups,+SPV_INTEL_media_block_io,+SPV_INTEL_function_pointers,+SPV_INTEL_inline_assembly,+SPV_INTEL_arbitrary_precision_integers,+SPV_INTEL_float_controls2,+SPV_INTEL_variable_length_array,+SPV_INTEL_long_composites,+SPV_INTEL_cache_controls,+SPV_KHR_shader_clock,+SPV_INTEL_bindless_images,+SPV_INTEL_bfloat16_conversion,+SPV_INTEL_joint_matrix,+SPV_KHR_uniform_group_instructions,+SPV_INTEL_tensor_float32_conversion,+SPV_INTEL_optnone,+SPV_KHR_non_semantic_info,+SPV_KHR_cooperative_matrix,+SPV_EXT_shader_atomic_float16_add,+SPV_INTEL_fp_max_error"

0 commit comments

Comments
 (0)