From a231bf781cad551d515ac26de1b439194e80140e Mon Sep 17 00:00:00 2001 From: Artur Wojcik Date: Sun, 18 May 2025 11:03:24 +0200 Subject: [PATCH 1/2] trim the output name of non-digits --- .../migraphx/migraphx_execution_provider.cc | 12 +++++----- .../migraphx_execution_provider_utils.h | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/onnxruntime/core/providers/migraphx/migraphx_execution_provider.cc b/onnxruntime/core/providers/migraphx/migraphx_execution_provider.cc index b892bead62d1f..2603e81f14297 100644 --- a/onnxruntime/core/providers/migraphx/migraphx_execution_provider.cc +++ b/onnxruntime/core/providers/migraphx/migraphx_execution_provider.cc @@ -1611,15 +1611,15 @@ Status MIGraphXExecutionProvider::Compile(const std::vector& } // It is an output argument else { - auto compute_output_index = [](const std::string& name) -> int { - const std::string out_name_prefix = "#output_"; - const auto pos = name.find(out_name_prefix); - if (pos == std::string::npos) { + auto compute_output_index = [](const std::string_view sv) -> int { + constexpr std::string_view out_name_prefix = "#output_"; + const auto pos = sv.find(out_name_prefix); + if (pos == std::string_view::npos) { return -1; } - const std::string index_str = name.substr(pos + out_name_prefix.length()); - return std::stoi(index_str); + const auto index_str = sv.substr(pos + out_name_prefix.length()); + return ToInteger(Trim(index_str, std::isdigit)); }; int output_index = compute_output_index(name); diff --git a/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h b/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h index 1afb494350881..4c597d20c461f 100644 --- a/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h +++ b/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h @@ -333,4 +333,28 @@ inline std::string GenerateGraphId(const GraphViewer& graph_viewer) { return std::string{s.data(), ptr}; } +inline std::string_view TrimLeft(std::string_view sv, int (*fn)(int) = std::isspace) { + return sv.substr(0, sv.end() - std::find_if(sv.begin(), sv.end(), [fn](int ch) { + return fn(ch); + })); +} + +inline std::string_view TrimRight(std::string_view sv, int (*fn)(int) = std::isspace) { + return sv.substr(sv.end() - std::find_if(sv.rbegin(), sv.rend(), [fn](int ch) { + return fn(ch); + }).base()); +} + +inline std::string_view Trim(std::string_view sv, int (*fn)(int) = std::isspace) { + return TrimRight(TrimLeft(sv, fn), fn); +} + +inline int ToInteger(const std::string_view sv) { + int result = 0; + if (auto [_, ec] = std::from_chars(sv.data(), sv.data() + sv.length(), result); ec == std::errc()) { + return result; + } + ORT_THROW("invalid input for conversion to integer"); +} + } // namespace onnxruntime From e02799ba2d35a52dc2348e0102530299cc5c206a Mon Sep 17 00:00:00 2001 From: Artur Wojcik Date: Sun, 13 Jul 2025 12:22:51 +0200 Subject: [PATCH 2/2] lintrunner --- .../migraphx/migraphx_execution_provider_utils.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h b/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h index 4c597d20c461f..69e9704f45c3e 100644 --- a/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h +++ b/onnxruntime/core/providers/migraphx/migraphx_execution_provider_utils.h @@ -335,14 +335,14 @@ inline std::string GenerateGraphId(const GraphViewer& graph_viewer) { inline std::string_view TrimLeft(std::string_view sv, int (*fn)(int) = std::isspace) { return sv.substr(0, sv.end() - std::find_if(sv.begin(), sv.end(), [fn](int ch) { - return fn(ch); - })); + return fn(ch); + })); } inline std::string_view TrimRight(std::string_view sv, int (*fn)(int) = std::isspace) { return sv.substr(sv.end() - std::find_if(sv.rbegin(), sv.rend(), [fn](int ch) { - return fn(ch); - }).base()); + return fn(ch); + }).base()); } inline std::string_view Trim(std::string_view sv, int (*fn)(int) = std::isspace) {