From 87e529e74577549eb1bb3e641adf98e59e971278 Mon Sep 17 00:00:00 2001 From: Marcos Maronas Date: Wed, 29 Oct 2025 11:49:25 +0100 Subject: [PATCH 1/5] Remove -all from -spirv-ext. --- clang/lib/Driver/ToolChains/Clang.cpp | 39 ++++++++++++++++++++------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 90cad2bdbe6a5..a815d8b4dc3aa 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -10490,16 +10490,35 @@ 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=+ and --spirv-ext=- options + // All the extensions disabled by default. + 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. From 82cf72fd23fd9356baf5e9a3f3ff2fddcde5052a Mon Sep 17 00:00:00 2001 From: Marcos Maronas Date: Wed, 29 Oct 2025 12:34:37 +0100 Subject: [PATCH 2/5] Update comment. --- clang/lib/Driver/ToolChains/Clang.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index a815d8b4dc3aa..6f00d2f90e11f 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -10490,7 +10490,9 @@ static void getSPIRVBackendOpts(const llvm::opt::ArgList &TCArgs, TCArgs.MakeArgString("--avoid-spirv-capabilities=Shader")); BackendArgs.push_back( TCArgs.MakeArgString("--translator-compatibility-mode")); - // All the extensions disabled by default. + // All the extensions disabled by default. We do this because there are some + // 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 = From c67d16beaf2ca1584b9a278cd36be0f9c6147a63 Mon Sep 17 00:00:00 2001 From: Marcos Maronas Date: Tue, 28 Oct 2025 18:20:54 +0000 Subject: [PATCH 3/5] [SYCL] Enable only selected SPIR-V extensions for SPIR-V backend. (#20489) SPIR-V backend supports some extensions that our driver doesn't support yet (e.g. SPV_KHR_float_controls2), resulting in errors. This patch stops enabling all the SPIR-V backend supported extensions, and instead enables only a list of selected extensions. The list contains the intersection of extensions enabled for llvm-spirv with the extensions supported by the SPIR-V backend. --- clang/test/Driver/sycl-spirv-backend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/sycl-spirv-backend.cpp b/clang/test/Driver/sycl-spirv-backend.cpp index 7697c1055b3d2..6727889b04590 100644 --- a/clang/test/Driver/sycl-spirv-backend.cpp +++ b/clang/test/Driver/sycl-spirv-backend.cpp @@ -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=-all,+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" From d81b690e6455c7ecde82e914ccfc98643fef5518 Mon Sep 17 00:00:00 2001 From: Marcos Maronas Date: Wed, 29 Oct 2025 13:53:05 +0100 Subject: [PATCH 4/5] Update test. --- clang/test/Driver/sycl-spirv-backend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/sycl-spirv-backend.cpp b/clang/test/Driver/sycl-spirv-backend.cpp index 6727889b04590..f956ca5efce01 100644 --- a/clang/test/Driver/sycl-spirv-backend.cpp +++ b/clang/test/Driver/sycl-spirv-backend.cpp @@ -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=-all,+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" +// 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" From 9b3b727b5e85a7eb056db6d451f0e1586e5c8456 Mon Sep 17 00:00:00 2001 From: Marcos Maronas Date: Wed, 29 Oct 2025 19:32:43 +0100 Subject: [PATCH 5/5] Fix bug. --- clang/lib/Driver/ToolChains/Clang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 6f00d2f90e11f..dca5aa4d068f3 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -10496,7 +10496,7 @@ static void getSPIRVBackendOpts(const llvm::opt::ArgList &TCArgs, 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_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"