https://github.com/wenju-he created https://github.com/llvm/llvm-project/pull/197144
Fix libclc spirv-unknown-vulkan target build error: `SPIR-V target requires a valid shader stage environment`. libclc clspv triple was canonicalized to `spirv-unknown-vulkan` in 6ef9671. Relax the restriction for libclc which is an OpenCL library that a specific shader stage is not made yet. >From 70391f529f95a8b5de7d041b592030c73dda3fc4 Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Tue, 12 May 2026 12:33:40 +0200 Subject: [PATCH] [OpenCL] Allow spirv-unknown-vulkan without shader stage environment Fix libclc spirv-unknown-vulkan target build error: `SPIR-V target requires a valid shader stage environment`. libclc clspv triple was canonicalized to `spirv-unknown-vulkan` in 6ef9671. Relax the restriction for libclc which is an OpenCL library that a specific shader stage is not made yet. --- clang/include/clang/Basic/DiagnosticFrontendKinds.td | 4 ++-- clang/lib/Basic/Targets/SPIR.h | 7 ++++--- clang/test/CodeGen/target-data.c | 8 ++++++++ clang/test/Driver/spirv-toolchain.cl | 8 ++++++++ clang/test/Frontend/spirv-target-validation.c | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td index f384a97b6825e..23886c5c13ecd 100644 --- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td @@ -45,8 +45,8 @@ def note_fe_backend_plugin: Note<"%0">, BackendInfo; def err_target_spirv_requires_vulkan : Error< "SPIR-V target requires a Vulkan environment">; -def err_target_spirv_requires_shader_stage : Error< - "SPIR-V target requires a valid shader stage environment">; +def err_target_spirv_invalid_shader_stage : Error< + "SPIR-V target requires a valid shader stage or no environment">; def warn_fe_override_module : Warning< "overriding the module target triple with %0">, diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 399904e8a3286..389cc075a3a0b 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -360,9 +360,10 @@ class LLVM_LIBRARY_VISIBILITY SPIRVTargetInfo : public BaseSPIRVTargetInfo { Diags.Report(diag::err_target_spirv_requires_vulkan); return false; } - if (getTriple().getEnvironment() < llvm::Triple::Pixel || - getTriple().getEnvironment() > llvm::Triple::Amplification) { - Diags.Report(diag::err_target_spirv_requires_shader_stage); + if (getTriple().getEnvironment() != llvm::Triple::UnknownEnvironment && + (getTriple().getEnvironment() < llvm::Triple::Pixel || + getTriple().getEnvironment() > llvm::Triple::Amplification)) { + Diags.Report(diag::err_target_spirv_invalid_shader_stage); return false; } return true; diff --git a/clang/test/CodeGen/target-data.c b/clang/test/CodeGen/target-data.c index 3912c22cc8814..a5e0b814c7042 100644 --- a/clang/test/CodeGen/target-data.c +++ b/clang/test/CodeGen/target-data.c @@ -261,6 +261,14 @@ // RUN: FileCheck %s -check-prefix=AMDGPUSPIRV64 // AMDGPUSPIRV64: target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n32:64-S32-G1-P4-A0" +// RUN: %clang_cc1 -triple spirv-unknown-vulkan -o - -emit-llvm %s | \ +// RUN: FileCheck %s -check-prefix=SPIRVVULKAN +// SPIRVVULKAN: target datalayout = "e-ve-i64:64-n8:16:32:64-G10" + +// RUN: %clang_cc1 -triple spirv32-unknown-vulkan -o - -emit-llvm %s | \ +// RUN: FileCheck %s -check-prefix=SPIRV32VULKAN +// SPIRV32VULKAN: target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64-G1" + // RUN: %clang_cc1 -triple spirv64-unknown-vulkan -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=SPIRV64VULKAN // SPIRV64VULKAN: target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64-G1" diff --git a/clang/test/Driver/spirv-toolchain.cl b/clang/test/Driver/spirv-toolchain.cl index c67d0fefd01bc..6fd71caf2fddb 100644 --- a/clang/test/Driver/spirv-toolchain.cl +++ b/clang/test/Driver/spirv-toolchain.cl @@ -4,12 +4,20 @@ // RUN: %clang -### --target=spirv64 -x ir -c %s 2>&1 | FileCheck --check-prefix=SPV64 %s // RUN: %clang -### --target=spirv64 -x clcpp -c %s 2>&1 | FileCheck --check-prefix=SPV64 %s // RUN: %clang -### --target=spirv64 -x c -c %s 2>&1 | FileCheck --check-prefix=SPV64 %s +// RUN: %clang -### --target=spirv-unknown-vulkan -x c -c %s 2>&1 | FileCheck --check-prefix=SPVVK %s +// RUN: %clang -### --target=spirv32-unknown-vulkan -x c -c %s 2>&1 | FileCheck --check-prefix=SPV32VK %s // RUN: %clang -### --target=spirv64-unknown-vulkan -x c -c %s 2>&1 | FileCheck --check-prefix=SPV64VK %s // RUN: %clang -### --target=spirv64-unknown-vulkan1.3 -x c -c %s 2>&1 | FileCheck --check-prefix=SPV64VK %s // SPV64: "-cc1" "-triple" "spirv64" // SPV64-SAME: "-o" {{".*o"}} +// SPVVK: "-cc1" "-triple" "spirv-unknown-vulkan" +// SPVVK-SAME: "-o" {{".*o"}} + +// SPV32VK: "-cc1" "-triple" "spirv32-unknown-vulkan" +// SPV32VK-SAME: "-o" {{".*o"}} + // SPV64VK: "-cc1" "-triple" "spirv64-unknown-vulkan{{(1\.3)?}}" // SPV64VK-SAME: "-o" {{".*o"}} diff --git a/clang/test/Frontend/spirv-target-validation.c b/clang/test/Frontend/spirv-target-validation.c index a463f7ffe7d90..9ac984ec6d70e 100644 --- a/clang/test/Frontend/spirv-target-validation.c +++ b/clang/test/Frontend/spirv-target-validation.c @@ -2,6 +2,6 @@ // RUN: not %clang_cc1 -triple spirv-vulkan-mlibc %s 2>&1 | FileCheck %s --check-prefix=CHECK-SHADER // CHECK-VULKAN: error: SPIR-V target requires a Vulkan environment -// CHECK-SHADER: error: SPIR-V target requires a valid shader stage environment +// CHECK-SHADER: error: SPIR-V target requires a valid shader stage or no environment int main() { return 0; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
