@@ -317,11 +317,12 @@ class SubjectList<list<AttrSubject> subjects, SubjectDiag diag = WarnDiag,
317
317
string CustomDiag = customDiag;
318
318
}
319
319
320
- class LangOpt<string name, bit warn = 1, code customCode = [{}]> {
320
+ class LangOpt<string name, code customCode = [{}], bit warn = 1 > {
321
321
// The language option to test; ignored when custom code is supplied.
322
322
string Name = name;
323
323
324
- // If set to 1, diagnose the attribute as being ignored if the test fails.
324
+ // If set to 0, the attribute is accepted but is silently ignored. This is
325
+ // useful in multi-compilation situations like SYCL.
325
326
bit Warn = warn;
326
327
327
328
// A custom predicate, written as an expression evaluated in a context with
@@ -333,18 +334,19 @@ def Borland : LangOpt<"Borland">;
333
334
def CUDA : LangOpt<"CUDA">;
334
335
def HIP : LangOpt<"HIP">;
335
336
def SYCL : LangOpt<"SYCL">;
336
- def SYCLIsDevice : LangOpt<"", 0, "(LangOpts.SYCL && LangOpts.SYCLIsDevice)">;
337
- def SYCLIsHost : LangOpt<"", 0, "(LangOpts.SYCL && LangOpts.SYCLIsHost)">;
337
+ def SYCLIsDevice : LangOpt<"SYCLIsDevice">;
338
+ def SYCLIsHost : LangOpt<"SYCLIsHost">;
339
+ def SilentlyIgnoreSYCLIsHost : LangOpt<"SYCLIsHost", "", 0>;
338
340
def SYCLExplicitSIMD : LangOpt<"SYCLExplicitSIMD">;
339
- def COnly : LangOpt<"", 1, "!LangOpts.CPlusPlus">;
341
+ def COnly : LangOpt<"", "!LangOpts.CPlusPlus">;
340
342
def CPlusPlus : LangOpt<"CPlusPlus">;
341
343
def OpenCL : LangOpt<"OpenCL">;
342
344
def RenderScript : LangOpt<"RenderScript">;
343
345
def ObjC : LangOpt<"ObjC">;
344
346
def BlocksSupported : LangOpt<"Blocks">;
345
347
def ObjCAutoRefCount : LangOpt<"ObjCAutoRefCount">;
346
348
def ObjCNonFragileRuntime
347
- : LangOpt<"", 1, "LangOpts.ObjCRuntime.allowsClassStubs()">;
349
+ : LangOpt<"", "LangOpts.ObjCRuntime.allowsClassStubs()">;
348
350
349
351
// Language option for CMSE extensions
350
352
def Cmse : LangOpt<"Cmse">;
@@ -1325,7 +1327,7 @@ def SYCLIntelNoGlobalWorkOffset : InheritableAttr {
1325
1327
let Spellings = [CXX11<"intelfpga","no_global_work_offset">,
1326
1328
CXX11<"intel","no_global_work_offset">];
1327
1329
let Args = [ExprArgument<"Value", /*optional*/1>];
1328
- let LangOpts = [SYCLIsDevice];
1330
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1329
1331
let Subjects = SubjectList<[Function], ErrorDiag>;
1330
1332
let Documentation = [SYCLIntelNoGlobalWorkOffsetAttrDocs];
1331
1333
}
@@ -1334,7 +1336,7 @@ def SYCLIntelLoopFuse : InheritableAttr {
1334
1336
let Spellings = [CXX11<"intel", "loop_fuse">,
1335
1337
CXX11<"intel", "loop_fuse_independent">];
1336
1338
let Args = [ExprArgument<"Value", /*optional=*/ 1>];
1337
- let LangOpts = [SYCLIsDevice];
1339
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1338
1340
let Subjects = SubjectList<[Function], ErrorDiag>;
1339
1341
let Accessors = [Accessor<"isIndependent",
1340
1342
[CXX11<"intel", "loop_fuse_independent">]>];
@@ -1398,7 +1400,7 @@ def IntelReqdSubGroupSize: InheritableAttr {
1398
1400
let Args = [ExprArgument<"Value">];
1399
1401
let Subjects = SubjectList<[Function, CXXMethod], ErrorDiag>;
1400
1402
let Documentation = [IntelReqdSubGroupSizeDocs];
1401
- let LangOpts = [OpenCL, SYCLIsDevice, SYCLIsHost ];
1403
+ let LangOpts = [OpenCL, SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1402
1404
}
1403
1405
1404
1406
// This attribute is both a type attribute, and a declaration attribute (for
@@ -1949,7 +1951,7 @@ def IntelFPGADoublePump : Attr {
1949
1951
CXX11<"intel", "doublepump">];
1950
1952
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1951
1953
Field], ErrorDiag>;
1952
- let LangOpts = [SYCLIsDevice];
1954
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1953
1955
let Documentation = [IntelFPGADoublePumpAttrDocs];
1954
1956
}
1955
1957
@@ -1958,7 +1960,7 @@ def IntelFPGASinglePump : Attr {
1958
1960
CXX11<"intel", "singlepump">];
1959
1961
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1960
1962
Field], ErrorDiag>;
1961
- let LangOpts = [SYCLIsDevice];
1963
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1962
1964
let Documentation = [IntelFPGASinglePumpAttrDocs];
1963
1965
}
1964
1966
@@ -1979,7 +1981,7 @@ def IntelFPGAMemory : Attr {
1979
1981
}];
1980
1982
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
1981
1983
Field], ErrorDiag>;
1982
- let LangOpts = [SYCLIsDevice];
1984
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1983
1985
let Documentation = [IntelFPGAMemoryAttrDocs];
1984
1986
}
1985
1987
@@ -1988,7 +1990,7 @@ def IntelFPGARegister : Attr {
1988
1990
CXX11<"intel", "fpga_register">];
1989
1991
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1990
1992
Field], ErrorDiag>;
1991
- let LangOpts = [SYCLIsDevice];
1993
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1992
1994
let Documentation = [IntelFPGARegisterAttrDocs];
1993
1995
}
1994
1996
@@ -1999,7 +2001,7 @@ def IntelFPGABankWidth : Attr {
1999
2001
let Args = [ExprArgument<"Value">];
2000
2002
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2001
2003
Field], ErrorDiag>;
2002
- let LangOpts = [SYCLIsDevice];
2004
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2003
2005
let Documentation = [IntelFPGABankWidthAttrDocs];
2004
2006
}
2005
2007
@@ -2009,15 +2011,15 @@ def IntelFPGANumBanks : Attr {
2009
2011
let Args = [ExprArgument<"Value">];
2010
2012
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2011
2013
Field], ErrorDiag>;
2012
- let LangOpts = [SYCLIsDevice];
2014
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2013
2015
let Documentation = [IntelFPGANumBanksAttrDocs];
2014
2016
}
2015
2017
2016
2018
def IntelFPGAPrivateCopies : InheritableAttr {
2017
2019
let Spellings = [CXX11<"intelfpga","private_copies">,
2018
2020
CXX11<"intel","private_copies">];
2019
2021
let Args = [ExprArgument<"Value">];
2020
- let LangOpts = [SYCLIsDevice];
2022
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2021
2023
let Subjects = SubjectList<[IntelFPGALocalNonConstVar, Field], ErrorDiag>;
2022
2024
let Documentation = [IntelFPGAPrivateCopiesAttrDocs];
2023
2025
}
@@ -2029,7 +2031,7 @@ def IntelFPGAMerge : Attr {
2029
2031
let Args = [StringArgument<"Name">, StringArgument<"Direction">];
2030
2032
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
2031
2033
Field], ErrorDiag>;
2032
- let LangOpts = [SYCLIsDevice];
2034
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2033
2035
let Documentation = [IntelFPGAMergeAttrDocs];
2034
2036
}
2035
2037
@@ -2039,7 +2041,7 @@ def IntelFPGAMaxReplicates : Attr {
2039
2041
let Args = [ExprArgument<"Value">];
2040
2042
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2041
2043
Field], ErrorDiag>;
2042
- let LangOpts = [SYCLIsDevice];
2044
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2043
2045
let Documentation = [IntelFPGAMaxReplicatesAttrDocs];
2044
2046
}
2045
2047
@@ -2048,7 +2050,7 @@ def IntelFPGASimpleDualPort : Attr {
2048
2050
CXX11<"intel","simple_dual_port">];
2049
2051
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2050
2052
Field], ErrorDiag>;
2051
- let LangOpts = [SYCLIsDevice];
2053
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2052
2054
let Documentation = [IntelFPGASimpleDualPortAttrDocs];
2053
2055
}
2054
2056
@@ -2084,7 +2086,7 @@ def IntelFPGAForcePow2Depth : Attr {
2084
2086
let Args = [ExprArgument<"Value">];
2085
2087
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2086
2088
Field], ErrorDiag>;
2087
- let LangOpts = [SYCLIsDevice];
2089
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2088
2090
let Documentation = [IntelFPGAForcePow2DepthAttrDocs];
2089
2091
let AdditionalMembers = [{
2090
2092
static unsigned getMinValue() {
0 commit comments