diff options
Diffstat (limited to 'llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp')
-rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp index 0308c56..551c36d 100644 --- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp @@ -633,7 +633,8 @@ void RequirementHandler::initAvailableCapabilities(const SPIRVSubtarget &ST) { if (ST.isAtLeastSPIRVVer(VersionTuple(1, 6))) addAvailableCaps({Capability::DotProduct, Capability::DotProductInputAll, Capability::DotProductInput4x8Bit, - Capability::DotProductInput4x8BitPacked}); + Capability::DotProductInput4x8BitPacked, + Capability::DemoteToHelperInvocation}); // Add capabilities enabled by extensions. for (auto Extension : ST.getAllAvailableExtensions()) { @@ -1419,6 +1420,19 @@ void addInstrRequirements(const MachineInstr &MI, Reqs.addCapability(SPIRV::Capability::SplitBarrierINTEL); } break; + case SPIRV::OpKill: { + Reqs.addCapability(SPIRV::Capability::Shader); + } break; + case SPIRV::OpDemoteToHelperInvocation: + Reqs.addCapability(SPIRV::Capability::DemoteToHelperInvocation); + + if (ST.canUseExtension( + SPIRV::Extension::SPV_EXT_demote_to_helper_invocation)) { + if (!ST.isAtLeastSPIRVVer(llvm::VersionTuple(1, 6))) + Reqs.addExtension( + SPIRV::Extension::SPV_EXT_demote_to_helper_invocation); + } + break; case SPIRV::OpSDot: case SPIRV::OpUDot: AddDotProductRequirements(MI, Reqs, ST); |