diff --git a/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp b/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp index 01b99ae523b..5df45e7c23a 100644 --- a/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp +++ b/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp @@ -380,27 +380,30 @@ void FrontEnd::parseLayer(const Model& model, const ie::CNNLayerPtr& layer, cons } void FrontEnd::processTrivialCases(const Model& model) { - std::unordered_map ieToVpuDataVector; + std::unordered_map> ieDataToTrivialCase; for (const auto& data : model->datas()) { const auto& origData = data->origData(); - if (origData != nullptr) { - ieToVpuDataVector[origData].push_back(data); + if (origData == nullptr) { + continue; } + + auto& trivialCase = ieDataToTrivialCase[origData]; + auto& destination = data->usage() == DataUsage::Output ? trivialCase.second : trivialCase.first; + VPU_THROW_UNLESS(ieDataToTrivialCase.count(origData) == 0 || destination == nullptr, + "Encountered IE data object {} which has two vpu data objects {} and {} of the same type {} associated with it, while only one is permitted", + origData->getName(), destination->name(), data->name(), destination->usage()); + destination = data; } - std::vector trivialCases; - for (const auto& dataObjectsWithTheSameOrigData : ieToVpuDataVector) { - if (dataObjectsWithTheSameOrigData.second.size() > 1) { - VPU_THROW_UNLESS(dataObjectsWithTheSameOrigData.second.size() == 2, - "There can't be more than two data objects associated with the same original IE data object with name {}", - dataObjectsWithTheSameOrigData.first->getName()); - trivialCases.push_back(dataObjectsWithTheSameOrigData.second); - } - } + for (const auto& trivialCase : ieDataToTrivialCase) { + const auto& trivialCasePair = trivialCase.second; - for (const auto& trivialCase : trivialCases) { - const auto& unconnectedOutput = trivialCase.front()->usage() == DataUsage::Output ? trivialCase.front() : trivialCase.back(); - const auto& unconnectedInput = unconnectedOutput == trivialCase.front() ? trivialCase.back() : trivialCase.front(); + const auto& unconnectedInput = trivialCasePair.first; + const auto& unconnectedOutput = trivialCasePair.second; + + if (!unconnectedInput || !unconnectedOutput) { + continue; + } _stageBuilder->addCopyStage( model,