From 4ca6aac905b341bfddd59dd38c577bd13b0f3de6 Mon Sep 17 00:00:00 2001 From: Mike Rice Date: Thu, 21 Mar 2024 15:41:48 -0700 Subject: [PATCH] [clang][NFC] Regroup Sema SYCL declarations (#13099) In ac74d9ec0f73898713dd6e0d33f148c13a51875d declarations in Sema.h were regrouped by file. This change moves the SYCL code into the correct section. --- clang/include/clang/Sema/Sema.h | 450 ++++++++++++++++---------------- 1 file changed, 226 insertions(+), 224 deletions(-) diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 81fc0ce4501bd..c600bcaa0089b 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -2167,32 +2167,6 @@ class Sema final { // // - SYCLIntelIVDepAttr * - BuildSYCLIntelIVDepAttr(const AttributeCommonInfo &CI, Expr *Expr1, - Expr *Expr2); - LoopUnrollHintAttr *BuildLoopUnrollHintAttr(const AttributeCommonInfo &A, - Expr *E); - OpenCLUnrollHintAttr * - BuildOpenCLLoopUnrollHintAttr(const AttributeCommonInfo &A, Expr *E); - - SYCLIntelLoopCountAttr * - BuildSYCLIntelLoopCountAttr(const AttributeCommonInfo &CI, Expr *E); - SYCLIntelInitiationIntervalAttr * - BuildSYCLIntelInitiationIntervalAttr(const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelMaxConcurrencyAttr * - BuildSYCLIntelMaxConcurrencyAttr(const AttributeCommonInfo &CI, Expr *E); - SYCLIntelMaxInterleavingAttr * - BuildSYCLIntelMaxInterleavingAttr(const AttributeCommonInfo &CI, Expr *E); - SYCLIntelSpeculatedIterationsAttr * - BuildSYCLIntelSpeculatedIterationsAttr(const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelLoopCoalesceAttr * - BuildSYCLIntelLoopCoalesceAttr(const AttributeCommonInfo &CI, Expr *E); - SYCLIntelMaxReinvocationDelayAttr * - BuildSYCLIntelMaxReinvocationDelayAttr(const AttributeCommonInfo &CI, - Expr *E); - /// \name Casts /// Implementations are in SemaCast.cpp ///@{ @@ -2422,22 +2396,6 @@ class Sema final { }; bool IsLayoutCompatible(QualType T1, QualType T2) const; - template - static bool isTypeDecoratedWithDeclAttribute(QualType Ty) { - const CXXRecordDecl *RecTy = Ty->getAsCXXRecordDecl(); - if (!RecTy) - return false; - - if (RecTy->hasAttr()) - return true; - - if (auto *CTSD = dyn_cast(RecTy)) { - ClassTemplateDecl *Template = CTSD->getSpecializedTemplate(); - if (CXXRecordDecl *RD = Template->getTemplatedDecl()) - return RD->hasAttr(); - } - return false; - } bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, const FunctionProtoType *Proto); @@ -2687,6 +2645,13 @@ class Sema final { /// Adds an expression to the set of gathered misaligned members. void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD, CharUnits Alignment); + + bool CheckIntelFPGARegBuiltinFunctionCall(unsigned BuiltinID, CallExpr *Call); + bool CheckIntelFPGAMemBuiltinFunctionCall(CallExpr *Call); + bool CheckIntelSYCLPtrAnnotationBuiltinFunctionCall(unsigned BuiltinID, + CallExpr *Call); + bool CheckIntelSYCLAllocaBuiltinFunctionCall(unsigned BuiltinID, + CallExpr *Call); ///@} // @@ -3943,6 +3908,8 @@ class Sema final { // Whether the callee should be ignored in CUDA/HIP/OpenMP host/device check. bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee); + DeviceDiagnosticReason getEmissionReason(const FunctionDecl *Decl); + private: /// Function or variable declarations to be checked for whether the deferred /// diagnostics should be emitted. @@ -4209,20 +4176,6 @@ class Sema final { void addAMDGPUMaxNumWorkGroupsAttr(Decl *D, const AttributeCommonInfo &CI, Expr *XExpr, Expr *YExpr, Expr *ZExpr); - /// addSYCLIntelPipeIOAttr - Adds a pipe I/O attribute to a particular - /// declaration. - void addSYCLIntelPipeIOAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ID); - SYCLIntelPipeIOAttr *MergeSYCLIntelPipeIOAttr(Decl *D, - const SYCLIntelPipeIOAttr &A); - - /// AddSYCLIntelMaxConcurrencyAttr - Adds a max_concurrency attribute to a - /// particular declaration. - void AddSYCLIntelMaxConcurrencyAttr(Decl *D, - const AttributeCommonInfo &CI, - Expr *E); - - bool checkAllowedSYCLInitializer(VarDecl *VD); - //===--------------------------------------------------------------------===// DLLImportAttr *mergeDLLImportAttr(Decl *D, const AttributeCommonInfo &CI); DLLExportAttr *mergeDLLExportAttr(Decl *D, const AttributeCommonInfo &CI); MSInheritanceAttr *mergeMSInheritanceAttr(Decl *D, @@ -4230,20 +4183,10 @@ class Sema final { bool BestCase, MSInheritanceModel Model); - bool CheckCountedByAttr(Scope *Scope, const FieldDecl *FD); - EnforceTCBAttr *mergeEnforceTCBAttr(Decl *D, const EnforceTCBAttr &AL); EnforceTCBLeafAttr *mergeEnforceTCBLeafAttr(Decl *D, const EnforceTCBLeafAttr &AL); -public: - - DeviceDiagnosticReason getEmissionReason(const FunctionDecl *Decl); - - //@} - - // More parsing and symbol table subroutines. - // Helper for delayed processing of attributes. void ProcessDeclAttributeDelayed(Decl *D, const ParsedAttributesView &AttrList); @@ -4300,8 +4243,173 @@ class Sema final { void redelayDiagnostics(sema::DelayedDiagnosticPool &pool); + void AddSYCLIntelBankBitsAttr(Decl *D, const AttributeCommonInfo &CI, + Expr **Exprs, unsigned Size); + bool AnyWorkGroupSizesDiffer(const Expr *LHSXDim, const Expr *LHSYDim, + const Expr *LHSZDim, const Expr *RHSXDim, + const Expr *RHSYDim, const Expr *RHSZDim); + bool AllWorkGroupSizesSame(const Expr *LHSXDim, const Expr *LHSYDim, + const Expr *LHSZDim, const Expr *RHSXDim, + const Expr *RHSYDim, const Expr *RHSZDim); + void AddSYCLWorkGroupSizeHintAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *XDim, Expr *YDim, Expr *ZDim); + SYCLWorkGroupSizeHintAttr * + MergeSYCLWorkGroupSizeHintAttr(Decl *D, const SYCLWorkGroupSizeHintAttr &A); + void AddIntelReqdSubGroupSize(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + IntelReqdSubGroupSizeAttr * + MergeIntelReqdSubGroupSizeAttr(Decl *D, const IntelReqdSubGroupSizeAttr &A); + IntelNamedSubGroupSizeAttr * + MergeIntelNamedSubGroupSizeAttr(Decl *D, const IntelNamedSubGroupSizeAttr &A); + void AddSYCLIntelNumSimdWorkItemsAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelNumSimdWorkItemsAttr * + MergeSYCLIntelNumSimdWorkItemsAttr(Decl *D, + const SYCLIntelNumSimdWorkItemsAttr &A); + void AddSYCLIntelESimdVectorizeAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelESimdVectorizeAttr * + MergeSYCLIntelESimdVectorizeAttr(Decl *D, + const SYCLIntelESimdVectorizeAttr &A); + void AddSYCLIntelSchedulerTargetFmaxMhzAttr(Decl *D, + const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelSchedulerTargetFmaxMhzAttr *MergeSYCLIntelSchedulerTargetFmaxMhzAttr( + Decl *D, const SYCLIntelSchedulerTargetFmaxMhzAttr &A); + void AddSYCLIntelNoGlobalWorkOffsetAttr(Decl *D, + const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelNoGlobalWorkOffsetAttr *MergeSYCLIntelNoGlobalWorkOffsetAttr( + Decl *D, const SYCLIntelNoGlobalWorkOffsetAttr &A); + void AddSYCLIntelLoopFuseAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelLoopFuseAttr * + MergeSYCLIntelLoopFuseAttr(Decl *D, const SYCLIntelLoopFuseAttr &A); + void AddSYCLIntelPrivateCopiesAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + void AddSYCLIntelMaxReplicatesAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelMaxReplicatesAttr * + MergeSYCLIntelMaxReplicatesAttr(Decl *D, const SYCLIntelMaxReplicatesAttr &A); + void AddSYCLIntelForcePow2DepthAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelForcePow2DepthAttr * + MergeSYCLIntelForcePow2DepthAttr(Decl *D, + const SYCLIntelForcePow2DepthAttr &A); + void AddSYCLIntelInitiationIntervalAttr(Decl *D, + const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelInitiationIntervalAttr *MergeSYCLIntelInitiationIntervalAttr( + Decl *D, const SYCLIntelInitiationIntervalAttr &A); + + SYCLIntelMaxConcurrencyAttr * + MergeSYCLIntelMaxConcurrencyAttr(Decl *D, + const SYCLIntelMaxConcurrencyAttr &A); + void AddSYCLIntelMaxGlobalWorkDimAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelMaxGlobalWorkDimAttr * + MergeSYCLIntelMaxGlobalWorkDimAttr(Decl *D, + const SYCLIntelMaxGlobalWorkDimAttr &A); + void AddSYCLIntelMinWorkGroupsPerComputeUnitAttr( + Decl *D, const AttributeCommonInfo &CI, Expr *E); + SYCLIntelMinWorkGroupsPerComputeUnitAttr * + MergeSYCLIntelMinWorkGroupsPerComputeUnitAttr( + Decl *D, const SYCLIntelMinWorkGroupsPerComputeUnitAttr &A); + void AddSYCLIntelMaxWorkGroupsPerMultiprocessorAttr( + Decl *D, const AttributeCommonInfo &CI, Expr *E); + SYCLIntelMaxWorkGroupsPerMultiprocessorAttr * + MergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr( + Decl *D, const SYCLIntelMaxWorkGroupsPerMultiprocessorAttr &A); + void AddSYCLIntelBankWidthAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelBankWidthAttr * + MergeSYCLIntelBankWidthAttr(Decl *D, const SYCLIntelBankWidthAttr &A); + void AddSYCLIntelNumBanksAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelNumBanksAttr * + MergeSYCLIntelNumBanksAttr(Decl *D, const SYCLIntelNumBanksAttr &A); + SYCLDeviceHasAttr *MergeSYCLDeviceHasAttr(Decl *D, + const SYCLDeviceHasAttr &A); + void AddSYCLDeviceHasAttr(Decl *D, const AttributeCommonInfo &CI, + Expr **Exprs, unsigned Size); + SYCLUsesAspectsAttr *MergeSYCLUsesAspectsAttr(Decl *D, + const SYCLUsesAspectsAttr &A); + void AddSYCLUsesAspectsAttr(Decl *D, const AttributeCommonInfo &CI, + Expr **Exprs, unsigned Size); + bool CheckMaxAllowedWorkGroupSize(const Expr *RWGSXDim, const Expr *RWGSYDim, + const Expr *RWGSZDim, const Expr *MWGSXDim, + const Expr *MWGSYDim, const Expr *MWGSZDim); + void AddSYCLIntelMaxWorkGroupSizeAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *XDim, Expr *YDim, Expr *ZDim); + SYCLIntelMaxWorkGroupSizeAttr * + MergeSYCLIntelMaxWorkGroupSizeAttr(Decl *D, + const SYCLIntelMaxWorkGroupSizeAttr &A); + void CheckSYCLAddIRAttributesFunctionAttrConflicts(Decl *D); + SYCLAddIRAttributesFunctionAttr *MergeSYCLAddIRAttributesFunctionAttr( + Decl *D, const SYCLAddIRAttributesFunctionAttr &A); + void AddSYCLAddIRAttributesFunctionAttr(Decl *D, + const AttributeCommonInfo &CI, + MutableArrayRef Args); + SYCLAddIRAttributesKernelParameterAttr * + MergeSYCLAddIRAttributesKernelParameterAttr( + Decl *D, const SYCLAddIRAttributesKernelParameterAttr &A); + void AddSYCLAddIRAttributesKernelParameterAttr(Decl *D, + const AttributeCommonInfo &CI, + MutableArrayRef Args); + SYCLAddIRAttributesGlobalVariableAttr * + MergeSYCLAddIRAttributesGlobalVariableAttr( + Decl *D, const SYCLAddIRAttributesGlobalVariableAttr &A); + void AddSYCLAddIRAttributesGlobalVariableAttr(Decl *D, + const AttributeCommonInfo &CI, + MutableArrayRef Args); + SYCLAddIRAnnotationsMemberAttr * + MergeSYCLAddIRAnnotationsMemberAttr(Decl *D, + const SYCLAddIRAnnotationsMemberAttr &A); + void AddSYCLAddIRAnnotationsMemberAttr(Decl *D, const AttributeCommonInfo &CI, + MutableArrayRef Args); + void AddSYCLReqdWorkGroupSizeAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *XDim, Expr *YDim, Expr *ZDim); + SYCLReqdWorkGroupSizeAttr * + MergeSYCLReqdWorkGroupSizeAttr(Decl *D, const SYCLReqdWorkGroupSizeAttr &A); + + SYCLTypeAttr *MergeSYCLTypeAttr(Decl *D, const AttributeCommonInfo &CI, + SYCLTypeAttr::SYCLType TypeName); + + /// Emit a diagnostic about the given attribute having a deprecated name, and + /// also emit a fixit hint to generate the new attribute name. + void DiagnoseDeprecatedAttribute(const ParsedAttr &A, StringRef NewScope, + StringRef NewName); + + /// Diagnoses an attribute in the 'intelfpga' namespace and suggests using + /// the attribute in the 'intel' namespace instead. + void CheckDeprecatedSYCLAttributeSpelling(const ParsedAttr &A, + StringRef NewName = ""); + + /// addSYCLIntelPipeIOAttr - Adds a pipe I/O attribute to a particular + /// declaration. + void addSYCLIntelPipeIOAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ID); + SYCLIntelPipeIOAttr *MergeSYCLIntelPipeIOAttr(Decl *D, + const SYCLIntelPipeIOAttr &A); + + /// AddSYCLIntelMaxConcurrencyAttr - Adds a max_concurrency attribute to a + /// particular declaration. + void AddSYCLIntelMaxConcurrencyAttr(Decl *D, const AttributeCommonInfo &CI, + Expr *E); + + bool CheckCountedByAttr(Scope *Scope, const FieldDecl *FD); + ///@} + + // + // + // ------------------------------------------------------------------------- + // // + + /// \name C++ Declarations + /// Implementations are in SemaDeclCXX.cpp + ///@{ + public: void CheckDelegatingCtorCycles(); @@ -5939,13 +6047,6 @@ class Sema final { SourceLocation RParen, ParsedType ParsedTy); - ExprResult BuildSYCLUniqueStableIdExpr(SourceLocation OpLoc, - SourceLocation LParen, - SourceLocation RParen, Expr *E); - ExprResult ActOnSYCLUniqueStableIdExpr(SourceLocation OpLoc, - SourceLocation LParen, - SourceLocation RParen, Expr *E); - bool CheckLoopHintExpr(Expr *E, SourceLocation Loc); ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr); @@ -6997,6 +7098,14 @@ class Sema final { void CheckSubscriptAccessOfNoDeref(const ArraySubscriptExpr *E); void CheckAddressOfNoDeref(const Expr *E); +public: + ExprResult BuildSYCLUniqueStableIdExpr(SourceLocation OpLoc, + SourceLocation LParen, + SourceLocation RParen, Expr *E); + ExprResult ActOnSYCLUniqueStableIdExpr(SourceLocation OpLoc, + SourceLocation LParen, + SourceLocation RParen, Expr *E); + ///@} // @@ -9330,6 +9439,30 @@ class Sema final { const IdentifierInfo *AttrName, SourceRange Range); + SYCLIntelIVDepAttr *BuildSYCLIntelIVDepAttr(const AttributeCommonInfo &CI, + Expr *Expr1, Expr *Expr2); + LoopUnrollHintAttr *BuildLoopUnrollHintAttr(const AttributeCommonInfo &A, + Expr *E); + OpenCLUnrollHintAttr * + BuildOpenCLLoopUnrollHintAttr(const AttributeCommonInfo &A, Expr *E); + + SYCLIntelLoopCountAttr * + BuildSYCLIntelLoopCountAttr(const AttributeCommonInfo &CI, Expr *E); + SYCLIntelInitiationIntervalAttr * + BuildSYCLIntelInitiationIntervalAttr(const AttributeCommonInfo &CI, Expr *E); + SYCLIntelMaxConcurrencyAttr * + BuildSYCLIntelMaxConcurrencyAttr(const AttributeCommonInfo &CI, Expr *E); + SYCLIntelMaxInterleavingAttr * + BuildSYCLIntelMaxInterleavingAttr(const AttributeCommonInfo &CI, Expr *E); + SYCLIntelSpeculatedIterationsAttr * + BuildSYCLIntelSpeculatedIterationsAttr(const AttributeCommonInfo &CI, + Expr *E); + SYCLIntelLoopCoalesceAttr * + BuildSYCLIntelLoopCoalesceAttr(const AttributeCommonInfo &CI, Expr *E); + SYCLIntelMaxReinvocationDelayAttr * + BuildSYCLIntelMaxReinvocationDelayAttr(const AttributeCommonInfo &CI, + Expr *E); + ///@} // @@ -12701,138 +12834,6 @@ class Sema final { AddMethodToGlobalPool(Method, impl, /*instance*/ false); } - void AddSYCLIntelBankBitsAttr(Decl *D, const AttributeCommonInfo &CI, - Expr **Exprs, unsigned Size); - bool AnyWorkGroupSizesDiffer(const Expr *LHSXDim, const Expr *LHSYDim, - const Expr *LHSZDim, const Expr *RHSXDim, - const Expr *RHSYDim, const Expr *RHSZDim); - bool AllWorkGroupSizesSame(const Expr *LHSXDim, const Expr *LHSYDim, - const Expr *LHSZDim, const Expr *RHSXDim, - const Expr *RHSYDim, const Expr *RHSZDim); - void AddSYCLWorkGroupSizeHintAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *XDim, Expr *YDim, Expr *ZDim); - SYCLWorkGroupSizeHintAttr * - MergeSYCLWorkGroupSizeHintAttr(Decl *D, const SYCLWorkGroupSizeHintAttr &A); - void AddIntelReqdSubGroupSize(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - IntelReqdSubGroupSizeAttr * - MergeIntelReqdSubGroupSizeAttr(Decl *D, const IntelReqdSubGroupSizeAttr &A); - IntelNamedSubGroupSizeAttr * - MergeIntelNamedSubGroupSizeAttr(Decl *D, const IntelNamedSubGroupSizeAttr &A); - void AddSYCLIntelNumSimdWorkItemsAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelNumSimdWorkItemsAttr * - MergeSYCLIntelNumSimdWorkItemsAttr(Decl *D, - const SYCLIntelNumSimdWorkItemsAttr &A); - void AddSYCLIntelESimdVectorizeAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelESimdVectorizeAttr * - MergeSYCLIntelESimdVectorizeAttr(Decl *D, - const SYCLIntelESimdVectorizeAttr &A); - void AddSYCLIntelSchedulerTargetFmaxMhzAttr(Decl *D, - const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelSchedulerTargetFmaxMhzAttr *MergeSYCLIntelSchedulerTargetFmaxMhzAttr( - Decl *D, const SYCLIntelSchedulerTargetFmaxMhzAttr &A); - void AddSYCLIntelNoGlobalWorkOffsetAttr(Decl *D, - const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelNoGlobalWorkOffsetAttr *MergeSYCLIntelNoGlobalWorkOffsetAttr( - Decl *D, const SYCLIntelNoGlobalWorkOffsetAttr &A); - void AddSYCLIntelLoopFuseAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelLoopFuseAttr * - MergeSYCLIntelLoopFuseAttr(Decl *D, const SYCLIntelLoopFuseAttr &A); - void AddSYCLIntelPrivateCopiesAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - void AddSYCLIntelMaxReplicatesAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelMaxReplicatesAttr * - MergeSYCLIntelMaxReplicatesAttr(Decl *D, const SYCLIntelMaxReplicatesAttr &A); - void AddSYCLIntelForcePow2DepthAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelForcePow2DepthAttr * - MergeSYCLIntelForcePow2DepthAttr(Decl *D, - const SYCLIntelForcePow2DepthAttr &A); - void AddSYCLIntelInitiationIntervalAttr(Decl *D, - const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelInitiationIntervalAttr *MergeSYCLIntelInitiationIntervalAttr( - Decl *D, const SYCLIntelInitiationIntervalAttr &A); - - SYCLIntelMaxConcurrencyAttr *MergeSYCLIntelMaxConcurrencyAttr( - Decl *D, const SYCLIntelMaxConcurrencyAttr &A); - void AddSYCLIntelMaxGlobalWorkDimAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelMaxGlobalWorkDimAttr * - MergeSYCLIntelMaxGlobalWorkDimAttr(Decl *D, - const SYCLIntelMaxGlobalWorkDimAttr &A); - void AddSYCLIntelMinWorkGroupsPerComputeUnitAttr( - Decl *D, const AttributeCommonInfo &CI, Expr *E); - SYCLIntelMinWorkGroupsPerComputeUnitAttr * - MergeSYCLIntelMinWorkGroupsPerComputeUnitAttr( - Decl *D, const SYCLIntelMinWorkGroupsPerComputeUnitAttr &A); - void AddSYCLIntelMaxWorkGroupsPerMultiprocessorAttr( - Decl *D, const AttributeCommonInfo &CI, Expr *E); - SYCLIntelMaxWorkGroupsPerMultiprocessorAttr * - MergeSYCLIntelMaxWorkGroupsPerMultiprocessorAttr( - Decl *D, const SYCLIntelMaxWorkGroupsPerMultiprocessorAttr &A); - void AddSYCLIntelBankWidthAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelBankWidthAttr * - MergeSYCLIntelBankWidthAttr(Decl *D, const SYCLIntelBankWidthAttr &A); - void AddSYCLIntelNumBanksAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *E); - SYCLIntelNumBanksAttr * - MergeSYCLIntelNumBanksAttr(Decl *D, const SYCLIntelNumBanksAttr &A); - SYCLDeviceHasAttr *MergeSYCLDeviceHasAttr(Decl *D, - const SYCLDeviceHasAttr &A); - void AddSYCLDeviceHasAttr(Decl *D, const AttributeCommonInfo &CI, - Expr **Exprs, unsigned Size); - SYCLUsesAspectsAttr *MergeSYCLUsesAspectsAttr(Decl *D, - const SYCLUsesAspectsAttr &A); - void AddSYCLUsesAspectsAttr(Decl *D, const AttributeCommonInfo &CI, - Expr **Exprs, unsigned Size); - bool CheckMaxAllowedWorkGroupSize(const Expr *RWGSXDim, const Expr *RWGSYDim, - const Expr *RWGSZDim, const Expr *MWGSXDim, - const Expr *MWGSYDim, const Expr *MWGSZDim); - void AddSYCLIntelMaxWorkGroupSizeAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *XDim, Expr *YDim, Expr *ZDim); - SYCLIntelMaxWorkGroupSizeAttr * - MergeSYCLIntelMaxWorkGroupSizeAttr(Decl *D, - const SYCLIntelMaxWorkGroupSizeAttr &A); - void CheckSYCLAddIRAttributesFunctionAttrConflicts(Decl *D); - SYCLAddIRAttributesFunctionAttr *MergeSYCLAddIRAttributesFunctionAttr( - Decl *D, const SYCLAddIRAttributesFunctionAttr &A); - void AddSYCLAddIRAttributesFunctionAttr(Decl *D, - const AttributeCommonInfo &CI, - MutableArrayRef Args); - SYCLAddIRAttributesKernelParameterAttr * - MergeSYCLAddIRAttributesKernelParameterAttr( - Decl *D, const SYCLAddIRAttributesKernelParameterAttr &A); - void AddSYCLAddIRAttributesKernelParameterAttr(Decl *D, - const AttributeCommonInfo &CI, - MutableArrayRef Args); - SYCLAddIRAttributesGlobalVariableAttr * - MergeSYCLAddIRAttributesGlobalVariableAttr( - Decl *D, const SYCLAddIRAttributesGlobalVariableAttr &A); - void AddSYCLAddIRAttributesGlobalVariableAttr(Decl *D, - const AttributeCommonInfo &CI, - MutableArrayRef Args); - SYCLAddIRAnnotationsMemberAttr * - MergeSYCLAddIRAnnotationsMemberAttr(Decl *D, - const SYCLAddIRAnnotationsMemberAttr &A); - void AddSYCLAddIRAnnotationsMemberAttr(Decl *D, const AttributeCommonInfo &CI, - MutableArrayRef Args); - void AddSYCLReqdWorkGroupSizeAttr(Decl *D, const AttributeCommonInfo &CI, - Expr *XDim, Expr *YDim, Expr *ZDim); - SYCLReqdWorkGroupSizeAttr * - MergeSYCLReqdWorkGroupSizeAttr(Decl *D, const SYCLReqdWorkGroupSizeAttr &A); - - SYCLTypeAttr *MergeSYCLTypeAttr(Decl *D, const AttributeCommonInfo &CI, - SYCLTypeAttr::SYCLType TypeName); - - private: /// AddMethodToGlobalPool - Add an instance or factory method to the global /// pool. See descriptoin of AddInstanceMethodToGlobalPool. @@ -15220,16 +15221,6 @@ class Sema final { void CheckSYCLKernelCall(FunctionDecl *CallerFunc, ArrayRef Args); - - bool CheckIntelFPGARegBuiltinFunctionCall(unsigned BuiltinID, CallExpr *Call); - bool CheckIntelFPGAMemBuiltinFunctionCall(CallExpr *Call); - - bool CheckIntelSYCLPtrAnnotationBuiltinFunctionCall(unsigned BuiltinID, - CallExpr *Call); - bool CheckIntelSYCLAllocaBuiltinFunctionCall(unsigned BuiltinID, - CallExpr *Call); - -private: // We store SYCL Kernels here and handle separately -- which is a hack. // FIXME: It would be best to refactor this. llvm::SetVector SyclDeviceDecls; @@ -15321,15 +15312,7 @@ class Sema final { ExprResult BuildSYCLBuiltinBaseTypeExpr(SourceLocation Loc, QualType SourceTy, Expr *Idx); - /// Emit a diagnostic about the given attribute having a deprecated name, and - /// also emit a fixit hint to generate the new attribute name. - void DiagnoseDeprecatedAttribute(const ParsedAttr &A, StringRef NewScope, - StringRef NewName); - - /// Diagnoses an attribute in the 'intelfpga' namespace and suggests using - /// the attribute in the 'intel' namespace instead. - void CheckDeprecatedSYCLAttributeSpelling(const ParsedAttr &A, - StringRef NewName = ""); + bool checkAllowedSYCLInitializer(VarDecl *VD); /// Creates a SemaDiagnosticBuilder that emits the diagnostic if the current /// context is "used as device code". @@ -15373,8 +15356,27 @@ class Sema final { (VDecl->getType().getAddressSpace() == LangAS::sycl_private); } + template + static bool isTypeDecoratedWithDeclAttribute(QualType Ty) { + const CXXRecordDecl *RecTy = Ty->getAsCXXRecordDecl(); + if (!RecTy) + return false; + + if (RecTy->hasAttr()) + return true; + + if (auto *CTSD = dyn_cast(RecTy)) { + ClassTemplateDecl *Template = CTSD->getSpecializedTemplate(); + if (CXXRecordDecl *RD = Template->getTemplatedDecl()) + return RD->hasAttr(); + } + return false; + } + /// Check whether \p Ty corresponds to a SYCL type of name \p TypeName. static bool isSyclType(QualType Ty, SYCLTypeAttr::SYCLType TypeName); + + ///@} }; DeductionFailureInfo