Skip to content

Commit 75c9a3a

Browse files
bwlodarczsys-ce-bb
authored andcommitted
Support for new SPV_INTEL_fpga_memory_attributes (#2196)
This commit adds StridesizeINTEL, WordsizeINTEL and TrueDualPortINTEL support to translator. Original commit: KhronosGroup/SPIRV-LLVM-Translator@5c1e2c7
1 parent aebc134 commit 75c9a3a

File tree

8 files changed

+456
-1450
lines changed

8 files changed

+456
-1450
lines changed

llvm-spirv/lib/SPIRV/SPIRVReader.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3488,6 +3488,12 @@ void generateIntelFPGAAnnotation(
34883488
}
34893489
if (E->hasDecorate(DecorationForcePow2DepthINTEL, 0, &Result))
34903490
Out << "{force_pow2_depth:" << Result << '}';
3491+
if (E->hasDecorate(DecorationStridesizeINTEL, 0, &Result))
3492+
Out << "{stride_size:" << Result << "}";
3493+
if (E->hasDecorate(DecorationWordsizeINTEL, 0, &Result))
3494+
Out << "{word_size:" << Result << "}";
3495+
if (E->hasDecorate(DecorationTrueDualPortINTEL))
3496+
Out << "{true_dual_port}";
34913497
if (E->hasDecorate(DecorationBufferLocationINTEL, 0, &Result))
34923498
Out << "{sycl-buffer-location:" << Result << '}';
34933499
if (E->hasDecorate(DecorationLatencyControlLabelINTEL, 0, &Result))
@@ -3585,6 +3591,12 @@ void generateIntelFPGAAnnotationForStructMember(
35853591
if (E->hasMemberDecorate(DecorationForcePow2DepthINTEL, 0, MemberNumber,
35863592
&Result))
35873593
Out << "{force_pow2_depth:" << Result << '}';
3594+
if (E->hasMemberDecorate(DecorationStridesizeINTEL, 0, MemberNumber, &Result))
3595+
Out << "{stride_size:" << Result << "}";
3596+
if (E->hasMemberDecorate(DecorationWordsizeINTEL, 0, MemberNumber, &Result))
3597+
Out << "{word_size:" << Result << "}";
3598+
if (E->hasMemberDecorate(DecorationTrueDualPortINTEL, 0, MemberNumber))
3599+
Out << "{true_dual_port}";
35883600
if (!AnnotStr.empty())
35893601
AnnotStrVec.emplace_back(AnnotStr);
35903602

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3233,6 +3233,9 @@ AnnotationDecorations tryParseAnnotationString(SPIRVModule *BM,
32333233
.Case("bank_bits", DecorationBankBitsINTEL)
32343234
.Case("merge", DecorationMergeINTEL)
32353235
.Case("force_pow2_depth", DecorationForcePow2DepthINTEL)
3236+
.Case("stride_size", DecorationStridesizeINTEL)
3237+
.Case("word_size", DecorationWordsizeINTEL)
3238+
.Case("true_dual_port", DecorationTrueDualPortINTEL)
32363239
.Default(DecorationUserSemantic);
32373240
if (Dec == DecorationUserSemantic)
32383241
// Restore the braces to translate the whole input string
@@ -3331,7 +3334,8 @@ void addAnnotationDecorations(SPIRVEntry *E, DecorationsInfoVec &Decorations) {
33313334
case DecorationRegisterINTEL:
33323335
case DecorationSinglepumpINTEL:
33333336
case DecorationDoublepumpINTEL:
3334-
case DecorationSimpleDualPortINTEL: {
3337+
case DecorationSimpleDualPortINTEL:
3338+
case DecorationTrueDualPortINTEL: {
33353339
if (M->isAllowedToUseExtension(
33363340
ExtensionID::SPV_INTEL_fpga_memory_attributes)) {
33373341
M->getErrorLog().checkError(I.second.empty(), SPIRVEC_InvalidLlvmModule,
@@ -3352,7 +3356,9 @@ void addAnnotationDecorations(SPIRVEntry *E, DecorationsInfoVec &Decorations) {
33523356
case DecorationBankwidthINTEL:
33533357
case DecorationMaxPrivateCopiesINTEL:
33543358
case DecorationMaxReplicatesINTEL:
3355-
case DecorationForcePow2DepthINTEL: {
3359+
case DecorationForcePow2DepthINTEL:
3360+
case DecorationStridesizeINTEL:
3361+
case DecorationWordsizeINTEL: {
33563362
if (M->isAllowedToUseExtension(
33573363
ExtensionID::SPV_INTEL_fpga_memory_attributes)) {
33583364
M->getErrorLog().checkError(I.second.size() == 1,
@@ -3481,6 +3487,7 @@ void addAnnotationDecorationsForStructMember(SPIRVEntry *E,
34813487
case DecorationSinglepumpINTEL:
34823488
case DecorationDoublepumpINTEL:
34833489
case DecorationSimpleDualPortINTEL:
3490+
case DecorationTrueDualPortINTEL:
34843491
M->getErrorLog().checkError(I.second.empty(), SPIRVEC_InvalidLlvmModule,
34853492
"Member decoration takes no arguments.");
34863493
E->addMemberDecorate(MemberNumber, I.first);
@@ -3491,6 +3498,8 @@ void addAnnotationDecorationsForStructMember(SPIRVEntry *E,
34913498
// DecorationMaxPrivateCopiesINTEL
34923499
// DecorationMaxReplicatesINTEL
34933500
// DecorationForcePow2DepthINTEL
3501+
// DecorarionStridesizeINTEL
3502+
// DecorationWordsizeINTEL
34943503
default:
34953504
M->getErrorLog().checkError(
34963505
I.second.size() == 1, SPIRVEC_InvalidLlvmModule,

llvm-spirv/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:
@@ -334,6 +337,9 @@ class SPIRVMemberDecorate : public SPIRVDecorateGeneric {
334337
case DecorationMergeINTEL:
335338
case DecorationBankBitsINTEL:
336339
case DecorationForcePow2DepthINTEL:
340+
case DecorationStridesizeINTEL:
341+
case DecorationWordsizeINTEL:
342+
case DecorationTrueDualPortINTEL:
337343
return ExtensionID::SPV_INTEL_fpga_memory_attributes;
338344
case DecorationBurstCoalesceINTEL:
339345
case DecorationCacheSizeINTEL:

llvm-spirv/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});

llvm-spirv/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)