aboutsummaryrefslogtreecommitdiff
path: root/src/core/NEON/kernels/NEElementwiseOperationKernel.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2020-11-12 15:05:01 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2020-11-12 17:35:53 +0000
commitd7341fb9e3b24b904edf7ac9d83e1e063bc77765 (patch)
treedccf043327c4ec57e2909bd50512d5bd0b9c0e8e /src/core/NEON/kernels/NEElementwiseOperationKernel.cpp
parentc0b6f76561580414f08633a804fc548ccad65659 (diff)
downloadComputeLibrary-d7341fb9e3b24b904edf7ac9d83e1e063bc77765.tar.gz
COMPMID-3960: Mismatch on NEArithmeticSubtraction
Corner-case failure when both input shapes had unit shape on the X axis. Broadcasting was enabled leading to invalid window execution. Check is updated to cross-validate the presence of broadcasting by checking the X dimension in both input shapes. Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Change-Id: I0b79542279e8d155d2661fddff9691d94a1f6855 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4391 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/NEON/kernels/NEElementwiseOperationKernel.cpp')
-rw-r--r--src/core/NEON/kernels/NEElementwiseOperationKernel.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/NEON/kernels/NEElementwiseOperationKernel.cpp b/src/core/NEON/kernels/NEElementwiseOperationKernel.cpp
index bb4e9a67b6..412ae247cb 100644
--- a/src/core/NEON/kernels/NEElementwiseOperationKernel.cpp
+++ b/src/core/NEON/kernels/NEElementwiseOperationKernel.cpp
@@ -656,7 +656,7 @@ void elementwise_op(const ITensor *in1, const ITensor *in2, ITensor *out, const
const int window_step_x = std::min(16 / static_cast<int>(sizeof(OutputScalarType)), 8);
const auto window_start_x = static_cast<int>(window.x().start());
const auto window_end_x = static_cast<int>(window.x().end());
- const bool is_broadcast_across_x = (input1_win.x().step() == 0) || (input2_win.x().step() == 0);
+ const bool is_broadcast_across_x = in1->info()->tensor_shape().x() != in2->info()->tensor_shape().x();
if(is_broadcast_across_x)
{
@@ -735,7 +735,7 @@ void elementwise_op_quantized(const ITensor *in1, const ITensor *in2, ITensor *o
const int window_step_x = 16;
const auto window_start_x = static_cast<int>(window.x().start());
const auto window_end_x = static_cast<int>(window.x().end());
- const bool is_broadcast_across_x = (input1_win.x().step() == 0) || (input2_win.x().step() == 0);
+ const bool is_broadcast_across_x = in1->info()->tensor_shape().x() != in2->info()->tensor_shape().x();
const UniformQuantizationInfo output_qinfo = out->info()->quantization_info().uniform();
@@ -843,7 +843,7 @@ void elementwise_comp_quantized_signed(const ITensor *in1, const ITensor *in2, I
const int window_step_x = 16;
const auto window_start_x = static_cast<int>(window.x().start());
const auto window_end_x = static_cast<int>(window.x().end());
- const bool is_broadcast_across_x = (input1_win.x().step() == 0) || (input2_win.x().step() == 0);
+ const bool is_broadcast_across_x = in1->info()->tensor_shape().x() != in2->info()->tensor_shape().x();
const UniformQuantizationInfo output_qinfo = out->info()->quantization_info().uniform();
@@ -950,7 +950,7 @@ void elementwise_op_quantized_signed(const ITensor *in1, const ITensor *in2, ITe
const int window_step_x = 16;
const auto window_start_x = static_cast<int>(window.x().start());
const auto window_end_x = static_cast<int>(window.x().end());
- const bool is_broadcast_across_x = (input1_win.x().step() == 0) || (input2_win.x().step() == 0);
+ const bool is_broadcast_across_x = in1->info()->tensor_shape().x() != in2->info()->tensor_shape().x();
const UniformQuantizationInfo output_qinfo = out->info()->quantization_info().uniform();