================
@@ -3127,21 +3179,45 @@ static bool generateAsyncCopy(const SPIRV::IncomingCall
*Call,
Register TypeReg = GR->getSPIRVTypeID(NewType ? NewType :
Call->ReturnType);
unsigned NumArgs = Call->Arguments.size();
Register EventReg = Call->Arguments[NumArgs - 1];
- bool Res = MIRBuilder.buildInstr(Opcode)
+ Register NumElemReg = Call->Arguments[2];
+
+ // Untyped pointers use OpUntypedGroupAsyncCopyKHR, which adds an explicit
+ // Element Num Bytes operand.
+ SPIRVTypeInst DestPtrTy = GR->getSPIRVTypeForVReg(Call->Arguments[0]);
+ bool IsUntyped =
+ DestPtrTy && DestPtrTy->getOpcode() == SPIRV::OpTypeUntypedPointerKHR;
+ SPIRVTypeInst SizeTy = GR->getSPIRVTypeForVReg(NumElemReg);
+ Register StrideReg =
+ Call->Arguments.size() > 4
+ ? Call->Arguments[3]
+ : (IsUntyped ? GR->buildConstantInt(1, MIRBuilder, SizeTy,
+ /*EmitIR=*/true)
+ : buildConstantIntReg32(1, MIRBuilder, GR));
+
+ auto MIB = MIRBuilder
+ .buildInstr(IsUntyped ? SPIRV::OpUntypedGroupAsyncCopyKHR
+ : SPIRV::OpGroupAsyncCopy)
.addDef(Call->ReturnRegister)
.addUse(TypeReg)
.addUse(Scope)
.addUse(Call->Arguments[0])
- .addUse(Call->Arguments[1])
- .addUse(Call->Arguments[2])
- .addUse(Call->Arguments.size() > 4
- ? Call->Arguments[3]
- : buildConstantIntReg32(1, MIRBuilder, GR))
- .addUse(EventReg);
+ .addUse(Call->Arguments[1]);
+ if (IsUntyped) {
+ // Element Num Bytes from the deduced element type of dest (or source).
+ unsigned ElemBytes = GR->getDeducedPointeeByteSize(CB.getArgOperand(0));
+ if (!ElemBytes)
+ ElemBytes = GR->getDeducedPointeeByteSize(CB.getArgOperand(1));
+ if (!ElemBytes)
+ report_fatal_error("Could not deduce the element type of an untyped "
+ "async copy pointer argument");
+ MIB.addUse(GR->buildConstantInt(ElemBytes, MIRBuilder, SizeTy,
+ /*EmitIR=*/true));
+ }
+ MIB.addUse(NumElemReg).addUse(StrideReg).addUse(EventReg);
----------------
MrSidims wrote:
sure, addressed
https://github.com/llvm/llvm-project/pull/201233
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits