mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-16 13:11:24 +08:00
slp: handle externals correctly in linear_loads_p
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. gcc/ChangeLog: * tree-vect-slp-patterns.c (linear_loads_p): Fix externals.
This commit is contained in:
parent
39666d2b88
commit
bd4298e192
@ -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];
|
||||
|
Loading…
x
Reference in New Issue
Block a user