From 3f3e7d05fdce524c91ddac11865cc080685dbef0 Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Mon, 16 Dec 2024 12:41:45 +0000 Subject: [PATCH 1/3] Fix a problem with gather index type --- src/cmake/123 | 0 .../transformations/src/transformations/mlir/op/gather.cpp | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 src/cmake/123 diff --git a/src/cmake/123 b/src/cmake/123 new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/src/common/transformations/src/transformations/mlir/op/gather.cpp b/src/common/transformations/src/transformations/mlir/op/gather.cpp index 229f24380e5ef2..c4e93044928cde 100644 --- a/src/common/transformations/src/transformations/mlir/op/gather.cpp +++ b/src/common/transformations/src/transformations/mlir/op/gather.cpp @@ -61,13 +61,15 @@ struct ConvertGather { auto empty_add = builder.create(loc, indices_expanded.getType(), dynamic_index_dims); auto add = builder.create(loc, mlir::ValueRange{cast.getResult(), indices_expanded}, mlir::ValueRange{empty_add}); auto select = builder.create(loc, mlir::ValueRange{cmpi.getResult(), add.getResult(0), indices_expanded}, mlir::ValueRange{empty_add}); + auto index_type = RankedTensorType::get(ArrayRef(importShape(ov_output_shape)), builder.getIndexType()); + auto cast2 = builder.create(loc, index_type, mlir::ValueRange{select.getResult(0)}); auto gather_node = std::dynamic_pointer_cast(node); assert(gather_node && "Expected a gather node"); int64_t axis = gather_node->get_axis(); llvm::SmallVector gather_dims{axis}; - auto gather = builder.create(loc, out_type, input, select.getResult(0), gather_dims, false); + auto gather = builder.create(loc, out_type, input, cast2, gather_dims, false); context.addOutputs(node, gather); } }; From b0fe372713d2769e56096f52604b69ccafabcd74 Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Mon, 9 Dec 2024 17:01:40 +0000 Subject: [PATCH 2/3] Allow both i32 and i64 input types for transpose --- .../src/transformations/mlir/op/transpose.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/common/transformations/src/transformations/mlir/op/transpose.cpp b/src/common/transformations/src/transformations/mlir/op/transpose.cpp index aa08258e131b4b..8d2ebcac1dc853 100644 --- a/src/common/transformations/src/transformations/mlir/op/transpose.cpp +++ b/src/common/transformations/src/transformations/mlir/op/transpose.cpp @@ -27,11 +27,19 @@ struct ConvertTranspose { const auto ov_output_shape = node->get_output_partial_shape(0); auto out_type = importTensor(context.context, ov_output_shape, ov_output_element_type); auto dynamic_dimensions = context.get_dynamic_dimension_values(ov_output_shape); + const auto ov_order_element_type = node->get_input_element_type(1); auto const_order = dynamic_cast(node->get_input_node_ptr(1)); assert(const_order && "non-const order not supported"); - ov::Coordinate coords = const_order->get_coordinate_val(); - SmallVector order(coords.begin(), coords.end()); + SmallVector order; + if (ov_order_element_type == ov::element::i64) { + ov::Coordinate coords = const_order->get_coordinate_val(); + order.assign(coords.begin(), coords.end()); + } else { + assert(ov_order_element_type == ov::element::i32); + std::vector coords = const_order->get_vector(); + order.assign(coords.begin(), coords.end()); + } auto empty = builder.create(loc, out_type, dynamic_dimensions); auto transpose = builder.create(loc, input, empty, order); From 1edc6deee1a73a9d09daa69cf575b6c1b445716c Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Fri, 20 Dec 2024 13:07:47 +0000 Subject: [PATCH 3/3] Use cast_vector instead of conditional coords --- .../src/transformations/mlir/op/transpose.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/common/transformations/src/transformations/mlir/op/transpose.cpp b/src/common/transformations/src/transformations/mlir/op/transpose.cpp index 8d2ebcac1dc853..f0c4aa3d340f78 100644 --- a/src/common/transformations/src/transformations/mlir/op/transpose.cpp +++ b/src/common/transformations/src/transformations/mlir/op/transpose.cpp @@ -31,15 +31,8 @@ struct ConvertTranspose { auto const_order = dynamic_cast(node->get_input_node_ptr(1)); assert(const_order && "non-const order not supported"); - SmallVector order; - if (ov_order_element_type == ov::element::i64) { - ov::Coordinate coords = const_order->get_coordinate_val(); - order.assign(coords.begin(), coords.end()); - } else { - assert(ov_order_element_type == ov::element::i32); - std::vector coords = const_order->get_vector(); - order.assign(coords.begin(), coords.end()); - } + std::vector coords = const_order->cast_vector(); + SmallVector order(coords.begin(), coords.end()); auto empty = builder.create(loc, out_type, dynamic_dimensions); auto transpose = builder.create(loc, input, empty, order);