diff options
author | Yury Plyakhin <yury.plyakhin@intel.com> | 2025-05-19 19:31:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-19 19:31:15 -0700 |
commit | 755acb174ab2a176eabd33d55ec4024e9f353e9d (patch) | |
tree | e3e722c93142d598e2f5551c902ae806093adf9b /llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | |
parent | 383e5f3e2da5c11ecbf1482eb0c39df38ac84e59 (diff) | |
download | llvm-755acb174ab2a176eabd33d55ec4024e9f353e9d.zip llvm-755acb174ab2a176eabd33d55ec4024e9f353e9d.tar.gz llvm-755acb174ab2a176eabd33d55ec4024e9f353e9d.tar.bz2 |
[SPIR-V] Add SPV_INTEL_2d_block_io extension (#140140)
Adds additional subgroup block prefetch, load,
load transposed, load transformed and store
instructions to read two-dimensional blocks of
data from a two-dimensional region of memory, or
to write two-dimensional blocks of data to a
two-dimensional region of memory.
Spec:
https://github.com/KhronosGroup/SPIRV-Registry/blob/main/extensions/INTEL/SPV_INTEL_2d_block_io.asciidoc
---------
Co-authored-by: Dmitry Sidorov <dmitry.sidorov@intel.com>
Diffstat (limited to 'llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp')
-rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp index 6d2ecd5..a4f95ea 100644 --- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp @@ -1739,6 +1739,30 @@ void addInstrRequirements(const MachineInstr &MI, Reqs.addExtension(SPIRV::Extension::SPV_INTEL_bindless_images); Reqs.addCapability(SPIRV::Capability::BindlessImagesINTEL); break; + case SPIRV::OpSubgroup2DBlockLoadINTEL: + case SPIRV::OpSubgroup2DBlockLoadTransposeINTEL: + case SPIRV::OpSubgroup2DBlockLoadTransformINTEL: + case SPIRV::OpSubgroup2DBlockPrefetchINTEL: + case SPIRV::OpSubgroup2DBlockStoreINTEL: { + if (!ST.canUseExtension(SPIRV::Extension::SPV_INTEL_2d_block_io)) + report_fatal_error("OpSubgroup2DBlock[Load/LoadTranspose/LoadTransform/" + "Prefetch/Store]INTEL instructions require the " + "following SPIR-V extension: SPV_INTEL_2d_block_io", + false); + Reqs.addExtension(SPIRV::Extension::SPV_INTEL_2d_block_io); + Reqs.addCapability(SPIRV::Capability::Subgroup2DBlockIOINTEL); + + const auto OpCode = MI.getOpcode(); + if (OpCode == SPIRV::OpSubgroup2DBlockLoadTransposeINTEL) { + Reqs.addCapability(SPIRV::Capability::Subgroup2DBlockTransposeINTEL); + break; + } + if (OpCode == SPIRV::OpSubgroup2DBlockLoadTransformINTEL) { + Reqs.addCapability(SPIRV::Capability::Subgroup2DBlockTransformINTEL); + break; + } + break; + } case SPIRV::OpKill: { Reqs.addCapability(SPIRV::Capability::Shader); } break; |