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:
Jacob Lambert
2022-10-06 08:49:12 -07:00
işlemeyi yapan: Karthik Jayaprakash
ebeveyn 5057429e7a
işleme 507c87da5f
3 değiştirilmiş dosya ile 37 ekleme ve 23 silme
+24 -21
Dosyayı Görüntüle
@@ -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;
}
+2 -1
Dosyayı Görüntüle
@@ -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);
+11 -1
Dosyayı Görüntüle
@@ -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;
}