[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; }