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.sar...@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.sar...@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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits