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

Reply via email to