[clang] clang: Check -Xarch compatibility using Triple parsed architecture. (PR #189651)
Matt Arsenault via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 23 03:27:32 PDT 2026
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/189651
>From 3a45d7ed4d309134050901b41ae36bcf600b7d57 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 31 Mar 2026 00:06:15 +0200
Subject: [PATCH 1/2] clang: Check -Xarch compatibility using Triple parsed
architecture.
This will allow recognizing any of the triple aliases for the architecture.
This will avoid test failures when the amdgcn triple top level architecture
is renamed.
---
clang/lib/Driver/ToolChain.cpp | 7 +++++--
clang/test/Driver/Xarch.c | 1 +
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 462c1f54855ab..53cd4d0c7a8d4 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -2026,8 +2026,11 @@ llvm::opt::DerivedArgList *ToolChain::TranslateXarchArgs(
NeedTrans = !IsDevice;
Skip = IsDevice;
} else if (A->getOption().matches(options::OPT_Xarch__)) {
- NeedTrans = A->getValue() == getArchName() ||
- (!BoundArch.empty() && A->getValue() == BoundArch);
+ StringRef Val = A->getValue();
+ NeedTrans = Val == getArchName() ||
+ (!BoundArch.empty() && A->getValue() == BoundArch) ||
+ // Match any triple recognized arch aliases.
+ Triple.getArch() == llvm::Triple::parseArch(Val);
Skip = !NeedTrans;
}
if (NeedTrans || Skip)
diff --git a/clang/test/Driver/Xarch.c b/clang/test/Driver/Xarch.c
index 95bd0c502ddb3..fc1d53c167863 100644
--- a/clang/test/Driver/Xarch.c
+++ b/clang/test/Driver/Xarch.c
@@ -20,5 +20,6 @@
// LINKER: "foo"
// RUN: %clang -target x86_64-unknown-linux-gnu -Xarch_x86_64 -O1 %s -S -### 2>&1 | FileCheck -check-prefix=O1ONCE %s
+// RUN: %clang -target x86_64-unknown-linux-gnu -Xarch_amd64 -O1 %s -S -### 2>&1 | FileCheck -check-prefix=O1ONCE %s
// O1ONCE: "-O1"
// O1ONCE-NOT: "-O1"
>From f41653b4c8d852bdd5c94490bf7cb464e66352b8 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 23 Apr 2026 11:14:32 +0100
Subject: [PATCH 2/2] Parse as triple to account for arch and subarch
---
clang/lib/Driver/ToolChain.cpp | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 53cd4d0c7a8d4..8b6655a6cf1d1 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -2008,6 +2008,14 @@ void ToolChain::TranslateXarchArgs(
AllocatedArgs->push_back(A);
}
+/// Match any triple recognized arch aliases.
+static bool isXArchCompatibleTripleArch(const llvm::Triple &TT,
+ StringRef XArchVal) {
+ llvm::Triple ParsedTriple(XArchVal);
+ return TT.getArch() == ParsedTriple.getArch() &&
+ TT.getSubArch() == ParsedTriple.getSubArch();
+}
+
llvm::opt::DerivedArgList *ToolChain::TranslateXarchArgs(
const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
Action::OffloadKind OFK,
@@ -2028,9 +2036,8 @@ llvm::opt::DerivedArgList *ToolChain::TranslateXarchArgs(
} else if (A->getOption().matches(options::OPT_Xarch__)) {
StringRef Val = A->getValue();
NeedTrans = Val == getArchName() ||
- (!BoundArch.empty() && A->getValue() == BoundArch) ||
- // Match any triple recognized arch aliases.
- Triple.getArch() == llvm::Triple::parseArch(Val);
+ (!BoundArch.empty() && Val == BoundArch) ||
+ isXArchCompatibleTripleArch(Triple, Val);
Skip = !NeedTrans;
}
if (NeedTrans || Skip)
More information about the cfe-commits
mailing list