diff --git a/src/core/helpers/WindowHelpers.cpp b/src/core/helpers/WindowHelpers.cpp
index 75ffb71..fa152c9 100644
--- a/src/core/helpers/WindowHelpers.cpp
+++ b/src/core/helpers/WindowHelpers.cpp
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2020-2021 Arm Limited.
+* Copyright (c) 2020-2022 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -231,4 +231,55 @@
 
     return window;
 }
+
+std::pair<Window, size_t> calculate_squashed_or_max_window(const ITensorInfo &src0, const ITensorInfo &src1)
+{
+    const auto &shape0 = src0.tensor_shape();
+    const auto &shape1 = src1.tensor_shape();
+    const auto &strides0 = src0.strides_in_bytes();
+    const auto &strides1 = src1.strides_in_bytes();
+    const auto num_dimensions = std::max(src0.num_dimensions(), src1.num_dimensions());
+
+    Window win;
+    size_t split_dimension = Window::DimY;
+    size_t dim = 0;
+
+    size_t squashed_bytes = src0.element_size();
+
+    // Try to squash the low dimensions together.
+    for(; dim < num_dimensions; ++dim)
+    {
+        if(shape0[dim] != shape1[dim] || strides0[dim] != squashed_bytes || strides1[dim] != squashed_bytes)
+        {
+            break;
+        }
+
+        squashed_bytes *= shape0[dim];
+    }
+
+    if(dim == num_dimensions)
+    {
+        auto squashed_elements = squashed_bytes / src0.element_size();
+
+        split_dimension = Window::DimX;
+
+        // The input tensors can be interpreted as 1D array.
+        win.set(0, Window::Dimension(0, squashed_elements, 1));
+
+        for(dim = 1; dim < Coordinates::num_max_dimensions; ++dim)
+        {
+            win.set(dim, Window::Dimension(0, 1, 1));
+        }
+    }
+    else
+    {
+        // Generates the max window.
+        for(dim = 0; dim < Coordinates::num_max_dimensions; ++dim)
+        {
+            win.set(dim, Window::Dimension(0, std::max(shape0[dim], shape1[dim]), 1));
+        }
+    }
+
+    return std::make_pair(win, split_dimension);
+}
 } // namespace arm_compute
diff --git a/src/core/helpers/WindowHelpers.h b/src/core/helpers/WindowHelpers.h
index 28c39cc..c9e5a13 100644
--- a/src/core/helpers/WindowHelpers.h
+++ b/src/core/helpers/WindowHelpers.h
@@ -176,6 +176,19 @@
     return calculate_max_enlarged_window(info.valid_region(), steps, border_size);
 }
 
+/** Calculate the squashed or maximum window for the given tensor shapes.
+ *
+ * If the tensor data resides continuously in the memory, the tensor can be interpreted
+ * as 1D array and all the dimensions can be squashed together into the x-dimension.
+ * Otherwise, generate the max window for the given tensor shapes.
+ *
+ * @param[in] src0 Tensor info object defining the shape of the first input tensor.
+ * @param[in] src1 Tensor info object defining the shape of the second input tensor.
+ *
+ * @return The squashed or maximum window the kernel can be executed on and the preferred split dimension.
+ */
+std::pair<Window, size_t> calculate_squashed_or_max_window(const ITensorInfo &src0, const ITensorInfo &src1);
+
 /** Function to compute the shape of output and window for the given inputs
  *
  * @param[in] infos Input tensor informations
