Skip to content

Commit 5c1e2c7

Browse files
authored
Support for new SPV_INTEL_fpga_memory_attributes (#2196)
This commit adds StridesizeINTEL, WordsizeINTEL and TrueDualPortINTEL support to translator.
1 parent 88eff58 commit 5c1e2c7

File tree

8 files changed

+456
-1450
lines changed

8 files changed

+456
-1450
lines changed

lib/SPIRV/SPIRVReader.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3513,6 +3513,12 @@ void generateIntelFPGAAnnotation(
35133513
}
35143514
if (E->hasDecorate(DecorationForcePow2DepthINTEL, 0, &Result))
35153515
Out << "{force_pow2_depth:" << Result << '}';
3516+
if (E->hasDecorate(DecorationStridesizeINTEL, 0, &Result))
3517+
Out << "{stride_size:" << Result << "}";
3518+
if (E->hasDecorate(DecorationWordsizeINTEL, 0, &Result))
3519+
Out << "{word_size:" << Result << "}";
3520+
if (E->hasDecorate(DecorationTrueDualPortINTEL))
3521+
Out << "{true_dual_port}";
35163522
if (E->hasDecorate(DecorationBufferLocationINTEL, 0, &Result))
35173523
Out << "{sycl-buffer-location:" << Result << '}';
35183524
if (E->hasDecorate(DecorationLatencyControlLabelINTEL, 0, &Result))
@@ -3610,6 +3616,12 @@ void generateIntelFPGAAnnotationForStructMember(
36103616
if (E->hasMemberDecorate(DecorationForcePow2DepthINTEL, 0, MemberNumber,
36113617
&Result))
36123618
Out << "{force_pow2_depth:" << Result << '}';
3619+
if (E->hasMemberDecorate(DecorationStridesizeINTEL, 0, MemberNumber, &Result))
3620+
Out << "{stride_size:" << Result << "}";
3621+
if (E->hasMemberDecorate(DecorationWordsizeINTEL, 0, MemberNumber, &Result))
3622+
Out << "{word_size:" << Result << "}";
3623+
if (E->hasMemberDecorate(DecorationTrueDualPortINTEL, 0, MemberNumber))
3624+
Out << "{true_dual_port}";
36133625
if (!AnnotStr.empty())
36143626
AnnotStrVec.emplace_back(AnnotStr);
36153627

lib/SPIRV/SPIRVWriter.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3179,6 +3179,9 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
31793179
.Case("bank_bits", DecorationBankBitsINTEL)
31803180
.Case("merge", DecorationMergeINTEL)
31813181
.Case("force_pow2_depth", DecorationForcePow2DepthINTEL)
3182+
.Case("stride_size", DecorationStridesizeINTEL)
3183+
.Case("word_size", DecorationWordsizeINTEL)
3184+
.Case("true_dual_port", DecorationTrueDualPortINTEL)
31823185
.Default(DecorationUserSemantic);
31833186
if (Dec == DecorationUserSemantic)
31843187
// Restore the braces to translate the whole input string
@@ -3277,7 +3280,8 @@ void addAnnotationDecorations(SPIRVEntry *E, DecorationsInfoVec &Decorations) {
32773280
case DecorationRegisterINTEL:
32783281
case DecorationSinglepumpINTEL:
32793282
case DecorationDoublepumpINTEL:
3280-
case DecorationSimpleDualPortINTEL: {
3283+
case DecorationSimpleDualPortINTEL:
3284+
case DecorationTrueDualPortINTEL: {
32813285
if (M->isAllowedToUseExtension(
32823286
ExtensionID::SPV_INTEL_fpga_memory_attributes)) {
32833287
M->getErrorLog().checkError(I.second.empty(), SPIRVEC_InvalidLlvmModule,
@@ -3298,7 +3302,9 @@ void addAnnotationDecorations(SPIRVEntry *E, DecorationsInfoVec &Decorations) {
32983302
case DecorationBankwidthINTEL:
32993303
case DecorationMaxPrivateCopiesINTEL:
33003304
case DecorationMaxReplicatesINTEL:
3301-
case DecorationForcePow2DepthINTEL: {
3305+
case DecorationForcePow2DepthINTEL:
3306+
case DecorationStridesizeINTEL:
3307+
case DecorationWordsizeINTEL: {
33023308
if (M->isAllowedToUseExtension(
33033309
ExtensionID::SPV_INTEL_fpga_memory_attributes)) {
33043310
M->getErrorLog().checkError(I.second.size() == 1,
@@ -3427,6 +3433,7 @@ void addAnnotationDecorationsForStructMember(SPIRVEntry *E,
34273433
case DecorationSinglepumpINTEL:
34283434
case DecorationDoublepumpINTEL:
34293435
case DecorationSimpleDualPortINTEL:
3436+
case DecorationTrueDualPortINTEL:
34303437
M->getErrorLog().checkError(I.second.empty(), SPIRVEC_InvalidLlvmModule,
34313438
"Member decoration takes no arguments.");
34323439
E->addMemberDecorate(MemberNumber, I.first);
@@ -3437,6 +3444,8 @@ void addAnnotationDecorationsForStructMember(SPIRVEntry *E,
34373444
// DecorationMaxPrivateCopiesINTEL
34383445
// DecorationMaxReplicatesINTEL
34393446
// DecorationForcePow2DepthINTEL
3447+
// DecorarionStridesizeINTEL
3448+
// DecorationWordsizeINTEL
34403449
default:
34413450
M->getErrorLog().checkError(
34423451
I.second.size() == 1, SPIRVEC_InvalidLlvmModule,

lib/SPIRV/libSPIRV/SPIRVDecorate.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ class SPIRVDecorate : public SPIRVDecorateGeneric {
151151
case DecorationMergeINTEL:
152152
case DecorationBankBitsINTEL:
153153
case DecorationForcePow2DepthINTEL:
154+
case DecorationStridesizeINTEL:
155+
case DecorationWordsizeINTEL:
156+
case DecorationTrueDualPortINTEL:
154157
return ExtensionID::SPV_INTEL_fpga_memory_attributes;
155158
case DecorationBurstCoalesceINTEL:
156159
case DecorationCacheSizeINTEL:
@@ -336,6 +339,9 @@ class SPIRVMemberDecorate : public SPIRVDecorateGeneric {
336339
case DecorationMergeINTEL:
337340
case DecorationBankBitsINTEL:
338341
case DecorationForcePow2DepthINTEL:
342+
case DecorationStridesizeINTEL:
343+
case DecorationWordsizeINTEL:
344+
case DecorationTrueDualPortINTEL:
339345
return ExtensionID::SPV_INTEL_fpga_memory_attributes;
340346
case DecorationBurstCoalesceINTEL:
341347
case DecorationCacheSizeINTEL:

lib/SPIRV/libSPIRV/SPIRVEnum.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,11 @@ template <> inline void SPIRVMap<Decoration, SPIRVCapVec>::init() {
416416
ADD_VEC_INIT(DecorationBankBitsINTEL, {CapabilityFPGAMemoryAttributesINTEL});
417417
ADD_VEC_INIT(DecorationForcePow2DepthINTEL,
418418
{CapabilityFPGAMemoryAttributesINTEL});
419+
ADD_VEC_INIT(DecorationStridesizeINTEL,
420+
{CapabilityFPGAMemoryAttributesINTEL});
421+
ADD_VEC_INIT(DecorationWordsizeINTEL, {CapabilityFPGAMemoryAttributesINTEL});
422+
ADD_VEC_INIT(DecorationTrueDualPortINTEL,
423+
{CapabilityFPGAMemoryAttributesINTEL});
419424
ADD_VEC_INIT(DecorationReferencedIndirectlyINTEL,
420425
{CapabilityIndirectReferencesINTEL});
421426
ADD_VEC_INIT(DecorationIOPipeStorageINTEL, {CapabilityIOPipesINTEL});

lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ template <> inline void SPIRVMap<Decoration, std::string>::init() {
161161
add(DecorationMergeINTEL, "MergeINTEL");
162162
add(DecorationBankBitsINTEL, "BankBitsINTEL");
163163
add(DecorationForcePow2DepthINTEL, "ForcePow2DepthINTEL");
164+
add(DecorationStridesizeINTEL, "StridesizeINTEL");
165+
add(DecorationWordsizeINTEL, "WordsizeINTEL");
166+
add(DecorationTrueDualPortINTEL, "TrueDualPortINTEL");
164167
add(DecorationBurstCoalesceINTEL, "BurstCoalesceINTEL");
165168
add(DecorationCacheSizeINTEL, "CacheSizeINTEL");
166169
add(DecorationDontStaticallyCoalesceINTEL, "DontStaticallyCoalesceINTEL");

0 commit comments

Comments
 (0)