Fix new gfx target naming convention (#397)

This was introduced in recent xnack changes naming changes which affected our offload bundler. This patch will fix issues in HIP samples, ROCR tests, and others.
This commit is contained in:
Aaron Enye Shi
2018-04-13 06:54:39 -04:00
committed by Maneesh Gupta
parent bda18af06d
commit ab7e727fa2
+19 -17
View File
@@ -11,25 +11,27 @@
using namespace std;
hsa_isa_t hip_impl::triple_to_hsa_isa(const std::string& triple) {
static constexpr const char prefix[] = "hcc-amdgcn--amdhsa-gfx";
static constexpr size_t prefix_sz = sizeof(prefix) - 1;
static constexpr const char OffloadKind[] = "hcc-";
hsa_isa_t Isa = {0};
hsa_isa_t r = {};
auto idx = triple.find(prefix);
if (idx != string::npos) {
idx += prefix_sz;
string tmp = "AMD:AMDGPU";
while (idx != triple.size()) {
tmp.push_back(':');
tmp.push_back(triple[idx++]);
}
hsa_isa_from_name(tmp.c_str(), &r);
if ((triple.size() < sizeof(OffloadKind) - 1) || !std::equal(triple.c_str(), triple.c_str() + sizeof(OffloadKind) - 1, triple.c_str())) {
return Isa;
}
return r;
std::string validatedTriple = triple.substr(sizeof(OffloadKind) - 1);
static constexpr const char oldPrefix[] = "amdgcn--amdhsa-gfx";
static constexpr const char newPrefix[] = "amdgcn-amd-amdhsa--gfx";
if ((triple.size() >= sizeof(oldPrefix) - 1) && std::equal(oldPrefix, oldPrefix + sizeof(oldPrefix) - 1, triple.c_str())) {
// Support backwards compatibility with old naming.
validatedTriple = newPrefix + triple.substr(sizeof(oldPrefix) - 1);
}
if (HSA_STATUS_SUCCESS != hsa_isa_from_name(validatedTriple.c_str(), &Isa)) {
Isa.handle = 0;
}
return Isa;
}
// DATA - STATICS
@@ -59,4 +61,4 @@ hip_impl::Bundled_code_header::Bundled_code_header(
}
read(static_cast<const char*>(p), static_cast<const char*>(p) + sz, *this);
}
}