llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Wenju He (wenju-he) <details> <summary>Changes</summary> Fix libclc `spirv32-mesa-mesa3d` target build error: error: unknown target triple 'spirv32-mesa-mesa3d' Fix libclc `spirv-mesa-mesa3d` target build error: error: SPIR-V target requires a Vulkan environment. mesa3d is a valid OS in llvm triple. This PR enables libclc build for spirv32-mesa-mesa3d and spirv64-mesa-mesa3d targets. Note previously spirv[64]-mesa3d- targets used spir[64]-unknown-unknown. This PR canonicalizes the triples to spirv32[64]-mesa-mesa3d. --- Full diff: https://github.com/llvm/llvm-project/pull/197148.diff 3 Files Affected: - (modified) clang/lib/Basic/Targets.cpp (+2-2) - (modified) clang/lib/Basic/Targets/SPIR.h (+14-9) - (modified) clang/test/Frontend/spirv-target-validation.c (+4-1) ``````````diff diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index ed88ae7173bad..0a1938b0bebd3 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -714,7 +714,7 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, } case llvm::Triple::spirv32: { if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar && - os != llvm::Triple::Vulkan) || + os != llvm::Triple::Vulkan && os != llvm::Triple::Mesa3D) || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; return std::make_unique<SPIRV32TargetInfo>(Triple, Opts); @@ -723,7 +723,7 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, if (os == llvm::Triple::OSType::AMDHSA) return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts); if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar && - os != llvm::Triple::Vulkan) || + os != llvm::Triple::Vulkan && os != llvm::Triple::Mesa3D) || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; if (Triple.getVendor() == llvm::Triple::Intel) diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 399904e8a3286..261a8bd28a16a 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -351,12 +351,13 @@ class LLVM_LIBRARY_VISIBILITY SPIRVTargetInfo : public BaseSPIRVTargetInfo { resetDataLayout(); } - // SPIR-V targeting requires a fully specified Vulkan environment. - // SPIR-V requires the enviornment to be in a valid shader stage as well. - // Validate here before CreateTargetInfo() to emit a proper diagnostic. + // When targeting Vulkan, require a fully specified Vulkan environment + // (version + valid shader stage). Non-Vulkan OS triples (e.g. mesa3d) + // could be used for OpenCL SPIR-V. bool validateTarget(DiagnosticsEngine &Diags) const override { - if (getTriple().getOS() != llvm::Triple::Vulkan || - getTriple().getVulkanVersion() == llvm::VersionTuple(0)) { + if (getTriple().getOS() != llvm::Triple::Vulkan) + return true; + if (getTriple().getVulkanVersion() == llvm::VersionTuple(0)) { Diags.Report(diag::err_target_spirv_requires_vulkan); return false; } @@ -380,8 +381,10 @@ class LLVM_LIBRARY_VISIBILITY SPIRV32TargetInfo : public BaseSPIRVTargetInfo { "Invalid architecture for 32-bit SPIR-V."); assert((getTriple().getOS() == llvm::Triple::UnknownOS || getTriple().getOS() == llvm::Triple::ChipStar || - getTriple().getOS() == llvm::Triple::Vulkan) && - "32-bit SPIR-V target must use unknown, chipstar, or vulkan OS"); + getTriple().getOS() == llvm::Triple::Vulkan || + getTriple().getOS() == llvm::Triple::Mesa3D) && + "32-bit SPIR-V target must use unknown, chipstar, vulkan, or mesa3d " + "OS"); assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment && "32-bit SPIR-V target must use unknown environment type"); PointerWidth = PointerAlign = 32; @@ -405,8 +408,10 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64TargetInfo : public BaseSPIRVTargetInfo { "Invalid architecture for 64-bit SPIR-V."); assert((getTriple().getOS() == llvm::Triple::UnknownOS || getTriple().getOS() == llvm::Triple::ChipStar || - getTriple().getOS() == llvm::Triple::Vulkan) && - "64-bit SPIR-V target must use unknown, chipstar, or vulkan OS"); + getTriple().getOS() == llvm::Triple::Vulkan || + getTriple().getOS() == llvm::Triple::Mesa3D) && + "64-bit SPIR-V target must use unknown, chipstar, vulkan, or mesa3d " + "OS"); assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment && "64-bit SPIR-V target must use unknown environment type"); PointerWidth = PointerAlign = 64; diff --git a/clang/test/Frontend/spirv-target-validation.c b/clang/test/Frontend/spirv-target-validation.c index a463f7ffe7d90..1313c504c6d32 100644 --- a/clang/test/Frontend/spirv-target-validation.c +++ b/clang/test/Frontend/spirv-target-validation.c @@ -1,5 +1,8 @@ -// RUN: not %clang_cc1 -triple spirv %s 2>&1 | FileCheck %s --check-prefix=CHECK-VULKAN +// RUN: not %clang_cc1 -triple spirv-unknown-vulkan1.0 %s 2>&1 | FileCheck %s --check-prefix=CHECK-VULKAN // RUN: not %clang_cc1 -triple spirv-vulkan-mlibc %s 2>&1 | FileCheck %s --check-prefix=CHECK-SHADER +// RUN: %clang_cc1 -triple spirv32-mesa-mesa3d %s -fsyntax-only 2>&1 +// RUN: %clang_cc1 -triple spirv64-mesa-mesa3d %s -fsyntax-only 2>&1 +// RUN: %clang_cc1 -triple spirv-mesa-mesa3d %s -fsyntax-only 2>&1 // CHECK-VULKAN: error: SPIR-V target requires a Vulkan environment // CHECK-SHADER: error: SPIR-V target requires a valid shader stage environment `````````` </details> https://github.com/llvm/llvm-project/pull/197148 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
