Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 31 additions & 10 deletions clang/lib/Driver/ToolChains/Clang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10490,16 +10490,37 @@ static void getSPIRVBackendOpts(const llvm::opt::ArgList &TCArgs,
TCArgs.MakeArgString("--avoid-spirv-capabilities=Shader"));
BackendArgs.push_back(
TCArgs.MakeArgString("--translator-compatibility-mode"));
// TODO: A list of SPIR-V extensions that are supported by the SPIR-V backend
// is growing. Let's postpone the decision on which extensions to enable until
// - the list is stable, and
// - we decide on a mapping of user requested extensions into backend's ones.
// Meanwhile we enable all the SPIR-V backend extensions.
BackendArgs.push_back(TCArgs.MakeArgString("--spirv-ext=all"));
// TODO:
// - handle -Xspirv-translator option to avoid "argument unused during
// compilation" error
// - handle --spirv-ext=+<extension> and --spirv-ext=-<extension> options
// All the extensions disabled by default. We do this because there are some
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: All the extensions are disabled by default.

// extensions supported by the SPIR-V Backend that are not supported by our
// driver.
std::string ExtArg("-spirv-ext=");
// Enable only those we require.
std::string DefaultExtArg =
"+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";
std::string INTELExtArg = ",+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";
ExtArg = ExtArg + DefaultExtArg + INTELExtArg;
ExtArg += ",+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";

BackendArgs.push_back(TCArgs.MakeArgString(ExtArg));
}

// Utility function to gather all llvm-spirv options.
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Driver/sycl-spirv-backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
///
// RUN: %clangxx -fsycl -fsycl-use-spirv-backend-for-spirv-gen -### %s 2>&1 | FileCheck %s

// CHECK: llc{{.*}} "-filetype=obj" "-mtriple=spirv64{{[^-]*}}-unknown-unknown" "--avoid-spirv-capabilities=Shader" "--translator-compatibility-mode" "--spirv-ext=
// 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"
Loading