[clang] [LLVM][Triple][NFCI] Add function to test for offloading triples (PR #126956)
Nick Sarnie via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 5 13:09:42 PST 2025
https://github.com/sarnex updated https://github.com/llvm/llvm-project/pull/126956
>From 044158c176316e6c9f44ce1487ff631c8a0d15c4 Mon Sep 17 00:00:00 2001
From: "Sarnie, Nick" <nick.sarnie at intel.com>
Date: Tue, 4 Mar 2025 11:16:34 -0800
Subject: [PATCH] [clang] Add isOffloadingTarget function to LangOpts
Signed-off-by: Sarnie, Nick <nick.sarnie at intel.com>
---
clang/include/clang/Basic/LangOptions.h | 4 ++++
clang/lib/CodeGen/CGOpenMPRuntime.cpp | 7 +++----
clang/lib/CodeGen/CodeGenModule.cpp | 2 +-
clang/lib/CodeGen/CodeGenModule.h | 3 +--
clang/lib/Frontend/CompilerInvocation.cpp | 4 ++++
clang/lib/Sema/SemaType.cpp | 16 ++++------------
6 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h
index e925e0f3b5d85..d722ca2d926b2 100644
--- a/clang/include/clang/Basic/LangOptions.h
+++ b/clang/include/clang/Basic/LangOptions.h
@@ -636,6 +636,8 @@ class LangOptions : public LangOptionsBase {
bool AtomicFineGrainedMemory = false;
bool AtomicIgnoreDenormalMode = false;
+ bool IsOffloadingTarget = false;
+
LangOptions();
/// Set language defaults for the given input language and
@@ -838,6 +840,8 @@ class LangOptions : public LangOptionsBase {
return FPExceptionModeKind::FPE_Ignore;
return EM;
}
+
+ bool isOffloadingTarget() const { return IsOffloadingTarget; }
};
/// Floating point control options
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 06a652c146fb9..f61b46c4369a5 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -2613,9 +2613,8 @@ void CGOpenMPRuntime::emitDistributeStaticInit(
emitUpdateLocation(CGF, Loc, OMP_IDENT_WORK_DISTRIBUTE);
llvm::Value *ThreadId = getThreadID(CGF, Loc);
llvm::FunctionCallee StaticInitFunction;
- bool isGPUDistribute =
- CGM.getLangOpts().OpenMPIsTargetDevice &&
- (CGM.getTriple().isAMDGCN() || CGM.getTriple().isNVPTX());
+ bool isGPUDistribute = CGM.getLangOpts().OpenMPIsTargetDevice &&
+ CGM.getLangOpts().isOffloadingTarget();
StaticInitFunction = OMPBuilder.createForStaticInitFunction(
Values.IVSize, Values.IVSigned, isGPUDistribute);
@@ -2645,7 +2644,7 @@ void CGOpenMPRuntime::emitForStaticFinish(CodeGenFunction &CGF,
auto DL = ApplyDebugLocation::CreateDefaultArtificial(CGF, Loc);
if (isOpenMPDistributeDirective(DKind) &&
CGM.getLangOpts().OpenMPIsTargetDevice &&
- (CGM.getTriple().isAMDGCN() || CGM.getTriple().isNVPTX()))
+ CGM.getLangOpts().isOffloadingTarget())
CGF.EmitRuntimeCall(
OMPBuilder.getOrCreateRuntimeFunction(
CGM.getModule(), OMPRTL___kmpc_distribute_static_fini),
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index bca0a932b3495..9080b226a7b8b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -843,7 +843,7 @@ static void setVisibilityFromDLLStorageClass(const clang::LangOptions &LO,
static bool isStackProtectorOn(const LangOptions &LangOpts,
const llvm::Triple &Triple,
clang::LangOptions::StackProtectorMode Mode) {
- if (Triple.isAMDGPU() || Triple.isNVPTX())
+ if (LangOpts.isOffloadingTarget())
return false;
return LangOpts.getStackProtector() == Mode;
}
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h
index a72b4f7338767..3448c0ed06335 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -1078,8 +1078,7 @@ class CodeGenModule : public CodeGenTypeCache {
bool shouldEmitRTTI(bool ForEH = false) {
return (ForEH || getLangOpts().RTTI) && !getLangOpts().CUDAIsDevice &&
!(getLangOpts().OpenMP && getLangOpts().OpenMPIsTargetDevice &&
- (getTriple().isNVPTX() || getTriple().isAMDGPU() ||
- getTriple().isSPIRV()));
+ getLangOpts().isOffloadingTarget());
}
/// Get the address of the RTTI descriptor for the given type.
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 4eb743acf327f..33d26ee7f9f7d 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -4357,6 +4357,10 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
Opts.OpenACCMacroOverride = A->getValue();
}
+ Opts.IsOffloadingTarget =
+ (Opts.OpenMPIsTargetDevice || Opts.SYCLIsDevice || Opts.CUDAIsDevice) &&
+ (T.isNVPTX() || T.isAMDGCN() || T.isSPIROrSPIRV());
+
// FIXME: Eliminate this dependency.
unsigned Opt = getOptimizationLevel(Args, IK, Diags),
OptSize = getOptimizationLevelSize(Args);
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 11943c0b53591..0f115a6f04509 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -1122,8 +1122,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
}
case DeclSpec::TST_int128:
if (!S.Context.getTargetInfo().hasInt128Type() &&
- !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice ||
- (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))
+ !(S.getLangOpts().isOffloadingTarget()))
S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported)
<< "__int128";
if (DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned)
@@ -1168,8 +1167,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
break;
case DeclSpec::TST_float128:
if (!S.Context.getTargetInfo().hasFloat128Type() &&
- !S.getLangOpts().SYCLIsDevice && !S.getLangOpts().CUDAIsDevice &&
- !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))
+ !S.getLangOpts().isOffloadingTarget())
S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported)
<< "__float128";
Result = Context.Float128Ty;
@@ -8362,12 +8360,7 @@ static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr,
/// match one of the standard Neon vector types.
static void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr,
Sema &S, VectorKind VecKind) {
- bool IsTargetCUDAAndHostARM = false;
- if (S.getLangOpts().CUDAIsDevice) {
- const TargetInfo *AuxTI = S.getASTContext().getAuxTargetInfo();
- IsTargetCUDAAndHostARM =
- AuxTI && (AuxTI->getTriple().isAArch64() || AuxTI->getTriple().isARM());
- }
+ bool IsTargetOffloading = S.getLangOpts().isOffloadingTarget();
// Target must have NEON (or MVE, whose vectors are similar enough
// not to need a separate attribute)
@@ -8401,8 +8394,7 @@ static void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr,
return;
// Only certain element types are supported for Neon vectors.
- if (!isPermittedNeonBaseType(CurType, VecKind, S) &&
- !IsTargetCUDAAndHostARM) {
+ if (!isPermittedNeonBaseType(CurType, VecKind, S) && !IsTargetOffloading) {
S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
Attr.setInvalid();
return;
More information about the cfe-commits
mailing list