diff options
author | Richard Biener <rguenther@suse.de> | 2025-09-02 09:50:14 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2025-09-02 12:51:12 +0200 |
commit | 861b7c054e5f356722e6e1a1b043de5d7a412499 (patch) | |
tree | 680c887446d6ade706266ef35a606c719ace3f7b | |
parent | 0b6f1de05e2b1e25ac4cf8659bc3c4b5b3bac734 (diff) | |
download | gcc-861b7c054e5f356722e6e1a1b043de5d7a412499.zip gcc-861b7c054e5f356722e6e1a1b043de5d7a412499.tar.gz gcc-861b7c054e5f356722e6e1a1b043de5d7a412499.tar.bz2 |
tree-optimization/121754 - ICE with vect_reduc_type and nested cycle
The reduction guard isn't correct, STMT_VINFO_REDUC_DEF also exists
for nested cycles not part of reductions but there's no reduction
info for them.
PR tree-optimization/121754
* tree-vectorizer.h (vect_reduc_type): Simplify to not ICE
on nested cycles.
* gcc.dg/vect/pr121754.c: New testcase.
* gcc.target/aarch64/vect-pr121754.c: Likewise.
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr121754.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/vect-pr121754.c | 14 | ||||
-rw-r--r-- | gcc/tree-vectorizer.h | 10 |
3 files changed, 30 insertions, 7 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr121754.c b/gcc/testsuite/gcc.dg/vect/pr121754.c new file mode 100644 index 0000000..775abda --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr121754.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +float a; +void +fn1 (int b) +{ + for (; b < 10; b++) + { + a = 01.; + for (int c = 0; c < 2000; c++) + a *= 0.99; + } +} diff --git a/gcc/testsuite/gcc.target/aarch64/vect-pr121754.c b/gcc/testsuite/gcc.target/aarch64/vect-pr121754.c new file mode 100644 index 0000000..8b6a757 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-pr121754.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-vectorize -mcpu=neoverse-v2" } */ + +float a; +void +fn1 (int b) +{ + for (; b < 10; b++) + { + a = 01.; + for (int c = 0; c < 2000; c++) + a *= 0.99; + } +} diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 87ffe49..df805c6 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2923,13 +2923,9 @@ vect_reduc_type (vec_info *vinfo, slp_tree node) { if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo)) { - stmt_vec_info stmt_info = SLP_TREE_REPRESENTATIVE (node); - if (STMT_VINFO_REDUC_DEF (stmt_info)) - { - vect_reduc_info reduc_info - = info_for_reduction (loop_vinfo, node); - return int (VECT_REDUC_INFO_TYPE (reduc_info)); - } + vect_reduc_info reduc_info = info_for_reduction (loop_vinfo, node); + if (reduc_info) + return int (VECT_REDUC_INFO_TYPE (reduc_info)); } return -1; } |