@@ -317,10 +317,14 @@ class SubjectList<list<AttrSubject> subjects, SubjectDiag diag = WarnDiag,
317
317
string CustomDiag = customDiag;
318
318
}
319
319
320
- class LangOpt<string name, code customCode = [{}]> {
320
+ class LangOpt<string name, code customCode = [{}], bit silentlyIgnore = 0 > {
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, the attribute is accepted but is silently ignored. This is
325
+ // useful in multi-compilation situations like SYCL.
326
+ bit SilentlyIgnore = silentlyIgnore;
327
+
324
328
// A custom predicate, written as an expression evaluated in a context with
325
329
// "LangOpts" bound.
326
330
code CustomCode = customCode;
@@ -329,9 +333,10 @@ def MicrosoftExt : LangOpt<"MicrosoftExt">;
329
333
def Borland : LangOpt<"Borland">;
330
334
def CUDA : LangOpt<"CUDA">;
331
335
def HIP : LangOpt<"HIP">;
336
+ def SYCL : LangOpt<"SYCL">;
332
337
def SYCLIsDevice : LangOpt<"SYCLIsDevice">;
333
- def SYCL : LangOpt<"SYCLIsDevice">;
334
338
def SYCLIsHost : LangOpt<"SYCLIsHost">;
339
+ def SilentlyIgnoreSYCLIsHost : LangOpt<"SYCLIsHost", "", 1>;
335
340
def SYCLExplicitSIMD : LangOpt<"SYCLExplicitSIMD">;
336
341
def COnly : LangOpt<"", "!LangOpts.CPlusPlus">;
337
342
def CPlusPlus : LangOpt<"CPlusPlus">;
@@ -1176,7 +1181,8 @@ def SYCLKernel : InheritableAttr {
1176
1181
// e.g. because the function is already vectorized. Used to mark SYCL
1177
1182
// explicit SIMD kernels and functions.
1178
1183
def SYCLSimd : InheritableAttr {
1179
- let Spellings = [GNU<"sycl_explicit_simd">];
1184
+ let Spellings = [GNU<"sycl_explicit_simd">,
1185
+ CXX11<"intel", "sycl_explicit_simd">];
1180
1186
let Subjects = SubjectList<[Function]>;
1181
1187
let LangOpts = [SYCLExplicitSIMD];
1182
1188
let Documentation = [SYCLSimdDocs];
@@ -1322,7 +1328,7 @@ def SYCLIntelNoGlobalWorkOffset : InheritableAttr {
1322
1328
let Spellings = [CXX11<"intelfpga","no_global_work_offset">,
1323
1329
CXX11<"intel","no_global_work_offset">];
1324
1330
let Args = [ExprArgument<"Value", /*optional*/1>];
1325
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1331
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1326
1332
let Subjects = SubjectList<[Function], ErrorDiag>;
1327
1333
let Documentation = [SYCLIntelNoGlobalWorkOffsetAttrDocs];
1328
1334
}
@@ -1331,7 +1337,7 @@ def SYCLIntelLoopFuse : InheritableAttr {
1331
1337
let Spellings = [CXX11<"intel", "loop_fuse">,
1332
1338
CXX11<"intel", "loop_fuse_independent">];
1333
1339
let Args = [ExprArgument<"Value", /*optional=*/ 1>];
1334
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1340
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1335
1341
let Subjects = SubjectList<[Function], ErrorDiag>;
1336
1342
let Accessors = [Accessor<"isIndependent",
1337
1343
[CXX11<"intel", "loop_fuse_independent">]>];
@@ -1397,7 +1403,7 @@ def IntelReqdSubGroupSize: InheritableAttr {
1397
1403
let Args = [ExprArgument<"Value">];
1398
1404
let Subjects = SubjectList<[Function], ErrorDiag>;
1399
1405
let Documentation = [IntelReqdSubGroupSizeDocs];
1400
- let LangOpts = [OpenCL, SYCLIsDevice, SYCLIsHost ];
1406
+ let LangOpts = [OpenCL, SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1401
1407
}
1402
1408
1403
1409
// This attribute is both a type attribute, and a declaration attribute (for
@@ -1843,7 +1849,7 @@ def SYCLIntelFPGAInitiationInterval : StmtAttr {
1843
1849
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1844
1850
ErrorDiag, "'for', 'while', and 'do' statements">;
1845
1851
let Args = [ExprArgument<"IntervalExpr">];
1846
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1852
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1847
1853
let HasCustomTypeTransform = 1;
1848
1854
let Documentation = [SYCLIntelFPGAInitiationIntervalAttrDocs];
1849
1855
}
@@ -1854,7 +1860,7 @@ def SYCLIntelFPGAMaxConcurrency : StmtAttr {
1854
1860
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1855
1861
ErrorDiag, "'for', 'while', and 'do' statements">;
1856
1862
let Args = [ExprArgument<"NThreadsExpr">];
1857
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1863
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1858
1864
let HasCustomTypeTransform = 1;
1859
1865
let Documentation = [SYCLIntelFPGAMaxConcurrencyAttrDocs];
1860
1866
}
@@ -1865,7 +1871,7 @@ def SYCLIntelFPGALoopCoalesce : StmtAttr {
1865
1871
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1866
1872
ErrorDiag, "'for', 'while', and 'do' statements">;
1867
1873
let Args = [ExprArgument<"NExpr">];
1868
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1874
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1869
1875
let HasCustomTypeTransform = 1;
1870
1876
let Documentation = [SYCLIntelFPGALoopCoalesceAttrDocs];
1871
1877
}
@@ -1875,7 +1881,7 @@ def SYCLIntelFPGADisableLoopPipelining : StmtAttr {
1875
1881
CXX11<"intel","disable_loop_pipelining">];
1876
1882
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1877
1883
ErrorDiag, "'for', 'while', and 'do' statements">;
1878
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1884
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1879
1885
let HasCustomTypeTransform = 1;
1880
1886
let Documentation = [SYCLIntelFPGADisableLoopPipeliningAttrDocs];
1881
1887
}
@@ -1886,7 +1892,7 @@ def SYCLIntelFPGAMaxInterleaving : StmtAttr {
1886
1892
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1887
1893
ErrorDiag, "'for', 'while', and 'do' statements">;
1888
1894
let Args = [ExprArgument<"NExpr">];
1889
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1895
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1890
1896
let HasCustomTypeTransform = 1;
1891
1897
let Documentation = [SYCLIntelFPGAMaxInterleavingAttrDocs];
1892
1898
}
@@ -1897,7 +1903,7 @@ def SYCLIntelFPGASpeculatedIterations : StmtAttr {
1897
1903
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1898
1904
ErrorDiag, "'for', 'while', and 'do' statements">;
1899
1905
let Args = [ExprArgument<"NExpr">];
1900
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1906
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1901
1907
let HasCustomTypeTransform = 1;
1902
1908
let Documentation = [SYCLIntelFPGASpeculatedIterationsAttrDocs];
1903
1909
}
@@ -1906,7 +1912,7 @@ def SYCLIntelFPGANofusion : StmtAttr {
1906
1912
let Spellings = [CXX11<"intel","nofusion">];
1907
1913
let Subjects = SubjectList<[ForStmt, CXXForRangeStmt, WhileStmt, DoStmt],
1908
1914
ErrorDiag, "'for', 'while', and 'do' statements">;
1909
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1915
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1910
1916
let HasCustomTypeTransform = 1;
1911
1917
let Documentation = [SYCLIntelFPGANofusionAttrDocs];
1912
1918
}
@@ -1948,7 +1954,7 @@ def IntelFPGADoublePump : Attr {
1948
1954
CXX11<"intel", "doublepump">];
1949
1955
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1950
1956
Field], ErrorDiag>;
1951
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1957
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1952
1958
let Documentation = [IntelFPGADoublePumpAttrDocs];
1953
1959
}
1954
1960
@@ -1957,7 +1963,7 @@ def IntelFPGASinglePump : Attr {
1957
1963
CXX11<"intel", "singlepump">];
1958
1964
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1959
1965
Field], ErrorDiag>;
1960
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1966
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1961
1967
let Documentation = [IntelFPGASinglePumpAttrDocs];
1962
1968
}
1963
1969
@@ -1978,7 +1984,7 @@ def IntelFPGAMemory : Attr {
1978
1984
}];
1979
1985
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
1980
1986
Field], ErrorDiag>;
1981
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1987
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1982
1988
let Documentation = [IntelFPGAMemoryAttrDocs];
1983
1989
}
1984
1990
@@ -1987,7 +1993,7 @@ def IntelFPGARegister : Attr {
1987
1993
CXX11<"intel", "fpga_register">];
1988
1994
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
1989
1995
Field], ErrorDiag>;
1990
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
1996
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
1991
1997
let Documentation = [IntelFPGARegisterAttrDocs];
1992
1998
}
1993
1999
@@ -1998,7 +2004,7 @@ def IntelFPGABankWidth : Attr {
1998
2004
let Args = [ExprArgument<"Value">];
1999
2005
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2000
2006
Field], ErrorDiag>;
2001
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2007
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2002
2008
let Documentation = [IntelFPGABankWidthAttrDocs];
2003
2009
}
2004
2010
@@ -2008,15 +2014,15 @@ def IntelFPGANumBanks : Attr {
2008
2014
let Args = [ExprArgument<"Value">];
2009
2015
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2010
2016
Field], ErrorDiag>;
2011
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2017
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2012
2018
let Documentation = [IntelFPGANumBanksAttrDocs];
2013
2019
}
2014
2020
2015
2021
def IntelFPGAPrivateCopies : InheritableAttr {
2016
2022
let Spellings = [CXX11<"intelfpga","private_copies">,
2017
2023
CXX11<"intel","private_copies">];
2018
2024
let Args = [ExprArgument<"Value">];
2019
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2025
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2020
2026
let Subjects = SubjectList<[IntelFPGALocalNonConstVar, Field], ErrorDiag>;
2021
2027
let Documentation = [IntelFPGAPrivateCopiesAttrDocs];
2022
2028
}
@@ -2028,7 +2034,7 @@ def IntelFPGAMerge : Attr {
2028
2034
let Args = [StringArgument<"Name">, StringArgument<"Direction">];
2029
2035
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalOrStaticVar,
2030
2036
Field], ErrorDiag>;
2031
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2037
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2032
2038
let Documentation = [IntelFPGAMergeAttrDocs];
2033
2039
}
2034
2040
@@ -2038,7 +2044,7 @@ def IntelFPGAMaxReplicates : Attr {
2038
2044
let Args = [ExprArgument<"Value">];
2039
2045
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2040
2046
Field], ErrorDiag>;
2041
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2047
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2042
2048
let Documentation = [IntelFPGAMaxReplicatesAttrDocs];
2043
2049
}
2044
2050
@@ -2047,7 +2053,7 @@ def IntelFPGASimpleDualPort : Attr {
2047
2053
CXX11<"intel","simple_dual_port">];
2048
2054
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2049
2055
Field], ErrorDiag>;
2050
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2056
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2051
2057
let Documentation = [IntelFPGASimpleDualPortAttrDocs];
2052
2058
}
2053
2059
@@ -2083,7 +2089,7 @@ def IntelFPGAForcePow2Depth : Attr {
2083
2089
let Args = [ExprArgument<"Value">];
2084
2090
let Subjects = SubjectList<[IntelFPGAConstVar, IntelFPGALocalStaticSlaveMemVar,
2085
2091
Field], ErrorDiag>;
2086
- let LangOpts = [SYCLIsDevice, SYCLIsHost ];
2092
+ let LangOpts = [SYCLIsDevice, SilentlyIgnoreSYCLIsHost ];
2087
2093
let Documentation = [IntelFPGAForcePow2DepthAttrDocs];
2088
2094
let AdditionalMembers = [{
2089
2095
static unsigned getMinValue() {
0 commit comments