aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
diff options
context:
space:
mode:
authorYury Plyakhin <yury.plyakhin@intel.com>2025-05-19 19:31:15 -0700
committerGitHub <noreply@github.com>2025-05-19 19:31:15 -0700
commit755acb174ab2a176eabd33d55ec4024e9f353e9d (patch)
treee3e722c93142d598e2f5551c902ae806093adf9b /llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
parent383e5f3e2da5c11ecbf1482eb0c39df38ac84e59 (diff)
downloadllvm-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.cpp24
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;