From 94251a8a2b9e51696e5f1219619188f67b96d118 Mon Sep 17 00:00:00 2001 From: Nick Sarnie Date: Wed, 25 Feb 2026 08:13:41 -0800 Subject: [PATCH] [SPIRV] Fix disabling of default extensions Signed-off-by: Nick Sarnie --- llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp | 7 +++++-- llvm/lib/Target/SPIRV/SPIRVCommandLine.h | 3 +++ .../non-constant-printf.ll | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp index e336cf8dbaca1..31c7a61e1a3d8 100644 --- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp @@ -28,6 +28,8 @@ using namespace llvm; +std::set SPIRVExtensionsParser::DisabledExtensions; + static const std::map SPIRVExtensionMap = { {"SPV_EXT_shader_atomic_float_add", @@ -231,7 +233,7 @@ bool SPIRVExtensionsParser::parse(cl::Option &O, StringRef ArgName, return O.error( "Extension cannot be allowed and disallowed at the same time: " + NameValuePair->first); - + DisabledExtensions.insert(NameValuePair->second); Vals.erase(NameValuePair->second); } @@ -270,7 +272,8 @@ SPIRVExtensionsParser::getValidExtensions(const Triple &TT) { SPIRV::OperandCategory::OperandCategory::ExtensionOperand, ExtensionEnum); - if (llvm::is_contained(AllowedEnv, CurrentEnvironment)) + if (llvm::is_contained(AllowedEnv, CurrentEnvironment) && + !llvm::is_contained(DisabledExtensions, ExtensionEnum)) R.insert(ExtensionEnum); } diff --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.h b/llvm/lib/Target/SPIRV/SPIRVCommandLine.h index 02e847b322a77..03dba5915d06e 100644 --- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.h +++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.h @@ -48,6 +48,9 @@ struct SPIRVExtensionsParser /// target environment (i.e., OpenCL or Vulkan). static std::set getValidExtensions(const Triple &TT); + +private: + static std::set DisabledExtensions; }; } // namespace llvm diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_EXT_relaxed_printf_string_address_space/non-constant-printf.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_EXT_relaxed_printf_string_address_space/non-constant-printf.ll index cdbb1605afdd1..5a330dad47aa3 100644 --- a/llvm/test/CodeGen/SPIRV/extensions/SPV_EXT_relaxed_printf_string_address_space/non-constant-printf.ll +++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_EXT_relaxed_printf_string_address_space/non-constant-printf.ll @@ -1,6 +1,9 @@ ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_EXT_relaxed_printf_string_address_space %s -o - | FileCheck %s ; RUN: llc -O0 -mtriple=spirv32-intel-unknown %s -o - | FileCheck %s ; RUN: not llc -O0 -mtriple=spirv32-unknown-unknown %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR +; RUN: not llc -O0 -mtriple=spirv32-intel-unknown --spirv-ext=-SPV_EXT_relaxed_printf_string_address_space %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR +; RUN: not llc -O0 -mtriple=spirv32-intel-unknown --spirv-ext=all,-SPV_EXT_relaxed_printf_string_address_space %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR +; RUN: not llc -O0 -mtriple=spirv32-intel-unknown --spirv-ext=-SPV_EXT_relaxed_printf_string_address_space,all %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR ; CHECK: OpExtension "SPV_EXT_relaxed_printf_string_address_space" ; CHECK: %[[#ExtInstSetId:]] = OpExtInstImport "OpenCL.std"