diff options
author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2017-04-14 19:11:40 +0000 |
---|---|---|
committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2017-04-14 19:11:40 +0000 |
commit | eff0bc78395432f2afe470b037186bb9f4aa9940 (patch) | |
tree | 0060363ea9cd24a5cd9f4bd41dee4bd7f9721956 /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp | |
parent | dd2d7bf1009dc568e192ecbe758042ebad357330 (diff) | |
download | bcm5719-llvm-eff0bc78395432f2afe470b037186bb9f4aa9940.tar.gz bcm5719-llvm-eff0bc78395432f2afe470b037186bb9f4aa9940.zip |
[AMDGPU] set read_only access qualifier for pointers
If a kernel's pointer argument is known to be readonly
set access qualifier accordingly. This allows RT not to
flush caches before dispatches.
Differential Revision: https://reviews.llvm.org/D32091
llvm-svn: 300362
Diffstat (limited to 'llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp index 59571a48a96..29a6ab9fbe9 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp @@ -478,9 +478,14 @@ void MetadataStreamer::emitKernelArg(const Argument &Arg) { BaseTypeName = cast<MDString>(Node->getOperand(ArgNo))->getString(); StringRef AccQual; - Node = Func->getMetadata("kernel_arg_access_qual"); - if (Node && ArgNo < Node->getNumOperands()) - AccQual = cast<MDString>(Node->getOperand(ArgNo))->getString(); + if (Arg.getType()->isPointerTy() && Arg.onlyReadsMemory() && + Arg.hasNoAliasAttr()) { + AccQual = "read_only"; + } else { + Node = Func->getMetadata("kernel_arg_access_qual"); + if (Node && ArgNo < Node->getNumOperands()) + AccQual = cast<MDString>(Node->getOperand(ArgNo))->getString(); + } StringRef Name; Node = Func->getMetadata("kernel_arg_name"); |