diff options
Diffstat (limited to 'llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp')
-rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp index 1674cef7cb82..9e4ba2191366 100644 --- a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp @@ -243,8 +243,12 @@ static SPIRVType *getArgSPIRVType(const Function &F, unsigned ArgIdx, continue; MetadataAsValue *VMD = cast<MetadataAsValue>(II->getOperand(1)); - SPIRVType *ElementType = GR->getOrCreateSPIRVType( - cast<ConstantAsMetadata>(VMD->getMetadata())->getType(), MIRBuilder); + Type *ElementTy = cast<ConstantAsMetadata>(VMD->getMetadata())->getType(); + if (isUntypedPointerTy(ElementTy)) + ElementTy = + TypedPointerType::get(IntegerType::getInt8Ty(II->getContext()), + getPointerAddressSpace(ElementTy)); + SPIRVType *ElementType = GR->getOrCreateSPIRVType(ElementTy, MIRBuilder); return GR->getOrCreateSPIRVPointerType( ElementType, MIRBuilder, addressSpaceToStorageClass( |