From 554b50eb850f04e50eba6a3537243a2fe0a14207 Mon Sep 17 00:00:00 2001 From: Ilya Churaev Date: Thu, 3 Mar 2022 18:01:59 +0300 Subject: [PATCH] Remove redundant calls from set_argument (#10701) * Remove redundant calls from set_argument * Fixed tests --- src/core/src/node.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/core/src/node.cpp b/src/core/src/node.cpp index 349ff0cbf13..5c856729dfb 100644 --- a/src/core/src/node.cpp +++ b/src/core/src/node.cpp @@ -174,9 +174,7 @@ void ov::Node::set_arguments(const OutputVector& arguments) { // Add this node as a user of each argument. size_t i = 0; for (auto& output : arguments) { - auto output_node = output.get_node(); - auto& output_descriptor = output_node->m_outputs.at(output.get_index()); - m_inputs.emplace_back(this, i++, output_descriptor); + set_argument(i++, output); } // set_arguments doesn't use replace_output method, so we have to reset cache manually here @@ -203,8 +201,17 @@ ov::descriptor::Output& ov::Node::get_output_descriptor(size_t position) { void ov::Node::set_argument(size_t position, const Output& argument) { auto output_node = argument.get_node(); - auto& output_descriptor = output_node->get_output_descriptor(argument.get_index()); - get_input_descriptor(position).replace_output(output_descriptor); + auto& output_descriptor = output_node->m_outputs.size() > argument.get_index() + ? output_node->m_outputs.at(argument.get_index()) + : output_node->get_output_descriptor(argument.get_index()); + if (position < m_inputs.size()) { + get_input_descriptor(position).replace_output(output_descriptor); + } else { + while (m_inputs.size() < position) { + m_inputs.emplace_back(this, m_inputs.size()); + } + m_inputs.emplace_back(this, position, output_descriptor); + } } void ov::Node::constructor_validate_and_infer_types() {