aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-08-19 12:31:53 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-08-19 13:45:58 +0200
commit05284f73cff1685e2513b415e8da644193acf8cd (patch)
tree673bfadb6234376aae265a6a8a3f3d36e538cc01
parentfc8e2846c24bd62091b31cc35c143b990e79d557 (diff)
downloadgcc-05284f73cff1685e2513b415e8da644193acf8cd.zip
gcc-05284f73cff1685e2513b415e8da644193acf8cd.tar.gz
gcc-05284f73cff1685e2513b415e8da644193acf8cd.tar.bz2
tree-optimization/121592 - failed reduction SLP discovery
The testcase in the PR shows that when we have a reduction chain with a wrapped conversion we fail to properly fall back to a regular reduction, resulting in wrong-code. The following fixes this by failing discovery. The testcase has other issues, so I'm not including it here. PR tree-optimization/121592 * tree-vect-slp.cc (vect_analyze_slp): When SLP reduction chain discovery fails, fail overall when the tail of the chain isn't also the entry for the non-SLP reduction.
-rw-r--r--gcc/tree-vect-slp.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 05363f8..d5adb8b 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -5005,6 +5005,11 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size,
vinfo = next;
}
STMT_VINFO_DEF_TYPE (first_element) = vect_internal_def;
+ /* ??? When there's a conversion around the reduction
+ chain 'last' isn't the entry of the reduction. */
+ if (STMT_VINFO_DEF_TYPE (last) != vect_reduction_def)
+ return opt_result::failure_at (vect_location,
+ "SLP build failed.\n");
/* It can be still vectorized as part of an SLP reduction. */
loop_vinfo->reductions.safe_push (last);
}