From 7d26bd30970d9ba004fda033e889cd7f7f20c7da Mon Sep 17 00:00:00 2001 From: Konstantin S Bobrovsky Date: Tue, 3 Nov 2020 09:10:59 -0800 Subject: [PATCH 1/2] [SYCL][ESIMD] LowerESIMD: add 'buffer_t' MD for accessor kernel arguments. Signed-off-by: Konstantin S Bobrovsky --- llvm/lib/SYCLLowerIR/LowerESIMD.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/llvm/lib/SYCLLowerIR/LowerESIMD.cpp b/llvm/lib/SYCLLowerIR/LowerESIMD.cpp index 84480484abfc0..2aca239c73a0a 100644 --- a/llvm/lib/SYCLLowerIR/LowerESIMD.cpp +++ b/llvm/lib/SYCLLowerIR/LowerESIMD.cpp @@ -1127,6 +1127,7 @@ void SYCLLowerESIMDLegacyPass::generateKernelMetadata(Module &M) { SmallVector ArgTypeDescs; auto *KernelArgTypes = F.getMetadata("kernel_arg_type"); + auto *KernelArgAccPtrs = F.getMetadata("kernel_arg_accessor_ptr"); unsigned Idx = 0; // Iterate argument list to gather argument kinds and generate argument @@ -1139,14 +1140,25 @@ void SYCLLowerESIMDLegacyPass::generateKernelMetadata(Module &M) { if (ArgType.find("image1d_t") != std::string::npos || ArgType.find("image2d_t") != std::string::npos || - ArgType.find("image3d_t") != std::string::npos || - ArgType.find("image1d_buffer_t") != std::string::npos) { + ArgType.find("image3d_t") != std::string::npos) { Kind = AK_SURFACE; ArgTypeDescs.push_back(MDString::get(Ctx, ArgType)); } else { StringRef ArgDesc = ""; - if (Arg.getType()->isPointerTy()) - ArgDesc = "svmptr_t"; + + if (Arg.getType()->isPointerTy()) { + const auto *IsAccMD = + cast(KernelArgAccPtrs->getOperand(Idx)); + unsigned IsAcc = + static_cast(cast(IsAccMD->getValue()) + ->getValue() + .getZExtValue()); + if (IsAcc) { + ArgDesc = "buffer_t"; + Kind = AK_SURFACE; + } else + ArgDesc = "svmptr_t"; + } ArgTypeDescs.push_back(MDString::get(Ctx, ArgDesc)); } From ce41254bc24acdcedfa91cf8a51f534ece77f103 Mon Sep 17 00:00:00 2001 From: Konstantin S Bobrovsky Date: Tue, 10 Nov 2020 07:05:00 -0800 Subject: [PATCH 2/2] [SYCL][ESIMD] Handle absense of kernel_arg_accessor_ptr MD in LowerESIMD. Signed-off-by: Konstantin S Bobrovsky --- llvm/lib/SYCLLowerIR/LowerESIMD.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/llvm/lib/SYCLLowerIR/LowerESIMD.cpp b/llvm/lib/SYCLLowerIR/LowerESIMD.cpp index 2aca239c73a0a..a95e75eb9b39a 100644 --- a/llvm/lib/SYCLLowerIR/LowerESIMD.cpp +++ b/llvm/lib/SYCLLowerIR/LowerESIMD.cpp @@ -1148,11 +1148,15 @@ void SYCLLowerESIMDLegacyPass::generateKernelMetadata(Module &M) { if (Arg.getType()->isPointerTy()) { const auto *IsAccMD = - cast(KernelArgAccPtrs->getOperand(Idx)); + KernelArgAccPtrs + ? cast(KernelArgAccPtrs->getOperand(Idx)) + : nullptr; unsigned IsAcc = - static_cast(cast(IsAccMD->getValue()) - ->getValue() - .getZExtValue()); + IsAccMD + ? static_cast(cast(IsAccMD->getValue()) + ->getValue() + .getZExtValue()) + : 0; if (IsAcc) { ArgDesc = "buffer_t"; Kind = AK_SURFACE;