[llvm-branch-commits] [clang] clang: Use NVPTX TargetParser for OpenMP unified-addressing check (PR #212746)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jul 30 05:14:51 PDT 2026
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/212746
>From 71144f778c8e57c11459a7f02696f9027198dc6d Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 29 Jul 2026 07:51:51 +0200
Subject: [PATCH] clang: Use NVPTX TargetParser for OpenMP unified-addressing
check
processRequiresDirective enumerated every OffloadArch value in a switch
only to error on nvptx architectures older than sm_60. Replace it with
NVPTX::supportsUnifiedAddressing() applied to the parsed target CPU so
we don't need to keep adding cases here every time a new target is
added.
Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
---
clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 128 ++---------------------
1 file changed, 8 insertions(+), 120 deletions(-)
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index 3fccd3a291d37..40dd45ab26f3a 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -19,10 +19,10 @@
#include "clang/AST/OpenMPClause.h"
#include "clang/AST/StmtOpenMP.h"
#include "clang/AST/StmtVisitor.h"
-#include "clang/Basic/Cuda.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/Frontend/OpenMP/OMPDeviceConstants.h"
#include "llvm/Frontend/OpenMP/OMPGridValues.h"
+#include "llvm/TargetParser/NVPTXTargetParser.h"
using namespace clang;
using namespace CodeGen;
@@ -2259,136 +2259,24 @@ bool CGOpenMPRuntimeGPU::hasAllocateAttributeForGlobalVar(const VarDecl *VD,
return false;
}
-static OffloadArch getOffloadArch(const CodeGenModule &CGM) {
- // FIXME: This should not require parsing
- return StringToOffloadArch(CGM.getTarget().getTargetOpts().CPU);
-}
-
/// Check to see if target architecture supports unified addressing which is
/// a restriction for OpenMP requires clause "unified_shared_memory".
void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) {
- for (const OMPClause *Clause : D->clauselists()) {
- if (Clause->getClauseKind() == OMPC_unified_shared_memory) {
- OffloadArch Arch = getOffloadArch(CGM);
- switch (Arch) {
- case OffloadArch::SM_20:
- case OffloadArch::SM_21:
- case OffloadArch::SM_30:
- case OffloadArch::SM_32_:
- case OffloadArch::SM_35:
- case OffloadArch::SM_37:
- case OffloadArch::SM_50:
- case OffloadArch::SM_52:
- case OffloadArch::SM_53: {
+ StringRef CPU = CGM.getTarget().getTargetOpts().CPU;
+ if (CGM.getTarget().getTriple().isNVPTX() &&
+ !llvm::NVPTX::supportsUnifiedAddressing(llvm::NVPTX::parseArch(CPU))) {
+ for (const OMPClause *Clause : D->clauselists()) {
+ if (Clause->getClauseKind() == OMPC_unified_shared_memory) {
SmallString<256> Buffer;
llvm::raw_svector_ostream Out(Buffer);
- Out << "Target architecture " << OffloadArchToString(Arch)
+ Out << "Target architecture " << CPU
<< " does not support unified addressing";
CGM.Error(Clause->getBeginLoc(), Out.str());
return;
}
- case OffloadArch::SM_60:
- case OffloadArch::SM_61:
- case OffloadArch::SM_62:
- case OffloadArch::SM_70:
- case OffloadArch::SM_72:
- case OffloadArch::SM_75:
- case OffloadArch::SM_80:
- case OffloadArch::SM_86:
- case OffloadArch::SM_87:
- case OffloadArch::SM_88:
- case OffloadArch::SM_89:
- case OffloadArch::SM_90:
- case OffloadArch::SM_90a:
- case OffloadArch::SM_100:
- case OffloadArch::SM_100a:
- case OffloadArch::SM_100f:
- case OffloadArch::SM_101:
- case OffloadArch::SM_101a:
- case OffloadArch::SM_101f:
- case OffloadArch::SM_103:
- case OffloadArch::SM_103a:
- case OffloadArch::SM_103f:
- case OffloadArch::SM_110:
- case OffloadArch::SM_110a:
- case OffloadArch::SM_110f:
- case OffloadArch::SM_120:
- case OffloadArch::SM_120a:
- case OffloadArch::SM_120f:
- case OffloadArch::SM_121:
- case OffloadArch::SM_121a:
- case OffloadArch::SM_121f:
- case OffloadArch::GFX600:
- case OffloadArch::GFX601:
- case OffloadArch::GFX602:
- case OffloadArch::GFX700:
- case OffloadArch::GFX701:
- case OffloadArch::GFX702:
- case OffloadArch::GFX703:
- case OffloadArch::GFX704:
- case OffloadArch::GFX705:
- case OffloadArch::GFX801:
- case OffloadArch::GFX802:
- case OffloadArch::GFX803:
- case OffloadArch::GFX805:
- case OffloadArch::GFX810:
- case OffloadArch::GFX9_GENERIC:
- case OffloadArch::GFX900:
- case OffloadArch::GFX902:
- case OffloadArch::GFX904:
- case OffloadArch::GFX906:
- case OffloadArch::GFX908:
- case OffloadArch::GFX909:
- case OffloadArch::GFX90a:
- case OffloadArch::GFX90c:
- case OffloadArch::GFX9_4_GENERIC:
- case OffloadArch::GFX942:
- case OffloadArch::GFX950:
- case OffloadArch::GFX10_1_GENERIC:
- case OffloadArch::GFX1010:
- case OffloadArch::GFX1011:
- case OffloadArch::GFX1012:
- case OffloadArch::GFX1013:
- case OffloadArch::GFX10_3_GENERIC:
- case OffloadArch::GFX1030:
- case OffloadArch::GFX1031:
- case OffloadArch::GFX1032:
- case OffloadArch::GFX1033:
- case OffloadArch::GFX1034:
- case OffloadArch::GFX1035:
- case OffloadArch::GFX1036:
- case OffloadArch::GFX11_GENERIC:
- case OffloadArch::GFX1100:
- case OffloadArch::GFX1101:
- case OffloadArch::GFX1102:
- case OffloadArch::GFX1103:
- case OffloadArch::GFX1150:
- case OffloadArch::GFX1151:
- case OffloadArch::GFX1152:
- case OffloadArch::GFX1153:
- case OffloadArch::GFX1154:
- case OffloadArch::GFX11_7_GENERIC:
- case OffloadArch::GFX1170:
- case OffloadArch::GFX1171:
- case OffloadArch::GFX1172:
- case OffloadArch::GFX12_GENERIC:
- case OffloadArch::GFX1200:
- case OffloadArch::GFX1201:
- case OffloadArch::GFX12_5_GENERIC:
- case OffloadArch::GFX1250:
- case OffloadArch::GFX1251:
- case OffloadArch::GFX13_GENERIC:
- case OffloadArch::GFX1310:
- case OffloadArch::AMDGCNSPIRV:
- case OffloadArch::Generic:
- case OffloadArch::GRANITERAPIDS:
- case OffloadArch::BMG_G21:
- case OffloadArch::Unused:
- case OffloadArch::Unknown:
- break;
- }
}
}
+
CGOpenMPRuntime::processRequiresDirective(D);
}
More information about the llvm-branch-commits
mailing list