From 1d72079ba3a370d6751953312f0de76d1a1c555d Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 26 May 2020 09:47:26 +0200 Subject: [PATCH] tree-optimization/95327 - fix another vectorizable_shift const SLP op This fixes another case where we fail to set the type on a SLP constant operand in vectorizable_shift. 2020-05-26 Richard Biener 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.30.2