@@ -2980,27 +2980,46 @@ static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {
2980
2980
}
2981
2981
2982
2982
// Handles intel_reqd_sub_group_size.
2983
+ void Sema::addIntelReqdSubGroupSizeAttr (Decl *D,
2984
+ const AttributeCommonInfo &Attr,
2985
+ Expr *E) {
2986
+ if (!E)
2987
+ return ;
2988
+
2989
+ if (!E->isInstantiationDependent ()) {
2990
+ llvm::APSInt ArgVal (32 );
2991
+ if (!E->isIntegerConstantExpr (ArgVal, getASTContext ())) {
2992
+ Diag (E->getExprLoc (), diag::err_attribute_argument_type)
2993
+ << Attr.getAttrName () << AANT_ArgumentIntegerConstant
2994
+ << E->getSourceRange ();
2995
+ return ;
2996
+ }
2997
+ int32_t ArgInt = ArgVal.getSExtValue ();
2998
+ if (ArgInt < 0 ) {
2999
+ Diag (E->getExprLoc (), diag::err_attribute_requires_positive_integer)
3000
+ << Attr.getAttrName () << /* non-negative*/ 1 ;
3001
+ return ;
3002
+ }
3003
+ if (ArgInt == 0 ) {
3004
+ Diag (E->getExprLoc (), diag::err_attribute_argument_is_zero)
3005
+ << Attr.getAttrName () << 0 ;
3006
+ return ;
3007
+ }
3008
+ }
3009
+
3010
+ D->addAttr (::new (Context) IntelReqdSubGroupSizeAttr (Context, Attr, E));
3011
+ }
3012
+
2983
3013
static void handleSubGroupSize (Sema &S, Decl *D, const ParsedAttr &AL) {
2984
3014
if (S.LangOpts .SYCLIsHost )
2985
3015
return ;
2986
3016
2987
- uint32_t SGSize;
2988
- const Expr *E = AL.getArgAsExpr (0 );
2989
- if (!checkUInt32Argument (S, AL, E, SGSize))
2990
- return ;
2991
- if (SGSize == 0 ) {
2992
- S.Diag (AL.getLoc (), diag::err_attribute_argument_is_zero)
2993
- << AL << E->getSourceRange ();
2994
- return ;
2995
- }
3017
+ Expr *E = AL.getArgAsExpr (0 );
2996
3018
2997
- IntelReqdSubGroupSizeAttr *Existing =
2998
- D->getAttr <IntelReqdSubGroupSizeAttr>();
2999
- if (Existing && Existing->getSubGroupSize () != SGSize)
3019
+ if (D->getAttr <IntelReqdSubGroupSizeAttr>())
3000
3020
S.Diag (AL.getLoc (), diag::warn_duplicate_attribute) << AL;
3001
3021
3002
- D->addAttr (::new (S.Context )
3003
- IntelReqdSubGroupSizeAttr (S.Context , AL, SGSize));
3022
+ S.addIntelReqdSubGroupSizeAttr (D, AL, E);
3004
3023
}
3005
3024
3006
3025
// Handles num_simd_work_items.
0 commit comments