diff --git a/src/common/transformations/include/transformations/utils/utils.hpp b/src/common/transformations/include/transformations/utils/utils.hpp index 9897663b247..c24a1e46c96 100644 --- a/src/common/transformations/include/transformations/utils/utils.hpp +++ b/src/common/transformations/include/transformations/utils/utils.hpp @@ -22,7 +22,7 @@ namespace op { namespace util { template -bool normalize_single_value(std::vector vec, float& value) { +bool normalize_single_value(std::vector vec, float& value, bool check_value_range = true) { for (const auto& val : vec) { if (val != *vec.begin()) return false; @@ -30,7 +30,8 @@ bool normalize_single_value(std::vector vec, float& value) { float ref_val = static_cast(*vec.begin()); - if (ref_val < std::numeric_limits::lowest() || ref_val > std::numeric_limits::max()) { + if (check_value_range && + (ref_val < std::numeric_limits::lowest() || ref_val > std::numeric_limits::max())) { return false; } @@ -159,7 +160,9 @@ bool has_constant_value(const std::shared_ptr& node, return const_values == values; } -TRANSFORMATIONS_API bool get_single_value(const std::shared_ptr& const_node, float& value); +TRANSFORMATIONS_API bool get_single_value(const std::shared_ptr& const_node, + float& value, + bool check_value_range = true); TRANSFORMATIONS_API std::shared_ptr normalize_constant(const std::shared_ptr& constant, const PartialShape& shape); diff --git a/src/common/transformations/src/transformations/utils/utils.cpp b/src/common/transformations/src/transformations/utils/utils.cpp index c2754fb0ca5..c06ff0fefd3 100644 --- a/src/common/transformations/src/transformations/utils/utils.cpp +++ b/src/common/transformations/src/transformations/utils/utils.cpp @@ -21,32 +21,32 @@ namespace ov { namespace op { namespace util { -bool get_single_value(const std::shared_ptr& const_node, float& value) { +bool get_single_value(const std::shared_ptr& const_node, float& value, bool check_value_range) { switch (const_node->get_element_type()) { case element::Type_t::f16: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::f32: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::bf16: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::f64: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::i8: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::i16: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::i32: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::i64: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::u8: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::u16: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::u32: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); case element::Type_t::u64: - return util::normalize_single_value(const_node->get_vector(), value); + return util::normalize_single_value(const_node->get_vector(), value, check_value_range); default: OPENVINO_THROW("Unsupported precision for const operation: ", const_node->get_friendly_name()); } diff --git a/src/plugins/intel_gpu/src/plugin/ops/pad.cpp b/src/plugins/intel_gpu/src/plugin/ops/pad.cpp index 02481c339d1..1dc5a2abd56 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/pad.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/pad.cpp @@ -44,7 +44,8 @@ static void CreatePadOp(Program& p, const std::shared_ptr& if (op->get_pad_mode() == ov::op::PadMode::CONSTANT && op->get_input_size() == 4) { auto const_node = std::dynamic_pointer_cast(op->get_input_node_shared_ptr(3)); if (const_node) { - OPENVINO_ASSERT(ov::op::util::get_single_value(const_node, pad_value), + const bool check_value_range = false; // Allows the usage of infinity value as pad_value + OPENVINO_ASSERT(ov::op::util::get_single_value(const_node, pad_value, check_value_range), "Invalid parameter size in ", op->get_friendly_name(), " (", op->get_type_name(), ")"); is_value_const = true; }