diff options
author | Tamar Christina <tamar.christina@arm.com> | 2021-01-11 09:57:41 +0000 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2021-01-11 09:57:41 +0000 |
commit | bd4298e1927f6c519d5b7829023b1db7e64592e6 (patch) | |
tree | b88cbf80b5029f72ebb8d828eaa56a259ba55b35 /gcc | |
parent | 39666d2b8858361b4921fe0ae87bba90a62d9b9a (diff) | |
download | gcc-bd4298e1927f6c519d5b7829023b1db7e64592e6.zip gcc-bd4298e1927f6c519d5b7829023b1db7e64592e6.tar.gz gcc-bd4298e1927f6c519d5b7829023b1db7e64592e6.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-slp-patterns.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c index e30cea1..4bead9a 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]; |