On Mon, 28 Dec 2020, Tamar Christina wrote: > Hi All, > > This fixes a bug with externals and linear_loads_p where I forgot to save the > value before returning. > > It also fixes handling of nodes with multiple children on a non VEC_PERM node. > There the child iteration would already resolve the kind and the loads are All > expected to be the same if valid so just return one. > > Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu > and no issues. > > Ok for master?
OK. Richard. > Thanks, > Tamar > > gcc/ChangeLog: > > * tree-vect-slp-patterns.c (linear_loads_p): Fix externals. > > --- inline copy of patch -- > diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c > index > 7fd79d91c6ba4ccdbf361307a6105fb7e46aa961..235c0741c78b04f14725751ec399c0fdb32a0823 > 100644 > --- a/gcc/tree-vect-slp-patterns.c > +++ b/gcc/tree-vect-slp-patterns.c > @@ -229,6 +229,7 @@ linear_loads_p (slp_tree_to_load_perm_map_t *perm_cache, > slp_tree root) > else if (SLP_TREE_DEF_TYPE (root) != vect_internal_def) > { > retval.first = PERM_TOP; > + perm_cache->put (root, retval); > return retval; > } > > @@ -241,6 +242,7 @@ linear_loads_p (slp_tree_to_load_perm_map_t *perm_cache, > slp_tree root) > complex_load_perm_t res = linear_loads_p (perm_cache, child); > kind = vect_merge_perms (kind, res.first); > /* Unknown and Top are not valid on blends as they produce no permute. > */ > + retval.first = kind; > if (kind == PERM_UNKNOWN || kind == PERM_TOP) > return retval; > all_loads.safe_push (res.second); > @@ -258,7 +260,7 @@ linear_loads_p (slp_tree_to_load_perm_map_t *perm_cache, > slp_tree root) > retval.first = kind; > retval.second = nloads; > } > - else if (all_loads.length () == 1) > + else > { > retval.first = kind; > retval.second = all_loads[0]; > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)