tree-optimization/95327 - fix another vectorizable_shift const SLP op
authorRichard Biener <rguenther@suse.de>
Tue, 26 May 2020 07:47:26 +0000 (09:47 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 26 May 2020 13:58:32 +0000 (15:58 +0200)
This fixes another case where we fail to set the type on a SLP
constant operand in vectorizable_shift.

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

index 76c7b995817118fd53c290b36bb539f64ef3a9e0..225a9dc98ac583a5e8a82b6c4678d1fb84eaaa13 100644 (file)
@@ -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)));
             }
         }
     }