Commit 6f62e972ff for aom

commit 6f62e972fff1ee64c8c8fd3bd901d0b3b78d986b
Author: Jonathan Wright <jonathan.wright@arm.com>
Date:   Fri Jul 10 14:13:08 2026 +0100

    Arm: Remove unnecessary temporary variables in variance kernels

    Decrement the block size directly instead of making a separate loop
    counter 'i' in Neon and Neon DotProd variance kernels.

    Change-Id: Iea325e5af993514d301ce5f69e430f28e18fe83e

diff --git a/aom_dsp/arm/variance_neon.c b/aom_dsp/arm/variance_neon.c
index fb46857a7a..9968c82375 100644
--- a/aom_dsp/arm/variance_neon.c
+++ b/aom_dsp/arm/variance_neon.c
@@ -28,7 +28,6 @@ static inline void variance_4xh_neon(const uint8_t *src, int src_stride,
   // 32767 / 255 ~= 128, but we use an 8-wide accumulator; so 256 4-wide rows.
   assert(h <= 256);

-  int i = h;
   do {
     uint8x8_t s = load_unaligned_u8(src, src_stride);
     uint8x8_t r = load_unaligned_u8(ref, ref_stride);
@@ -41,8 +40,8 @@ static inline void variance_4xh_neon(const uint8_t *src, int src_stride,

     src += 2 * src_stride;
     ref += 2 * ref_stride;
-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   *sum = horizontal_add_s16x8(sum_s16);
   *sse = (uint32_t)horizontal_add_s32x4(sse_s32);
@@ -58,7 +57,6 @@ static inline void variance_8xh_neon(const uint8_t *src, int src_stride,
   // 32767 / 255 ~= 128
   assert(h <= 128);

-  int i = h;
   do {
     uint8x8_t s = vld1_u8(src);
     uint8x8_t r = vld1_u8(ref);
@@ -72,7 +70,7 @@ static inline void variance_8xh_neon(const uint8_t *src, int src_stride,

     src += src_stride;
     ref += ref_stride;
-  } while (--i != 0);
+  } while (--h != 0);

   *sum = horizontal_add_s16x8(sum_s16);
   *sse = (uint32_t)horizontal_add_s32x4(vaddq_s32(sse_s32[0], sse_s32[1]));
@@ -88,7 +86,6 @@ static inline void variance_16xh_neon(const uint8_t *src, int src_stride,
   // 32767 / 255 ~= 128, so 128 16-wide rows.
   assert(h <= 128);

-  int i = h;
   do {
     uint8x16_t s = vld1q_u8(src);
     uint8x16_t r = vld1q_u8(ref);
@@ -112,7 +109,7 @@ static inline void variance_16xh_neon(const uint8_t *src, int src_stride,

     src += src_stride;
     ref += ref_stride;
-  } while (--i != 0);
+  } while (--h != 0);

   *sum = horizontal_add_s16x8(vaddq_s16(sum_s16[0], sum_s16[1]));
   *sse = (uint32_t)horizontal_add_s32x4(vaddq_s32(sse_s32[0], sse_s32[1]));
@@ -283,7 +280,6 @@ static inline unsigned int mse8xh_neon(const uint8_t *src, int src_stride,
   uint16x8_t diff[2];
   int32x4_t sse_s32[2] = { vdupq_n_s32(0), vdupq_n_s32(0) };

-  int i = h;
   do {
     s[0] = vld1_u8(src);
     src += src_stride;
@@ -307,8 +303,8 @@ static inline unsigned int mse8xh_neon(const uint8_t *src, int src_stride,
     sse_s32[0] = vmlal_s16(sse_s32[0], diff_hi[0], diff_hi[0]);
     sse_s32[1] = vmlal_s16(sse_s32[1], diff_hi[1], diff_hi[1]);

-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   sse_s32[0] = vaddq_s32(sse_s32[0], sse_s32[1]);

@@ -325,7 +321,6 @@ static inline unsigned int mse16xh_neon(const uint8_t *src, int src_stride,
   int32x4_t sse_s32[4] = { vdupq_n_s32(0), vdupq_n_s32(0), vdupq_n_s32(0),
                            vdupq_n_s32(0) };

-  int i = h;
   do {
     s[0] = vld1q_u8(src);
     src += src_stride;
@@ -361,8 +356,8 @@ static inline unsigned int mse16xh_neon(const uint8_t *src, int src_stride,
     sse_s32[2] = vmlal_s16(sse_s32[2], diff_hi[2], diff_hi[2]);
     sse_s32[3] = vmlal_s16(sse_s32[3], diff_hi[3], diff_hi[3]);

-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   sse_s32[0] = vaddq_s32(sse_s32[0], sse_s32[1]);
   sse_s32[2] = vaddq_s32(sse_s32[2], sse_s32[3]);
diff --git a/aom_dsp/arm/variance_neon_dotprod.c b/aom_dsp/arm/variance_neon_dotprod.c
index 3a3965e23e..68a644551c 100644
--- a/aom_dsp/arm/variance_neon_dotprod.c
+++ b/aom_dsp/arm/variance_neon_dotprod.c
@@ -25,7 +25,6 @@ static inline void variance_4xh_neon_dotprod(const uint8_t *src, int src_stride,
   uint32x4_t ref_sum = vdupq_n_u32(0);
   uint32x4_t sse_u32 = vdupq_n_u32(0);

-  int i = h;
   do {
     uint8x16_t s = load_unaligned_u8q(src, src_stride);
     uint8x16_t r = load_unaligned_u8q(ref, ref_stride);
@@ -38,8 +37,8 @@ static inline void variance_4xh_neon_dotprod(const uint8_t *src, int src_stride,

     src += 4 * src_stride;
     ref += 4 * ref_stride;
-    i -= 4;
-  } while (i != 0);
+    h -= 4;
+  } while (h != 0);

   int32x4_t sum_diff =
       vsubq_s32(vreinterpretq_s32_u32(src_sum), vreinterpretq_s32_u32(ref_sum));
@@ -54,7 +53,6 @@ static inline void variance_8xh_neon_dotprod(const uint8_t *src, int src_stride,
   uint32x4_t ref_sum = vdupq_n_u32(0);
   uint32x4_t sse_u32 = vdupq_n_u32(0);

-  int i = h;
   do {
     uint8x16_t s = vcombine_u8(vld1_u8(src), vld1_u8(src + src_stride));
     uint8x16_t r = vcombine_u8(vld1_u8(ref), vld1_u8(ref + ref_stride));
@@ -67,8 +65,8 @@ static inline void variance_8xh_neon_dotprod(const uint8_t *src, int src_stride,

     src += 2 * src_stride;
     ref += 2 * ref_stride;
-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   int32x4_t sum_diff =
       vsubq_s32(vreinterpretq_s32_u32(src_sum), vreinterpretq_s32_u32(ref_sum));
@@ -85,7 +83,6 @@ static inline void variance_16xh_neon_dotprod(const uint8_t *src,
   uint32x4_t ref_sum = vdupq_n_u32(0);
   uint32x4_t sse_u32 = vdupq_n_u32(0);

-  int i = h;
   do {
     uint8x16_t s = vld1q_u8(src);
     uint8x16_t r = vld1q_u8(ref);
@@ -98,7 +95,7 @@ static inline void variance_16xh_neon_dotprod(const uint8_t *src,

     src += src_stride;
     ref += ref_stride;
-  } while (--i != 0);
+  } while (--h != 0);

   int32x4_t sum_diff =
       vsubq_s32(vreinterpretq_s32_u32(src_sum), vreinterpretq_s32_u32(ref_sum));
@@ -115,12 +112,11 @@ static inline void variance_large_neon_dotprod(const uint8_t *src,
   uint32x4_t ref_sum = vdupq_n_u32(0);
   uint32x4_t sse_u32 = vdupq_n_u32(0);

-  int i = h;
   do {
-    int j = 0;
+    int i = 0;
     do {
-      uint8x16_t s = vld1q_u8(src + j);
-      uint8x16_t r = vld1q_u8(ref + j);
+      uint8x16_t s = vld1q_u8(src + i);
+      uint8x16_t r = vld1q_u8(ref + i);

       src_sum = vdotq_u32(src_sum, s, vdupq_n_u8(1));
       ref_sum = vdotq_u32(ref_sum, r, vdupq_n_u8(1));
@@ -128,12 +124,12 @@ static inline void variance_large_neon_dotprod(const uint8_t *src,
       uint8x16_t abs_diff = vabdq_u8(s, r);
       sse_u32 = vdotq_u32(sse_u32, abs_diff, abs_diff);

-      j += 16;
-    } while (j < w);
+      i += 16;
+    } while (i < w);

     src += src_stride;
     ref += ref_stride;
-  } while (--i != 0);
+  } while (--h != 0);

   int32x4_t sum_diff =
       vsubq_s32(vreinterpretq_s32_u32(src_sum), vreinterpretq_s32_u32(ref_sum));
@@ -254,7 +250,6 @@ static inline unsigned int mse8xh_neon_dotprod(const uint8_t *src,
                                                unsigned int *sse, int h) {
   uint32x4_t sse_u32 = vdupq_n_u32(0);

-  int i = h;
   do {
     uint8x16_t s = vcombine_u8(vld1_u8(src), vld1_u8(src + src_stride));
     uint8x16_t r = vcombine_u8(vld1_u8(ref), vld1_u8(ref + ref_stride));
@@ -265,8 +260,8 @@ static inline unsigned int mse8xh_neon_dotprod(const uint8_t *src,

     src += 2 * src_stride;
     ref += 2 * ref_stride;
-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   *sse = horizontal_add_u32x4(sse_u32);
   return horizontal_add_u32x4(sse_u32);
@@ -279,7 +274,6 @@ static inline unsigned int mse16xh_neon_dotprod(const uint8_t *src,
                                                 unsigned int *sse, int h) {
   uint32x4_t sse_u32[2] = { vdupq_n_u32(0), vdupq_n_u32(0) };

-  int i = h;
   do {
     uint8x16_t s0 = vld1q_u8(src);
     uint8x16_t s1 = vld1q_u8(src + src_stride);
@@ -294,8 +288,8 @@ static inline unsigned int mse16xh_neon_dotprod(const uint8_t *src,

     src += 2 * src_stride;
     ref += 2 * ref_stride;
-    i -= 2;
-  } while (i != 0);
+    h -= 2;
+  } while (h != 0);

   *sse = horizontal_add_u32x4(vaddq_u32(sse_u32[0], sse_u32[1]));
   return horizontal_add_u32x4(vaddq_u32(sse_u32[0], sse_u32[1]));