Skip to content

Commit 63a202e

Browse files
authored
[Backport to 15] Implement SPV_INTEL_subgroup_matrix_multiply_accumulate (#3003)
Spec: https://github.khronos.org/SPIRV-Registry/extensions/INTEL/SPV_INTEL_subgroup_matrix_multiply_accumulate.html Cherry-pick of 252b6d2
1 parent 7a24842 commit 63a202e

File tree

5 files changed

+294
-0
lines changed

5 files changed

+294
-0
lines changed

include/LLVMSPIRVExtensions.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,4 @@ EXT(SPV_INTEL_cache_controls)
7070
EXT(SPV_INTEL_maximum_registers)
7171
EXT(SPV_INTEL_bindless_images)
7272
EXT(SPV_INTEL_2d_block_io)
73+
EXT(SPV_INTEL_subgroup_matrix_multiply_accumulate)

lib/SPIRV/libSPIRV/SPIRVInstruction.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4000,5 +4000,23 @@ _SPIRV_OP(Subgroup2DBlockLoadTranspose, false, 11)
40004000
_SPIRV_OP(Subgroup2DBlockLoadTransform, false, 11)
40014001
#undef _SPIRV_OP
40024002

4003+
class SPIRVSubgroupMatrixMultiplyAccumulateINTELInst
4004+
: public SPIRVInstTemplateBase {
4005+
public:
4006+
llvm::Optional<ExtensionID> getRequiredExtension() const override {
4007+
return ExtensionID::SPV_INTEL_subgroup_matrix_multiply_accumulate;
4008+
}
4009+
SPIRVCapVec getRequiredCapability() const override {
4010+
return getVec(CapabilitySubgroupMatrixMultiplyAccumulateINTEL);
4011+
}
4012+
};
4013+
4014+
#define _SPIRV_OP(x, ...) \
4015+
typedef SPIRVInstTemplate<SPIRVSubgroupMatrixMultiplyAccumulateINTELInst, \
4016+
Op##x##INTEL, __VA_ARGS__> \
4017+
SPIRV##x##INTEL;
4018+
_SPIRV_OP(SubgroupMatrixMultiplyAccumulate, true, 7, true, 4)
4019+
#undef _SPIRV_OP
4020+
40034021
} // namespace SPIRV
40044022
#endif // SPIRV_LIBSPIRV_SPIRVINSTRUCTION_H

lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,8 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
612612
add(CapabilitySubgroup2DBlockIOINTEL, "Subgroup2DBlockIOINTEL");
613613
add(CapabilitySubgroup2DBlockTransformINTEL, "Subgroup2DBlockTransformINTEL");
614614
add(CapabilitySubgroup2DBlockTransposeINTEL, "Subgroup2DBlockTransposeINTEL");
615+
add(CapabilitySubgroupMatrixMultiplyAccumulateINTEL,
616+
"SubgroupMatrixMultiplyAccumulateINTEL");
615617
// From spirv_internal.hpp
616618
add(internal::CapabilityFPGADSPControlINTEL, "FPGADSPControlINTEL");
617619
add(internal::CapabilityFastCompositeINTEL, "FastCompositeINTEL");

lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,7 @@ _SPIRV_OP(Subgroup2DBlockLoadTransformINTEL, 6232)
568568
_SPIRV_OP(Subgroup2DBlockLoadTransposeINTEL, 6233)
569569
_SPIRV_OP(Subgroup2DBlockPrefetchINTEL, 6234)
570570
_SPIRV_OP(Subgroup2DBlockStoreINTEL, 6235)
571+
_SPIRV_OP(SubgroupMatrixMultiplyAccumulateINTEL, 6237)
571572
_SPIRV_OP(GroupIMulKHR, 6401)
572573
_SPIRV_OP(GroupFMulKHR, 6402)
573574
_SPIRV_OP(GroupBitwiseAndKHR, 6403)

0 commit comments

Comments
 (0)