SLP: Have vectorizable_slp_permutation set type on invariants
authorTamar Christina <tamar.christina@arm.com>
Fri, 20 Nov 2020 13:32:32 +0000 (13:32 +0000)
committerTamar Christina <tamar.christina@arm.com>
Fri, 20 Nov 2020 13:32:32 +0000 (13:32 +0000)
This modifies vectorizable_slp_permutation to update the type of the children
of a perm node before trying to permute them.  This allows us to be able to
permute invariant nodes.

This will be covered by test from the SLP pattern matcher.

gcc/ChangeLog:

* tree-vect-slp.c (vectorizable_slp_permutation): Update types on nodes
when needed.

gcc/tree-vect-slp.c

index 37356850ca47a17f0af9c1ec373814b88f958933..59a8630f74aaa43e6a4df03fa6745dbc04fa452e 100644 (file)
@@ -5187,7 +5187,8 @@ vectorizable_slp_permutation (vec_info *vinfo, gimple_stmt_iterator *gsi,
   slp_tree child;
   unsigned i;
   FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
-    if (!types_compatible_p (SLP_TREE_VECTYPE (child), vectype))
+    if (!vect_maybe_update_slp_op_vectype (child, vectype)
+       || !types_compatible_p (SLP_TREE_VECTYPE (child), vectype))
       {
        if (dump_enabled_p ())
          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,