diff mbox series

Fix SLP reduction neutral op value for pointer reductions

Message ID 20240528081549.75E693882110@sourceware.org
State New
Headers show
Series Fix SLP reduction neutral op value for pointer reductions | expand

Commit Message

Richard Biener May 28, 2024, 8:14 a.m. UTC
When the neutral op is the initial value we might need to convert
it from pointer to integer.

Bootstrapped and tested no x86_64-unknown-linux-gnu, pushed.

This shows with the SLP single-lane reduction discovery.

	* tree-vect-loop.cc (get_initial_defs_for_reduction): Convert
	neutral op to the vector component type.
---
 gcc/tree-vect-loop.cc | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 31abfe047a4..24a1239f016 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -5616,7 +5616,14 @@  get_initial_defs_for_reduction (loop_vec_info loop_vinfo,
       /* Get the def before the loop.  In reduction chain we have only
 	 one initial value.  Else we have as many as PHIs in the group.  */
       if (i >= initial_values.length () || (j > i && neutral_op))
-	op = neutral_op;
+	{
+	  if (!useless_type_conversion_p (TREE_TYPE (vector_type),
+					  TREE_TYPE (neutral_op)))
+	    neutral_op = gimple_convert (&ctor_seq,
+					 TREE_TYPE (vector_type),
+					 neutral_op);
+	  op = neutral_op;
+	}
       else
 	{
 	  if (!useless_type_conversion_p (TREE_TYPE (vector_type),