[llvm] [SPIRV] Added constraint for SPV_INTEL_bindless_image extension (PR #160089)
Dmitry Sidorov via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 22 09:01:38 PDT 2025
================
@@ -1738,15 +1738,42 @@ void addInstrRequirements(const MachineInstr &MI,
break;
case SPIRV::OpConvertHandleToImageINTEL:
case SPIRV::OpConvertHandleToSamplerINTEL:
- case SPIRV::OpConvertHandleToSampledImageINTEL:
+ case SPIRV::OpConvertHandleToSampledImageINTEL: {
if (!ST.canUseExtension(SPIRV::Extension::SPV_INTEL_bindless_images))
report_fatal_error("OpConvertHandleTo[Image/Sampler/SampledImage]INTEL "
"instructions require the following SPIR-V extension: "
"SPV_INTEL_bindless_images",
false);
+ SPIRVGlobalRegistry *GR = ST.getSPIRVGlobalRegistry();
+ SPIRV::AddressingModel::AddressingModel AddrModel;
+ unsigned PointerSize = ST.getPointerSize();
+ AddrModel = PointerSize == 32 ? SPIRV::AddressingModel::Physical32
+ : SPIRV::AddressingModel::Physical64;
+ SPIRVType *TyDef = GR->getSPIRVTypeForVReg(MI.getOperand(1).getReg());
+ if (!(TyDef->getOpcode() == SPIRV::OpTypeImage &&
+ MI.getOpcode() == SPIRV::OpConvertHandleToImageINTEL) &&
+ !(TyDef->getOpcode() == SPIRV::OpTypeSampler &&
+ MI.getOpcode() == SPIRV::OpConvertHandleToSamplerINTEL) &&
+ !(TyDef->getOpcode() == SPIRV::OpTypeSampledImage &&
+ MI.getOpcode() == SPIRV::OpConvertHandleToSampledImageINTEL))
+ report_fatal_error("Incorrect return type of the instruction", false);
+ SPIRVType *SpvTy = GR->getSPIRVTypeForVReg(MI.getOperand(2).getReg());
+ if (SpvTy->getOpcode() != SPIRV::OpTypeInt) {
+ SpvTy = GR->getSPIRVTypeForVReg(SpvTy->getOperand(1).getReg());
+ }
----------------
MrSidims wrote:
I don't understand these lines, could you please elaborate what other type it could be?
https://github.com/llvm/llvm-project/pull/160089
More information about the llvm-commits
mailing list