Skip to content

Commit ca0c16f

Browse files
NikitaRudenkoIntelzuban32aus-intelAlexeySachkovAlexeySotkin
committed
Add infrastructure for SPV_INTEL_vector_compute extension
Extension is published at intel/llvm#1612 Change-Id: I145ca21c3f99ec11cfe0c4758e205564af5cff6f Co-Authored-By: Aleksandr Bezzubikov <[email protected]> Co-Authored-By: Aleksander Us <[email protected]> Co-Authored-By: Alexey Sachkov <[email protected]> Co-Authored-By: Alexey Sotkin <[email protected]> Co-Authored-By: Anton Sidorenko <[email protected]> Co-Authored-By: Gang Chen <[email protected]> Co-Authored-By: Kai Chen <[email protected]> Co-Authored-By: Konstantin Vladimirov <[email protected]> Co-Authored-By: Wei Pan <[email protected]>
1 parent 4715d1d commit ca0c16f

File tree

9 files changed

+63
-4
lines changed

9 files changed

+63
-4
lines changed

include/LLVMSPIRVExtensions.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ EXT(SPV_INTEL_function_pointers)
1717
EXT(SPV_INTEL_kernel_attributes)
1818
EXT(SPV_INTEL_inline_assembly)
1919
EXT(SPV_INTEL_float_controls2)
20+
EXT(SPV_INTEL_vector_compute)

lib/SPIRV/SPIRVWriter.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2287,6 +2287,14 @@ bool LLVMToSPIRV::transExecutionMode() {
22872287
BM->addCapability(CapabilityFPGAKernelAttributesINTEL);
22882288
}
22892289
} break;
2290+
case spv::ExecutionModeSharedLocalMemorySizeINTEL: {
2291+
if (!BM->isAllowedToUseExtension(ExtensionID::SPV_INTEL_vector_compute))
2292+
break;
2293+
unsigned SLMSize;
2294+
N.get(SLMSize);
2295+
BF->addExecutionMode(new SPIRVExecutionMode(
2296+
BF, static_cast<ExecutionMode>(EMode), SLMSize));
2297+
} break;
22902298

22912299
case spv::ExecutionModeDenormPreserve:
22922300
case spv::ExecutionModeDenormFlushToZero:

lib/SPIRV/libSPIRV/SPIRVEntry.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ void SPIRVExecutionMode::decode(std::istream &I) {
491491
case ExecutionModeRoundingModeRTNINTEL:
492492
case ExecutionModeFloatingPointModeALTINTEL:
493493
case ExecutionModeFloatingPointModeIEEEINTEL:
494+
case ExecutionModeSharedLocalMemorySizeINTEL:
494495
case ExecutionModeSubgroupSize:
495496
case ExecutionModeMaxWorkDimINTEL:
496497
case ExecutionModeNumSIMDWorkitemsINTEL:

lib/SPIRV/libSPIRV/SPIRVEntry.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,8 @@ class SPIRVEntryPoint : public SPIRVAnnotation<OpEntryPoint> {
503503
SPIRVEntryPoint(SPIRVModule *TheModule, SPIRVExecutionModelKind,
504504
SPIRVId TheId, const std::string &TheName,
505505
std::vector<SPIRVId> Variables);
506-
SPIRVEntryPoint() : ExecModel(ExecutionModelKernel) {}
506+
SPIRVEntryPoint() {}
507+
507508
_SPIRV_DCL_ENCDEC
508509
protected:
509510
SPIRVExecutionModelKind ExecModel;
@@ -825,6 +826,9 @@ class SPIRVCapability : public SPIRVEntryNoId<OpCapability> {
825826
case CapabilityRoundToInfinityINTEL:
826827
case CapabilityFloatingPointModeINTEL:
827828
return getSet(ExtensionID::SPV_INTEL_float_controls2);
829+
case CapabilityVectorComputeINTEL:
830+
case CapabilityVectorAnyINTEL:
831+
return getSet(ExtensionID::SPV_INTEL_vector_compute);
828832
default:
829833
return SPIRVExtSet();
830834
}

lib/SPIRV/libSPIRV/SPIRVEnum.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ template <> inline void SPIRVMap<SPIRVExecutionModeKind, SPIRVCapVec>::init() {
252252
{CapabilityFloatingPointModeINTEL});
253253
ADD_VEC_INIT(ExecutionModeFloatingPointModeIEEEINTEL,
254254
{CapabilityFloatingPointModeINTEL});
255+
ADD_VEC_INIT(ExecutionModeSharedLocalMemorySizeINTEL,
256+
{CapabilityVectorComputeINTEL});
255257
}
256258

257259
template <> inline void SPIRVMap<SPIRVMemoryModelKind, SPIRVCapVec>::init() {
@@ -263,7 +265,8 @@ template <> inline void SPIRVMap<SPIRVMemoryModelKind, SPIRVCapVec>::init() {
263265
template <> inline void SPIRVMap<SPIRVStorageClassKind, SPIRVCapVec>::init() {
264266
ADD_VEC_INIT(StorageClassUniform, {CapabilityShader});
265267
ADD_VEC_INIT(StorageClassOutput, {CapabilityShader});
266-
ADD_VEC_INIT(StorageClassPrivate, {CapabilityShader});
268+
ADD_VEC_INIT(StorageClassPrivate,
269+
{CapabilityShader, CapabilityVectorComputeINTEL});
267270
ADD_VEC_INIT(StorageClassGeneric, {CapabilityGenericPointer});
268271
ADD_VEC_INIT(StorageClassPushConstant, {CapabilityShader});
269272
ADD_VEC_INIT(StorageClassAtomicCounter, {CapabilityAtomicStorage});
@@ -381,6 +384,14 @@ template <> inline void SPIRVMap<Decoration, SPIRVCapVec>::init() {
381384
ADD_VEC_INIT(DecorationReferencedIndirectlyINTEL,
382385
{CapabilityIndirectReferencesINTEL});
383386
ADD_VEC_INIT(DecorationSideEffectsINTEL, {CapabilityAsmINTEL});
387+
ADD_VEC_INIT(DecorationVectorComputeFunctionINTEL,
388+
{CapabilityVectorComputeINTEL});
389+
ADD_VEC_INIT(DecorationVectorComputeVariableINTEL,
390+
{CapabilityVectorComputeINTEL});
391+
ADD_VEC_INIT(DecorationGlobalVariableOffsetINTEL,
392+
{CapabilityVectorComputeINTEL});
393+
ADD_VEC_INIT(DecorationFuncParamIOKind, {CapabilityVectorComputeINTEL});
394+
ADD_VEC_INIT(DecorationStackCallINTEL, {CapabilityVectorComputeINTEL});
384395
}
385396

386397
template <> inline void SPIRVMap<BuiltIn, SPIRVCapVec>::init() {

lib/SPIRV/libSPIRV/SPIRVIsValidEnum.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ inline bool isValid(spv::ExecutionMode V) {
152152
case ExecutionModeRoundingModeRTNINTEL:
153153
case ExecutionModeFloatingPointModeALTINTEL:
154154
case ExecutionModeFloatingPointModeIEEEINTEL:
155+
case ExecutionModeSharedLocalMemorySizeINTEL:
155156
return true;
156157
default:
157158
return false;
@@ -419,6 +420,11 @@ inline bool isValid(spv::Decoration V) {
419420
case DecorationDoublepumpINTEL:
420421
case DecorationBankBitsINTEL:
421422
case DecorationReferencedIndirectlyINTEL:
423+
case DecorationVectorComputeFunctionINTEL:
424+
case DecorationStackCallINTEL:
425+
case DecorationVectorComputeVariableINTEL:
426+
case DecorationGlobalVariableOffsetINTEL:
427+
case DecorationFuncParamIOKind:
422428
return true;
423429
default:
424430
return false;
@@ -590,6 +596,8 @@ inline bool isValid(spv::Capability V) {
590596
case CapabilityRoundingModeRTZ:
591597
case CapabilityRoundToInfinityINTEL:
592598
case CapabilityFloatingPointModeINTEL:
599+
case CapabilityVectorComputeINTEL:
600+
case CapabilityVectorAnyINTEL:
593601
case CapabilityFPGAMemoryAttributesINTEL:
594602
case CapabilityFPGALoopControlsINTEL:
595603
case CapabilityBlockingPipesINTEL:

lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ template <> inline void SPIRVMap<ExecutionMode, std::string>::init() {
132132
add(ExecutionModeRoundingModeRTNINTEL, "RoundingModeRTNINTEL");
133133
add(ExecutionModeFloatingPointModeALTINTEL, "FloatingPointModeALTINTEL");
134134
add(ExecutionModeFloatingPointModeIEEEINTEL, "FloatingPointModeIEEEINTEL");
135+
add(ExecutionModeSharedLocalMemorySizeINTEL, "SharedLocalMemorySizeINTEL");
135136
}
136137
SPIRV_DEF_NAMEMAP(ExecutionMode, SPIRVExecutionModeNameMap)
137138

@@ -358,6 +359,11 @@ template <> inline void SPIRVMap<Decoration, std::string>::init() {
358359
add(DecorationMergeINTEL, "MergeINTEL");
359360
add(DecorationBankBitsINTEL, "BankBitsINTEL");
360361
add(DecorationReferencedIndirectlyINTEL, "ReferencedIndirectlyINTEL");
362+
add(DecorationVectorComputeFunctionINTEL, "VectorComputeFunctionINTEL");
363+
add(DecorationStackCallINTEL, "StackCallINTEL");
364+
add(DecorationVectorComputeVariableINTEL, "VectorComputeVariableINTEL");
365+
add(DecorationGlobalVariableOffsetINTEL, "GlobalVariableOffsetINTEL");
366+
add(DecorationFuncParamIOKind, "FuncParamIOKind");
361367
}
362368
SPIRV_DEF_NAMEMAP(Decoration, SPIRVDecorationNameMap)
363369

@@ -509,6 +515,8 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
509515
add(CapabilitySubgroupImageMediaBlockIOINTEL,
510516
"SubgroupImageMediaBlockIOINTEL");
511517
add(CapabilityAsmINTEL, "AsmINTEL");
518+
add(CapabilityVectorComputeINTEL, "VectorComputeINTEL");
519+
add(CapabilityVectorAnyINTEL, "VectorAnyINTEL");
512520
add(CapabilityRoundToInfinityINTEL, "RoundToInfinityINTEL");
513521
add(CapabilityFloatingPointModeINTEL, "FloatingPointModeINTEL");
514522
add(CapabilitySubgroupAvcMotionEstimationINTEL,

lib/SPIRV/libSPIRV/SPIRVType.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,11 @@ class SPIRVTypeVector : public SPIRVType {
292292
// usage of 8-component or 16-component vectors.
293293
if (CompCount == 8 || CompCount == 16)
294294
V.push_back(CapabilityVector16);
295+
296+
if (Module->isAllowedToUseExtension(ExtensionID::SPV_INTEL_vector_compute))
297+
if (CompCount == 1 || (CompCount > 4 && CompCount < 8) ||
298+
(CompCount > 8 && CompCount < 16) || CompCount > 16)
299+
V.push_back(CapabilityVectorAnyINTEL);
295300
return V;
296301
}
297302

@@ -304,8 +309,13 @@ class SPIRVTypeVector : public SPIRVType {
304309
void validate() const override {
305310
SPIRVEntry::validate();
306311
CompType->validate();
307-
assert(CompCount == 2 || CompCount == 3 || CompCount == 4 ||
308-
CompCount == 8 || CompCount == 16);
312+
#ifndef NDEBUG
313+
if (!(Module->isAllowedToUseExtension(
314+
ExtensionID::SPV_INTEL_vector_compute))) {
315+
assert(CompCount == 2 || CompCount == 3 || CompCount == 4 ||
316+
CompCount == 8 || CompCount == 16);
317+
}
318+
#endif // !NDEBUG
309319
}
310320

311321
private:

lib/SPIRV/libSPIRV/spirv.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ enum ExecutionMode {
162162
ExecutionModeSampleInterlockUnorderedEXT = 5369,
163163
ExecutionModeShadingRateInterlockOrderedEXT = 5370,
164164
ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
165+
ExecutionModeSharedLocalMemorySizeINTEL = 5618,
165166
ExecutionModeRoundingModeRTPINTEL = 5620,
166167
ExecutionModeRoundingModeRTNINTEL = 5621,
167168
ExecutionModeFloatingPointModeALTINTEL = 5622,
@@ -476,6 +477,11 @@ enum Decoration {
476477
DecorationAliasedPointerEXT = 5356,
477478
DecorationReferencedIndirectlyINTEL = 5602,
478479
DecorationSideEffectsINTEL = 5608,
480+
DecorationVectorComputeVariableINTEL = 5624,
481+
DecorationFuncParamIOKind = 5625,
482+
DecorationVectorComputeFunctionINTEL = 5626,
483+
DecorationStackCallINTEL = 5627,
484+
DecorationGlobalVariableOffsetINTEL = 5628,
479485
DecorationCounterBuffer = 5634,
480486
DecorationHlslCounterBufferGOOGLE = 5634,
481487
DecorationHlslSemanticGOOGLE = 5635,
@@ -927,6 +933,8 @@ enum Capability {
927933
CapabilityFunctionPointersINTEL = 5603,
928934
CapabilityIndirectReferencesINTEL = 5604,
929935
CapabilityAsmINTEL = 5606,
936+
CapabilityVectorComputeINTEL = 5617,
937+
CapabilityVectorAnyINTEL = 5619,
930938
CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
931939
CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
932940
CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,

0 commit comments

Comments
 (0)