================
@@ -721,16 +733,26 @@ generateAssignInstrs(MachineFunction &MF,
SPIRVGlobalRegistry *GR,
Register Reg = MI.getOperand(1).getReg();
MIB.setInsertPt(*MI.getParent(), MI.getIterator());
Type *ElementTy = getMDOperandAsType(MI.getOperand(2).getMetadata(),
0);
- SPIRVTypeInst AssignedPtrType = GR->getOrCreateSPIRVPointerType(
- ElementTy, MI,
- addressSpaceToStorageClass(MI.getOperand(3).getImm(), *ST));
+ auto SC = addressSpaceToStorageClass(MI.getOperand(3).getImm(), *ST);
+ SPIRVTypeInst AssignedPtrType =
+ GR->getOrCreateSPIRVPointerType(ElementTy, MI, SC);
+
+ // For untyped pointers, store the element type for later use.
+ if (ST->canUseExtension(SPIRV::Extension::SPV_KHR_untyped_pointers) &&
+ !ST->isShader()) {
+ SPIRVTypeInst ElemSpvType = GR->getOrCreateSPIRVType(
+ ElementTy, MIB, SPIRV::AccessQualifier::ReadWrite, true);
+ GR->setUntypedPtrElementType(Reg, ElemSpvType);
+ }
+
// The intrinsic also carries vector-of-pointer values produced by
// scalarized vector GEPs; wrap the pointer in OpTypeVector to match
// the vreg's LLT.
LLT RegTy = MRI.getType(Reg);
if (RegTy.isValid() && RegTy.isVector())
AssignedPtrType = GR->getOrCreateSPIRVVectorType(
AssignedPtrType, RegTy.getNumElements(), MIB, true);
+
----------------
MrSidims wrote:
fixed
https://github.com/llvm/llvm-project/pull/201233
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits