COMPMID-2576: Fuse activation in Winograd output transform.

Change-Id: I26dd1307847adeaaefae0a7374b9858c07d71372
Signed-off-by: Pablo Tello <pablo.tello@arm.com>
Reviewed-on: https://review.mlplatform.org/c/2172
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
diff --git a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
index ce921ce..05f06a8 100644
--- a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
+++ b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 ARM Limited.
+ * Copyright (c) 2017-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,7 +36,9 @@
   const float* bptr,
   float* const output,
   const int,  // No need to stride across rows
-  const int output_col_stride
+  const int output_col_stride,
+  const float output_min,
+  const float output_max
 )
 {
   // Construct a map to the output cells
@@ -76,7 +78,9 @@
     }
     for (int j = 0; j < output_tile_cols; j++)
     {
-      vst1q_f32(outptrs[j], f[j] + b);
+      const auto y = vminq_f32(vmaxq_f32(f[j] + b, vdupq_n_f32(output_min)),
+                               vdupq_n_f32(output_max));
+      vst1q_f32(outptrs[j], y);
       outptrs[j] += 4;
     }
   }
@@ -107,7 +111,9 @@
     }
     for (int j = 0; j < output_tile_cols; j++)
     {
-      vst1_f32(outptrs[j], f[j] + b);
+      const auto y = vmin_f32(vmax_f32(f[j] + b, vdup_n_f32(output_min)),
+                              vdup_n_f32(output_max));
+      vst1_f32(outptrs[j], y);
       outptrs[j] += 2;
     }
   }
@@ -138,7 +144,7 @@
     }
     for (int j = 0; j < output_tile_cols; j++)
     {
-      *(outptrs[j]++) = f[j] + b;
+      *(outptrs[j]++) = std::max(std::min(f[j] + b, output_max), output_min);
     }
   }
 }