Files
compute-runtime/shared/offline_compiler/source/decoder/helper.cpp
Daria Hinz 31deb4fd63 Add support for new acronyms in disasm
The "disasm" option in ocloc was not validate new acronyms.
despite handling them in "compile".
This PR is fixing the issue - ocloc disasm supports new & deprecated
acronyms.

https://github.com/intel/compute-runtime/issues/582

Signed-off-by: Daria Hinz <daria.hinz@intel.com>
Related-To: NEO-7509
2022-11-23 16:53:54 +01:00

107 lines
3.3 KiB
C++

/*
* Copyright (C) 2018-2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "helper.h"
#include "shared/offline_compiler/source/decoder/iga_wrapper.h"
#include "shared/offline_compiler/source/ocloc_arg_helper.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/os_interface/os_inc_base.h"
#include "shared/source/os_interface/os_library.h"
#include "igfxfmid.h"
#include <algorithm>
#include <fstream>
void (*abortOclocExecution)(int) = abortOclocExecutionDefaultHandler;
void abortOclocExecutionDefaultHandler(int errorCode) {
exit(errorCode);
}
void addSlash(std::string &path) {
if (!path.empty()) {
auto lastChar = *path.rbegin();
if ((lastChar != '/') && (lastChar != '\\')) {
path.append("/");
}
}
}
std::vector<char> readBinaryFile(const std::string &fileName) {
std::ifstream file(fileName, std::ios_base::binary);
if (file.good()) {
size_t length;
file.seekg(0, file.end);
length = static_cast<size_t>(file.tellg());
file.seekg(0, file.beg);
std::vector<char> binary(length);
file.read(binary.data(), length);
return binary;
} else {
printf("Error! Couldn't open %s\n", fileName.c_str());
abortOclocExecution(1);
return {};
}
}
void readFileToVectorOfStrings(std::vector<std::string> &lines, const std::string &fileName, bool replaceTabs) {
std::ifstream file(fileName);
if (file.good()) {
if (replaceTabs) {
for (std::string line; std::getline(file, line);) {
std::replace_if(
line.begin(), line.end(), [](auto c) { return c == '\t'; }, ' ');
lines.push_back(std::move(line));
}
} else {
for (std::string line; std::getline(file, line);) {
lines.push_back(std::move(line));
}
}
}
}
size_t findPos(const std::vector<std::string> &lines, const std::string &whatToFind) {
for (size_t i = 0; i < lines.size(); ++i) {
auto it = lines[i].find(whatToFind);
if (it != std::string::npos) {
if (it + whatToFind.size() == lines[i].size()) {
return i;
}
char delimiter = lines[i][it + whatToFind.size()];
if ((' ' == delimiter) || ('\t' == delimiter) || ('\n' == delimiter) || ('\r' == delimiter)) {
return i;
}
}
}
return lines.size();
}
PRODUCT_FAMILY getProductFamilyFromDeviceName(const std::string &deviceName) {
for (unsigned int productId = 0; productId < IGFX_MAX_PRODUCT; ++productId) {
if (NEO::hardwarePrefix[productId] != nullptr &&
deviceName == NEO::hardwarePrefix[productId]) {
return static_cast<PRODUCT_FAMILY>(productId);
}
}
return IGFX_UNKNOWN;
}
void setProductFamilyForIga(const std::string &device, IgaWrapper *iga, OclocArgHelper *argHelper) {
auto productFamily = argHelper->productConfigHelper->getProductFamilyForAcronym(device);
if (productFamily == IGFX_UNKNOWN) {
productFamily = getProductFamilyFromDeviceName(device);
if (productFamily != IGFX_UNKNOWN) {
argHelper->printf("Warning : Deprecated device name is being used.\n");
}
}
iga->setProductFamily(productFamily);
}