https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/190343
Factor this similar to the ARM case for future expansion. The difference being -mcpu is treated as an alias for -mcpu instead of something separately useful. I don't understand this mutation of the triple into spirv64. The only test where this appears to matter does not use -mcpu. Previously this would only match for -mcpu, but this would change the behavior to prefer -march before falling back to -mcpu. >From b8cf4e3b9b77e9cea576b83e8c3c97fd60987d92 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Fri, 3 Apr 2026 14:15:23 +0200 Subject: [PATCH] clang/AMDGPU: Refactor triple adjustments Factor this similar to the ARM case for future expansion. The difference being -mcpu is treated as an alias for -mcpu instead of something separately useful. I don't understand this mutation of the triple into spirv64. The only test where this appears to matter does not use -mcpu. Previously this would only match for -mcpu, but this would change the behavior to prefer -march before falling back to -mcpu. --- clang/lib/Driver/CMakeLists.txt | 1 + clang/lib/Driver/ToolChain.cpp | 4 +-- clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp | 38 +++++++++++++++++++++ clang/lib/Driver/ToolChains/Arch/AMDGPU.h | 32 +++++++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp create mode 100644 clang/lib/Driver/ToolChains/Arch/AMDGPU.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 92554712fffd8..b8b10b351633f 100644 --- a/clang/lib/Driver/CMakeLists.txt +++ b/clang/lib/Driver/CMakeLists.txt @@ -39,6 +39,7 @@ add_clang_library(clangDriver Tool.cpp ToolChain.cpp ToolChains/Arch/AArch64.cpp + ToolChains/Arch/AMDGPU.cpp ToolChains/Arch/ARM.cpp ToolChains/Arch/CSKY.cpp ToolChains/Arch/LoongArch.cpp diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index d0730ae6f996b..945037369e4ee 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -8,6 +8,7 @@ #include "clang/Driver/ToolChain.h" #include "ToolChains/Arch/AArch64.h" +#include "ToolChains/Arch/AMDGPU.h" #include "ToolChains/Arch/ARM.h" #include "ToolChains/Arch/RISCV.h" #include "ToolChains/Clang.h" @@ -1279,8 +1280,7 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args, return getTripleString().str(); case llvm::Triple::amdgcn: { llvm::Triple Triple = getTriple(); - if (Args.getLastArgValue(options::OPT_mcpu_EQ) == "amdgcnspirv") - Triple.setArch(llvm::Triple::ArchType::spirv64); + tools::AMDGPU::setArchNameInTriple(getDriver(), Args, InputType, Triple); return Triple.getTriple(); } case llvm::Triple::arm: diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp new file mode 100644 index 0000000000000..8a9cb7ef5b367 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.cpp @@ -0,0 +1,38 @@ +//===--- AMDGPU.cpp - AMDGPU Helpers for Tools ----------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "AMDGPU.h" +#include "clang/Basic/TargetID.h" +#include "clang/Driver/Driver.h" +#include "clang/Options/Options.h" +#include "llvm/TargetParser/TargetParser.h" + +using namespace clang::driver; +using namespace clang::driver::tools; +using namespace clang; +using namespace llvm::opt; + +void AMDGPU::setArchNameInTriple(const Driver &D, const ArgList &Args, + types::ID InputType, llvm::Triple &Triple) { + StringRef MArch; + AMDGPU::getAMDGPUArchCPUFromArgs(Triple, Args, MArch); + + if (MArch == "amdgcnspirv") { + Triple.setArch(llvm::Triple::ArchType::spirv64); + return; + } +} + +void AMDGPU::getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple, + const llvm::opt::ArgList &Args, + llvm::StringRef &Arch) { + if (const Arg *MArch = Args.getLastArg(options::OPT_march_EQ)) + Arch = MArch->getValue(); + else if (const Arg *MCPU = Args.getLastArg(options::OPT_mcpu_EQ)) + Arch = MCPU->getValue(); +} diff --git a/clang/lib/Driver/ToolChains/Arch/AMDGPU.h b/clang/lib/Driver/ToolChains/Arch/AMDGPU.h new file mode 100644 index 0000000000000..14605213b5ef7 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Arch/AMDGPU.h @@ -0,0 +1,32 @@ +//===--- AMDGPU.h - AMDGPU-specific Tool Helpers ----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_AMDGPU_H +#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_AMDGPU_H + +#include "clang/Driver/ToolChain.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Option/Option.h" +#include <string> + +namespace clang { +namespace driver { +namespace tools { +namespace AMDGPU { + +void setArchNameInTriple(const Driver &D, const llvm::opt::ArgList &Args, + types::ID InputType, llvm::Triple &Triple); +void getAMDGPUArchCPUFromArgs(const llvm::Triple &Triple, + const llvm::opt::ArgList &Args, + llvm::StringRef &Arch); +} // end namespace AMDGPU +} // end namespace tools +} // end namespace driver +} // end namespace clang + +#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_AMDGPU_H _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
