From 0b63f2d19ffc1d340f4deb5613587af4ac599dcf Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 31 Aug 2016 19:36:48 -0400
Subject: [PATCH] P4 to Git Change 1309472 by lmoriche@lmoriche_opencl_dev on
2016/08/31 19:27:07
SWDEV-94610 - Fix the API::get_kernel_arg_info conformance test failure. The runtime metadata needs to return references from Name() and TypeName() instead of temporary strings. Name().c_str() should be valid until the program is destroyed.
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmetadata.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmetadata.hpp#3 edit
[ROCm/clr commit: 29a3f5d56a3b80a513104b6337bd7857a2cd4f36]
---
.../rocclr/runtime/device/rocm/rockernel.cpp | 10 +++---
.../runtime/device/rocm/rocmetadata.cpp | 36 +++++--------------
.../runtime/device/rocm/rocmetadata.hpp | 11 +++---
3 files changed, 18 insertions(+), 39 deletions(-)
diff --git a/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp b/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp
index 2752b46d9a..f15f68a445 100644
--- a/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp
+++ b/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp
@@ -820,16 +820,16 @@ bool Kernel::init_LC(){
}
size_t idx = runtimeMD->KernelIndexByName(name());
- const RuntimeMD::Kernel::Metadata* kernelMD = runtimeMD->GetKernelMetadata(idx);
+ const RuntimeMD::Kernel::Metadata& kernelMD = runtimeMD->GetKernelMetadata(idx);
- size_t sizeOfArgList = kernelMD->KernelArgCount();
+ size_t sizeOfArgList = kernelMD.KernelArgCount();
size_t kOffset = 0;
size_t pOffset = 0;
device::Kernel::parameters_t params;
for (uint32_t i=0; i < sizeOfArgList; i++) {
- const RuntimeMD::KernelArg::Metadata* kernelArg = kernelMD->GetKernelArgMetadata(i);
- initArgsParams(kernelArg, &kOffset, params, &pOffset);
+ const RuntimeMD::KernelArg::Metadata& kernelArg = kernelMD.GetKernelArgMetadata(i);
+ initArgsParams(&kernelArg, &kOffset, params, &pOffset);
}
createSignature(params);
@@ -840,7 +840,7 @@ bool Kernel::init_LC(){
workGroupInfo_.availableSGPRs_ = 0;
workGroupInfo_.availableVGPRs_ = 0;
- const uint32_t* workGroupSizeHint = kernelMD->WorkgroupSizeHint();
+ const uint32_t* workGroupSizeHint = kernelMD.WorkgroupSizeHint();
size_t sizeOfWorkGroupSize = (workGroupSizeHint) ? *workGroupSizeHint : 0;
uint32_t wavefront_size = 0;
diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp
index 34a0c48687..576ed4a780 100644
--- a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp
+++ b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp
@@ -42,6 +42,7 @@
#include
#include
+#include
#include "rocmetadata.hpp"
@@ -199,7 +200,7 @@ namespace RuntimeMD {
out
<< " Access: " << AccessQualToString(accQual)
- << " Address: " << addrQual
+ << " Address: " << (uint) addrQual
<< " Size: " << size
<< " Align: " << align
<< " Type Name: " << typeName;
@@ -208,28 +209,6 @@ namespace RuntimeMD {
}
}
- void Metadata::PrintOut() const {
- std::cout
- << "Type: " << TypeKindToString(typeKind) << std::endl;
- if (typeKind == Value) {
- std::cout << " ValueType:" << ValueTypeToString(valueType) << std::endl;
- }
- if (isConst) { std::cout << " Const" << std::endl; }
- if (isRestrict) { std::cout << " Restrict" << std::endl; }
- if (isVolatile) { std::cout << " Volatile" << std::endl; }
- if (isPipe) { std::cout << " Pipe" << std::endl; }
-
- std::cout
- << " Access: " << AccessQualToString(accQual)
- << " Address: " << addrQual
- << " Size: " << size
- << " Align: " << align
- << " Type Name: " << typeName << std::endl;
- if (!name.empty()) {
- std::cout << " Name: " << name << std::endl;
- }
- }
-
}
namespace Kernel {
@@ -255,9 +234,9 @@ namespace RuntimeMD {
this->languageVersion = languageVersion;
}
- const KernelArg::Metadata* Metadata::GetKernelArgMetadata(size_t index) const {
+ const KernelArg::Metadata& Metadata::GetKernelArgMetadata(size_t index) const {
assert((index < args.size()) && "kernel argument index too big");
- return &(args[index]);
+ return args[index];
}
bool Metadata::ReadValue(std::istream& in, AMDGPU::RuntimeMD::Key key) {
@@ -267,6 +246,7 @@ namespace RuntimeMD {
switch (key) {
case KeyKernelName:
+ hasName = true;
return Read(in, name);
case KeyArgBegin:
args.resize(args.size() + 1);
@@ -471,11 +451,11 @@ namespace RuntimeMD {
return true;
}
- const Kernel::Metadata* Metadata::GetKernelMetadata(size_t index) const {
+ const Kernel::Metadata& Metadata::GetKernelMetadata(size_t index) const {
assert(kernels.size() && "kernel metadata not found");
assert((index < kernels.size()) && "kernel index too big");
- return &(kernels[index]);
+ return kernels[index];
}
size_t Metadata::KernelIndexByName(const std::string& name) const {
@@ -496,7 +476,7 @@ namespace RuntimeMD {
}
void Metadata::Print(std::ostream& out) {
- out << "roc runtime metadata (" << kernels.size() << " kernels):" << std::endl;
+ out << "AMDGPU runtime metadata (" << kernels.size() << " kernels):" << std::endl;
for (Kernel::Metadata& kernel : kernels) {
kernel.Print(out);
}
diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp
index ee83b95886..53c0593301 100644
--- a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp
+++ b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp
@@ -72,8 +72,8 @@ namespace RuntimeMD {
Metadata();
uint32_t Size() const { return size; }
uint32_t Align() const { return align; }
- std::string TypeName() const { return typeName; }
- std::string Name() const { return name; }
+ const std::string& TypeName() const { return typeName; }
+ const std::string& Name() const { return name; }
AMDGPU::RuntimeMD::KernelArg::TypeKind TypeKind() const { return typeKind; }
AMDGPU::RuntimeMD::KernelArg::ValueType ValueType() const { return valueType; }
uint8_t AddrQual() const { return addrQual; }
@@ -85,7 +85,6 @@ namespace RuntimeMD {
bool ReadValue(std::istream& in, AMDGPU::RuntimeMD::Key key);
void Print(std::ostream& out);
- void PrintOut() const;
};
}
@@ -135,12 +134,12 @@ namespace RuntimeMD {
bool HasMaxWorkgroupSize() const { return hasMaxWorkgroupSize; }
size_t KernelArgCount() const { return args.size(); }
- const KernelArg::Metadata* GetKernelArgMetadata(size_t index) const;
+ const KernelArg::Metadata& GetKernelArgMetadata(size_t index) const;
const std::string& Name() const { return name; }
const uint32_t* RequiredWorkgroupSize() const { return hasRequiredWorkgroupSize ? requiredWorkgroupSize : nullptr; }
const uint32_t* WorkgroupSizeHint() const { return hasWorkgroupSizeHint ? workgroupSizeHint : nullptr; }
- std::string VecTypeHint() const { return vectorTypeHint; }
+ const std::string& VecTypeHint() const { return vectorTypeHint; }
uint32_t KernelIndex() const { return hasKernelIndex ? kernelIndex : UINT32_MAX; }
uint32_t SGPRS() const { return hasSGPRs ? numSgprs : UINT32_MAX; }
uint32_t VGPRS() const { return hasVGPRs ? numVgprs : UINT32_MAX; }
@@ -165,7 +164,7 @@ namespace RuntimeMD {
public:
size_t KernelCount() const { return kernels.size(); }
- const Kernel::Metadata* GetKernelMetadata(size_t index) const;
+ const Kernel::Metadata& GetKernelMetadata(size_t index) const;
size_t KernelIndexByName(const std::string& name) const;
bool ReadFrom(std::istream& in);