[PATCH] tree-optimization/95327 - fix another vectorizable_shift const SLP op

Richard Biener rguenther@suse.de
Tue May 26 13:58:22 GMT 2020


This fixes another case where we fail to set the type on a SLP
constant operand in vectorizable_shift.

Bootstrapped / tested on x86_64-unknown-linux-gnu, applied.

Richard.

2020-05-26  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95327
	* tree-vect-stmts.c (vectorizable_shift): Compute op1_vectype
	when we are not using a scalar shift.
---
 gcc/tree-vect-stmts.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 76c7b995817..225a9dc98ac 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -5733,13 +5733,19 @@ vectorizable_shift (vec_info *vinfo,
                 dump_printf_loc (MSG_NOTE, vect_location,
                                  "vector/vector shift/rotate found.\n");
 
+	      if (!op1_vectype)
+		op1_vectype = get_vectype_for_scalar_type (vinfo,
+							   TREE_TYPE (op1),
+							   slp_node);
+
               /* Unlike the other binary operators, shifts/rotates have
                  the rhs being int, instead of the same type as the lhs,
                  so make sure the scalar is the right type if we are
 		 dealing with vectors of long long/long/short/char.  */
 	      incompatible_op1_vectype_p
-		= !tree_nop_conversion_p (TREE_TYPE (vectype),
-					  TREE_TYPE (op1));
+		= (!op1_vectype
+		   || !tree_nop_conversion_p (TREE_TYPE (vectype),
+					      TREE_TYPE (op1)));
             }
         }
     }
-- 
2.25.1


More information about the Gcc-patches mailing list