diff --git a/src/plugins/intel_cpu/src/graph_optimizer.cpp b/src/plugins/intel_cpu/src/graph_optimizer.cpp index 85f5c41ebf5701..afff541e69959d 100644 --- a/src/plugins/intel_cpu/src/graph_optimizer.cpp +++ b/src/plugins/intel_cpu/src/graph_optimizer.cpp @@ -112,7 +112,7 @@ void GraphOptimizer::ApplyCommonGraphOptimizations(Graph& graph) { graph.RemoveDroppedNodes(); OV_ITT_SCOPE_NEXT(FIRST_INFERENCE, taskChain, "FuseFCAndConvertOnWeights"); - FuseFCAndConvertOnWeights(graph); + FuseConvDeconvFCAndConvertOnWeights(graph); graph.RemoveDroppedNodes(); OV_ITT_SCOPE_NEXT(FIRST_INFERENCE, taskChain, "FuseFCAndTransposeOnWeights"); @@ -832,7 +832,7 @@ void GraphOptimizer::MergeConvertAndEltwise(Graph& graph) { } } -void GraphOptimizer::FuseFCAndConvertOnWeights(Graph& graph) { +void GraphOptimizer::FuseConvDeconvFCAndConvertOnWeights(Graph& graph) { #if defined(OV_CPU_WITH_SHL) return; #endif @@ -851,7 +851,7 @@ void GraphOptimizer::FuseFCAndConvertOnWeights(Graph& graph) { const auto& graphNodes = graph.GetNodes(); for (const auto& fullyConnected : graphNodes) { - if (fullyConnected->getType() != Type::FullyConnected) { + if (none_of(fullyConnected->getType(), Type::FullyConnected, Type::Convolution, Type::Deconvolution)) { continue; } diff --git a/src/plugins/intel_cpu/src/graph_optimizer.h b/src/plugins/intel_cpu/src/graph_optimizer.h index 07aa76b2b9448e..7184c86d190d05 100644 --- a/src/plugins/intel_cpu/src/graph_optimizer.h +++ b/src/plugins/intel_cpu/src/graph_optimizer.h @@ -26,7 +26,7 @@ class GraphOptimizer { static void FuseMultiplyAndAdd(Graph& graph); static void MergeEltwiseAndConvert(Graph& graph); static void MergeConvertAndEltwise(Graph& graph); - static void FuseFCAndConvertOnWeights(Graph& graph); + static void FuseConvDeconvFCAndConvertOnWeights(Graph& graph); static void FuseFCAndTransposeOnWeights(Graph& graph); static void FuseFullyConnectedAndSimpleOperation(Graph& graph); static void FuseMatMulAndSimpleOperation(Graph& graph); diff --git a/src/plugins/intel_cpu/src/transformations/transformation_pipeline.cpp b/src/plugins/intel_cpu/src/transformations/transformation_pipeline.cpp index 5b5863b357709f..d2de634a083b8d 100644 --- a/src/plugins/intel_cpu/src/transformations/transformation_pipeline.cpp +++ b/src/plugins/intel_cpu/src/transformations/transformation_pipeline.cpp @@ -555,7 +555,10 @@ void Transformations::PreLpt(const std::vector& defaultPrecis [](const_node_ptr& node) -> bool { const auto consumers = node->get_output_target_inputs(0); return std::all_of(consumers.begin(), consumers.end(), [](const ov::Input& consumer) { - return !ov::is_type(consumer.get_node()); + // @todo cover RNN type of ops as well + return !is_type_any_of(consumer.get_node()); }); }, ov::pass::KeepConstAndDecompression);