summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp
diff options
context:
space:
mode:
authorStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2017-04-14 19:11:40 +0000
committerStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2017-04-14 19:11:40 +0000
commiteff0bc78395432f2afe470b037186bb9f4aa9940 (patch)
tree0060363ea9cd24a5cd9f4bd41dee4bd7f9721956 /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp
parentdd2d7bf1009dc568e192ecbe758042ebad357330 (diff)
downloadbcm5719-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.cpp11
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");
OpenPOWER on IntegriCloud