https://github.com/srividya-sundaram created https://github.com/llvm/llvm-project/pull/231342
Accept only NVPTX GPUs as an NVPTX CPU. NVPTXTargetInfo accepted any name StringToOffloadArch recognizes, so `-target-cpu gfx906` was a valid NVPTX CPU, and the "valid target CPU values" note listed the AMDGPU names. It now accepts and lists only NVPTX GPUs. fillValidOffloadArchList had no other user, so it is removed. This also keeps Intel GPU names, added in #229247, from being accepted as NVPTX CPUs. Assisted-by: Claude Opus 5.5 >From 39252e31b420e1055c061300214e579905b5ee2e Mon Sep 17 00:00:00 2001 From: srividya sundaram <[email protected]> Date: Mon, 12 Oct 2026 18:02:26 -0700 Subject: [PATCH] [clang][NVPTX] Accept only NVPTX GPUs as an NVPTX CPU NVPTXTargetInfo accepted any name StringToOffloadArch recognizes, so -target-cpu gfx906 was a valid NVPTX CPU and the list of valid CPUs offered the AMDGPU names. Accept and list only NVPTX GPUs, and remove fillValidOffloadArchList, whose only user was NVPTX. Assisted-by: Claude Opus 5.5 --- clang/include/clang/Basic/OffloadArch.h | 3 - clang/lib/Basic/OffloadArch.cpp | 7 -- clang/lib/Basic/Targets/NVPTX.h | 10 ++- .../test/Misc/target-invalid-cpu-note/nvptx.c | 84 +------------------ 4 files changed, 11 insertions(+), 93 deletions(-) diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h index a0e5e72db220b..ba8040ebe5dc2 100644 --- a/clang/include/clang/Basic/OffloadArch.h +++ b/clang/include/clang/Basic/OffloadArch.h @@ -115,9 +115,6 @@ const char *OffloadArchToVirtualArchString(OffloadArch A); // string is not recognized. OffloadArch StringToOffloadArch(llvm::StringRef S); -/// Append the canonical names of all NVIDIA and AMDGPU GPUs. -void fillValidOffloadArchList(llvm::SmallVectorImpl<llvm::StringRef> &Values); - OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch); llvm::Triple::SubArchType getOffloadArchSubArch(OffloadArch ID); diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp index f8c811f552f38..ca8dfab142dbb 100644 --- a/clang/lib/Basic/OffloadArch.cpp +++ b/clang/lib/Basic/OffloadArch.cpp @@ -88,13 +88,6 @@ OffloadArch StringToOffloadArch(llvm::StringRef S) { return OffloadArch::getUnknown(); } -void fillValidOffloadArchList(llvm::SmallVectorImpl<llvm::StringRef> &Values) { -#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \ - Values.push_back(NAME); -#include "llvm/TargetParser/NVPTXTargetParser.def" - llvm::AMDGPU::fillValidArchListAMDGCN(Values, llvm::Triple::NoSubArch); -} - OffloadArch getSubArchOffloadArch(llvm::Triple::SubArchType SubArch) { llvm::AMDGPU::GPUKind AK = llvm::AMDGPU::getGPUKindFromSubArch(SubArch); if (AK == llvm::AMDGPU::GK_NONE) diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index e55fe89712385..6e86a07b55002 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -135,17 +135,21 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { return TargetInfo::CharPtrBuiltinVaList; } + // StringToOffloadArch also recognizes other vendors' GPUs, so accept only an + // NVPTX one. bool isValidCPUName(StringRef Name) const override { - return !StringToOffloadArch(Name).isUnknown(); + return StringToOffloadArch(Name).isNVPTX(); } void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override { - fillValidOffloadArchList(Values); +#define NVPTX_GPU(NAME, KIND, VIRTUAL, SM_ID, MIN_VER, MAX_VER, SUFFIX) \ + Values.push_back(NAME); +#include "llvm/TargetParser/NVPTXTargetParser.def" } bool setCPU(StringRef Name) override { GPU = StringToOffloadArch(Name); - return !GPU.isUnknown(); + return GPU.isNVPTX(); } void adjust(DiagnosticsEngine &Diags, LangOptions &Opts, const TargetInfo *Aux) override; diff --git a/clang/test/Misc/target-invalid-cpu-note/nvptx.c b/clang/test/Misc/target-invalid-cpu-note/nvptx.c index 20dbd8dc6aa3b..f865fcea642f8 100644 --- a/clang/test/Misc/target-invalid-cpu-note/nvptx.c +++ b/clang/test/Misc/target-invalid-cpu-note/nvptx.c @@ -2,6 +2,10 @@ // previous check finished matching (specifically, caret is not treated as // matching a start of line when used like this in FileCheck). +// An AMDGPU name is an offload architecture but never an NVPTX GPU name. +// RUN: not %clang_cc1 -triple nvptx64-nvidia-cuda -target-cpu gfx906 -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix=AMD +// AMD: error: unknown target CPU 'gfx906' + // RUN: not %clang_cc1 -triple nvptx--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --implicit-check-not={{[a-zA-Z0-9]}} // CHECK: error: unknown target CPU 'not-a-cpu' // CHECK-NEXT: note: valid target CPU values are: @@ -48,84 +52,4 @@ // CHECK-SAME: {{^}}, sm_121 // CHECK-SAME: {{^}}, sm_121a // CHECK-SAME: {{^}}, sm_121f -// CHECK-SAME: {{^}}, gfx600 -// CHECK-SAME: {{^}}, gfx601 -// CHECK-SAME: {{^}}, gfx602 -// CHECK-SAME: {{^}}, gfx700 -// CHECK-SAME: {{^}}, gfx701 -// CHECK-SAME: {{^}}, gfx702 -// CHECK-SAME: {{^}}, gfx703 -// CHECK-SAME: {{^}}, gfx704 -// CHECK-SAME: {{^}}, gfx705 -// CHECK-SAME: {{^}}, gfx801 -// CHECK-SAME: {{^}}, gfx802 -// CHECK-SAME: {{^}}, gfx803 -// CHECK-SAME: {{^}}, gfx805 -// CHECK-SAME: {{^}}, gfx810 -// CHECK-SAME: {{^}}, gfx900 -// CHECK-SAME: {{^}}, gfx902 -// CHECK-SAME: {{^}}, gfx904 -// CHECK-SAME: {{^}}, gfx906 -// CHECK-SAME: {{^}}, gfx908 -// CHECK-SAME: {{^}}, gfx909 -// CHECK-SAME: {{^}}, gfx90a -// CHECK-SAME: {{^}}, gfx90c -// CHECK-SAME: {{^}}, gfx942 -// CHECK-SAME: {{^}}, gfx950 -// CHECK-SAME: {{^}}, gfx1010 -// CHECK-SAME: {{^}}, gfx1011 -// CHECK-SAME: {{^}}, gfx1012 -// CHECK-SAME: {{^}}, gfx1013 -// CHECK-SAME: {{^}}, gfx1030 -// CHECK-SAME: {{^}}, gfx1031 -// CHECK-SAME: {{^}}, gfx1032 -// CHECK-SAME: {{^}}, gfx1033 -// CHECK-SAME: {{^}}, gfx1034 -// CHECK-SAME: {{^}}, gfx1035 -// CHECK-SAME: {{^}}, gfx1036 -// CHECK-SAME: {{^}}, gfx1100 -// CHECK-SAME: {{^}}, gfx1101 -// CHECK-SAME: {{^}}, gfx1102 -// CHECK-SAME: {{^}}, gfx1103 -// CHECK-SAME: {{^}}, gfx1150 -// CHECK-SAME: {{^}}, gfx1151 -// CHECK-SAME: {{^}}, gfx1152 -// CHECK-SAME: {{^}}, gfx1153 -// CHECK-SAME: {{^}}, gfx1154 -// CHECK-SAME: {{^}}, gfx1170 -// CHECK-SAME: {{^}}, gfx1171 -// CHECK-SAME: {{^}}, gfx1172 -// CHECK-SAME: {{^}}, gfx1200 -// CHECK-SAME: {{^}}, gfx1201 -// CHECK-SAME: {{^}}, gfx1250-strict -// CHECK-SAME: {{^}}, gfx1250 -// CHECK-SAME: {{^}}, gfx1251 -// CHECK-SAME: {{^}}, gfx1310 -// CHECK-SAME: {{^}}, gfx9-generic -// CHECK-SAME: {{^}}, gfx9-4-generic -// CHECK-SAME: {{^}}, gfx10-1-generic -// CHECK-SAME: {{^}}, gfx10-3-generic -// CHECK-SAME: {{^}}, gfx11-generic -// CHECK-SAME: {{^}}, gfx11-7-generic -// CHECK-SAME: {{^}}, gfx12-generic -// CHECK-SAME: {{^}}, gfx12-5-generic -// CHECK-SAME: {{^}}, gfx13-generic -// CHECK-SAME: {{^}}, tahiti -// CHECK-SAME: {{^}}, pitcairn -// CHECK-SAME: {{^}}, verde -// CHECK-SAME: {{^}}, hainan -// CHECK-SAME: {{^}}, oland -// CHECK-SAME: {{^}}, kaveri -// CHECK-SAME: {{^}}, hawaii -// CHECK-SAME: {{^}}, kabini -// CHECK-SAME: {{^}}, mullins -// CHECK-SAME: {{^}}, bonaire -// CHECK-SAME: {{^}}, carrizo -// CHECK-SAME: {{^}}, iceland -// CHECK-SAME: {{^}}, tonga -// CHECK-SAME: {{^}}, fiji -// CHECK-SAME: {{^}}, polaris10 -// CHECK-SAME: {{^}}, polaris11 -// CHECK-SAME: {{^}}, tongapro -// CHECK-SAME: {{^}}, stoney // CHECK-SAME: {{$}} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
