[gcc r17-3475] Revert "middle-end: Try intermediate types for widening sums [PR122069]"

Kyrylo Tkachov via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:5ba12509964a92b8ae8f0a967108db1171c45f8f

commit r17-3475-g5ba12509964a92b8ae8f0a967108db1171c45f8f
Author: Kyrylo Tkachov <[email protected]>
Date:   Thu Aug 20 16:40:15 2026 +0200

    Revert "middle-end: Try intermediate types for widening sums [PR122069]"
    
    This reverts commit d0850a968d4e85b2d257b0e78fa61b1021137ede.

Diff:
---
 .../gcc.target/aarch64/sve/reduc_3_costly.c        |  2 +-
 gcc/testsuite/gcc.target/aarch64/sve/widen_sum_1.c | 84 ----------------------
 gcc/tree-vect-patterns.cc                          | 28 +-------
 3 files changed, 3 insertions(+), 111 deletions(-)

diff --git a/gcc/testsuite/gcc.target/aarch64/sve/reduc_3_costly.c b/gcc/testsuite/gcc.target/aarch64/sve/reduc_3_costly.c
index 7cef352a9b7d..988459df8af9 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/reduc_3_costly.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/reduc_3_costly.c
@@ -27,6 +27,6 @@ REDUC_PTR (float, _Float16)
 REDUC_PTR (double, float)
 
 /* { dg-final { scan-assembler-times {\tuaddv\td[0-9]+, p[0-7], z[0-9]+\.s\n} 2 } } */
-/* { dg-final { scan-assembler-times {\tuaddv\td[0-9]+, p[0-7], z[0-9]+\.d\n} 4 } } */
+/* { dg-final { scan-assembler-times {\tuaddv\td[0-9]+, p[0-7], z[0-9]+\.d\n} 3 } } */
 /* { dg-final { scan-assembler-times {\tfaddv\ts[0-9]+, p[0-7], z[0-9]+\.s\n} 1 } } */
 /* { dg-final { scan-assembler-times {\tfaddv\td[0-9]+, p[0-7], z[0-9]+\.d\n} 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/widen_sum_1.c b/gcc/testsuite/gcc.target/aarch64/sve/widen_sum_1.c
deleted file mode 100644
index 3ae9d14dafd3..000000000000
--- a/gcc/testsuite/gcc.target/aarch64/sve/widen_sum_1.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target lp64 } */
-/* { dg-options "-O3 -march=armv8-a+sve -mautovec-preference=sve-only --param vect-epilogues-nomask=0 -fdump-tree-vect-details" } */
-/* { dg-final { check-function-bodies "**" "" } } */
-
-#define DEF(NAME, INPUT, OUTPUT) \
-  OUTPUT                        \
-  NAME (const INPUT *a, long n) \
-  {                             \
-    OUTPUT sum = 0;             \
-    for (long i = 0; i < n; ++i) \
-      sum += a[i];              \
-    return sum;                 \
-  }
-
-/*
-** sum_u8_long:
-**	...
-**	cnth	x[0-9]+
-**	...
-**	ptrue	(p[0-7])\.b, all
-**	mov	(z[0-9]+\.h), #1
-**	...
-**	ld1b	(z[0-9]+\.h), \1/z, \[[^]]*\]
-**	...
-**	udot	(z[0-9]+)\.d, \3, \2
-**	...
-**	uaddv	d[0-9]+, \1, \4\.d
-**	...
-*/
-DEF (sum_u8_long, unsigned char, long)
-
-/*
-** sum_s8_long:
-**	...
-**	cnth	x[0-9]+
-**	...
-**	ptrue	(p[0-7])\.b, all
-**	mov	(z[0-9]+\.h), #1
-**	...
-**	ld1sb	(z[0-9]+\.h), \1/z, \[[^]]*\]
-**	...
-**	sdot	(z[0-9]+)\.d, \3, \2
-**	...
-**	uaddv	d[0-9]+, \1, \4\.d
-**	...
-*/
-DEF (sum_s8_long, signed char, long)
-
-/*
-** sum_u8_int:
-**	...
-**	cntb	x[0-9]+
-**	...
-**	ptrue	(p[0-7])\.b, all
-**	mov	(z[0-9]+\.b), #1
-**	...
-**	ld1b	(z[0-9]+\.b), \1/z, \[[^]]*\]
-**	...
-**	udot	(z[0-9]+)\.s, \3, \2
-**	...
-**	uaddv	d[0-9]+, \1, \4\.s
-**	...
-*/
-DEF (sum_u8_int, unsigned char, int)
-
-/*
-** sum_s8_int:
-**	...
-**	cntb	x[0-9]+
-**	...
-**	ptrue	(p[0-7])\.b, all
-**	mov	(z[0-9]+\.b), #1
-**	...
-**	ld1b	(z[0-9]+\.b), \1/z, \[[^]]*\]
-**	...
-**	sdot	(z[0-9]+)\.s, \3, \2
-**	...
-**	uaddv	d[0-9]+, \1, \4\.s
-**	...
-*/
-DEF (sum_s8_int, signed char, int)
-
-/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 4 "vect" } } */
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 734e3d7b3bf0..ef128d75e109 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -2570,36 +2570,12 @@ vect_recog_widen_sum_pattern (vec_info *vinfo,
 
   vect_pattern_detected ("vect_recog_widen_sum_pattern", last_stmt);
 
-  tree input = unprom0.op;
   if (!vect_supportable_conv_optab_p (vinfo, type, WIDEN_SUM_EXPR,
 				      unprom0.type, type_out))
-    {
-      /* Try widening the input to an intermediate type before adding it to
-	 the accumulator.  Start with the narrowest type in order to retain
-	 the largest vectorization factor.  */
-      tree input_type = unprom0.type;
-      tree input_vectype = NULL_TREE;
-      for (unsigned int precision
-	     = vect_element_precision (TYPE_PRECISION (input_type) + 1);
-	   precision <= TYPE_PRECISION (type) / 2;
-	   precision *= 2)
-	{
-	  input_type = build_nonstandard_integer_type
-	    (precision, TYPE_UNSIGNED (unprom0.type));
-	  if (vect_supportable_conv_optab_p (vinfo, type, WIDEN_SUM_EXPR,
-					input_type, type_out, &input_vectype))
-	    break;
-	}
-
-      if (!input_vectype)
-	return NULL;
-
-      input = vect_convert_input (vinfo, stmt_vinfo, input_type, &unprom0,
-				  input_vectype);
-    }
+    return NULL;
 
   var = vect_recog_temp_ssa_var (type, NULL);
-  pattern_stmt = gimple_build_assign (var, WIDEN_SUM_EXPR, input, oprnd1);
+  pattern_stmt = gimple_build_assign (var, WIDEN_SUM_EXPR, unprom0.op, oprnd1);
 
   return pattern_stmt;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.