SWDEV-356171 - Adding support for name lowering for bitcodes (-fgpu-rdc) via
Comgr mangled name fetching APIs
Change-Id: I10ce2b1288c459e3e61218d68a270aba2148376e
[ROCm/clr commit: 7dd54c746e]
Bu işleme şunda yer alıyor:
işlemeyi yapan:
Karthik Jayaprakash
ebeveyn
5057429e7a
işleme
507c87da5f
@@ -869,40 +869,43 @@ std::string handleMangledName(std::string loweredName) {
|
||||
return loweredName;
|
||||
}
|
||||
|
||||
bool fillMangledNames(std::vector<char>& executable, std::vector<std::string>& mangledNames) {
|
||||
bool fillMangledNames(std::vector<char>& dataVec,
|
||||
std::vector<std::string>& mangledNames, bool isBitcode) {
|
||||
amd_comgr_data_t dataObject;
|
||||
if (auto res = amd::Comgr::create_data(AMD_COMGR_DATA_KIND_EXECUTABLE, &dataObject);
|
||||
if (auto res = amd::Comgr::create_data(isBitcode ? AMD_COMGR_DATA_KIND_BC :
|
||||
AMD_COMGR_DATA_KIND_EXECUTABLE, &dataObject);
|
||||
res != AMD_COMGR_STATUS_SUCCESS) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (auto res = amd::Comgr::set_data(dataObject, executable.size(), executable.data())) {
|
||||
if (auto res = amd::Comgr::set_data(dataObject, dataVec.size(), dataVec.data())) {
|
||||
amd::Comgr::release_data(dataObject);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto callback = [](amd_comgr_symbol_t symbol, void* data) {
|
||||
if (data == nullptr) return AMD_COMGR_STATUS_ERROR_INVALID_ARGUMENT;
|
||||
size_t len = 0;
|
||||
if (auto res = amd::Comgr::symbol_get_info(symbol, AMD_COMGR_SYMBOL_INFO_NAME_LENGTH, &len);
|
||||
res != AMD_COMGR_STATUS_SUCCESS)
|
||||
return res;
|
||||
std::string name(len, 0);
|
||||
if (auto res = amd::Comgr::symbol_get_info(symbol, AMD_COMGR_SYMBOL_INFO_NAME, &name[0]);
|
||||
res != AMD_COMGR_STATUS_SUCCESS)
|
||||
return res;
|
||||
auto storage = reinterpret_cast<std::vector<std::string>*>(data);
|
||||
storage->push_back(name);
|
||||
return AMD_COMGR_STATUS_SUCCESS;
|
||||
};
|
||||
|
||||
if (auto res =
|
||||
amd::Comgr::iterate_symbols(dataObject, callback, reinterpret_cast<void*>(&mangledNames));
|
||||
res != AMD_COMGR_STATUS_SUCCESS) {
|
||||
size_t Count;
|
||||
if (auto res = amd::Comgr::populate_mangled_names(dataObject, &Count)) {
|
||||
amd::Comgr::release_data(dataObject);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < Count; i++) {
|
||||
size_t Size;
|
||||
if (auto res = amd::Comgr::get_mangled_name(dataObject, i, &Size, NULL)) {
|
||||
amd::Comgr::release_data(dataObject);
|
||||
return false;
|
||||
}
|
||||
|
||||
char *mName = new char[Size]();
|
||||
if (auto res = amd::Comgr::get_mangled_name(dataObject, i, &Size, mName)) {
|
||||
amd::Comgr::release_data(dataObject);
|
||||
return false;
|
||||
}
|
||||
|
||||
mangledNames.push_back(std::string(mName));
|
||||
delete mName;
|
||||
}
|
||||
|
||||
amd::Comgr::release_data(dataObject);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,8 @@ bool dumpIsaFromBC(const amd_comgr_data_set_t isaInputs, const std::string& isa,
|
||||
std::vector<std::string>& exeOptions, std::string name, std::string& buildLog);
|
||||
bool demangleName(const std::string& mangledName, std::string& demangledName);
|
||||
std::string handleMangledName(std::string loweredName);
|
||||
bool fillMangledNames(std::vector<char>& executable, std::vector<std::string>& mangledNames);
|
||||
bool fillMangledNames(std::vector<char>& executable,
|
||||
std::vector<std::string>& mangledNames, bool isBitcode);
|
||||
bool getDemangledNames(const std::vector<std::string>& mangledNames,
|
||||
std::map<std::string, std::string>& demangledNames);
|
||||
void GenerateUniqueFileName(std::string &name);
|
||||
|
||||
@@ -254,6 +254,16 @@ bool RTCCompileProgram::compile(const std::vector<std::string>& options, bool fg
|
||||
}
|
||||
|
||||
if (fgpu_rdc_) {
|
||||
std::vector<std::string> mangledNames;
|
||||
if (!fillMangledNames(LLVMBitcode_, mangledNames, true)) {
|
||||
LogError("Error in hiprtc: unable to fill mangled names");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!getDemangledNames(mangledNames, demangled_names_)) {
|
||||
LogError("Error in hiprtc: unable to get demangled names");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -288,7 +298,7 @@ bool RTCCompileProgram::compile(const std::vector<std::string>& options, bool fg
|
||||
}
|
||||
|
||||
std::vector<std::string> mangledNames;
|
||||
if (!fillMangledNames(executable_, mangledNames)) {
|
||||
if (!fillMangledNames(executable_, mangledNames, false)) {
|
||||
LogError("Error in hiprtc: unable to fill mangled names");
|
||||
return false;
|
||||
}
|
||||
|
||||
Yeni konuda referans
Bir kullanıcı engelle