From 4ac2ba9c81a6afb1cddaa83fdee51440c39124a5 Mon Sep 17 00:00:00 2001 From: Artur Kulikowski Date: Thu, 1 Sep 2022 09:14:07 +0200 Subject: [PATCH] Tile reference implementation short circuit (#12805) * Tile reference impl short circuit * Add test for Constant folding 2D shape and 0 repeats --- .../reference/src/runtime/reference/tile.cpp | 6 ++++ src/core/tests/constant_folding.cpp | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/core/reference/src/runtime/reference/tile.cpp b/src/core/reference/src/runtime/reference/tile.cpp index 7707da7a549..93a2c3e0365 100644 --- a/src/core/reference/src/runtime/reference/tile.cpp +++ b/src/core/reference/src/runtime/reference/tile.cpp @@ -49,6 +49,12 @@ void runtime::reference::tile(const char* arg, std::vector indices(in_shape_expanded.size() - 1, 0); size_t axis = indices.size(); + if (std::all_of(repeats.begin(), repeats.end(), [](int64_t repeat) { + return repeat == 0; + })) { + return; + } + // Copy and repeat data for innermost axis as many times as described in the repeats parameter while (axis <= indices.size()) { block_size = last_dim * elem_size; diff --git a/src/core/tests/constant_folding.cpp b/src/core/tests/constant_folding.cpp index 4ab5a50d49c..b583533449f 100644 --- a/src/core/tests/constant_folding.cpp +++ b/src/core/tests/constant_folding.cpp @@ -2798,6 +2798,35 @@ TEST(constant_folding, constant_tile_1d_0_repeats) { ASSERT_EQ(values_expected, values_out); } +TEST(constant_folding, constant_tile_2d_0_repeats) { + Shape shape_in{2, 2}; + Shape shape_repeats{2}; + Shape shape_out{}; + + vector values_in{0, 1, 2, 3}; + auto data = make_shared(element::i32, shape_in, values_in); + vector values_repeats{0, 0}; + auto repeats = make_shared(element::i64, shape_repeats, values_repeats); + auto tile = make_shared(data, repeats); + tile->set_friendly_name("test"); + auto f = make_shared(tile, ParameterVector{}); + + pass::Manager pass_manager; + pass_manager.register_pass(); + pass_manager.run_passes(f); + + ASSERT_EQ(count_ops_of_type(f), 0); + ASSERT_EQ(count_ops_of_type(f), 1); + + auto new_const = ov::as_type_ptr(f->get_results().at(0)->input_value(0).get_node_shared_ptr()); + ASSERT_TRUE(new_const); + ASSERT_EQ(new_const->get_friendly_name(), "test"); + auto values_out = new_const->get_vector(); + + vector values_expected{}; + ASSERT_EQ(values_expected, values_out); +} + TEST(constant_folding, constant_tile_0_rank_data) { Shape shape_in{}; Shape shape_repeats{1};