diff options
author | Richard Biener <rguenther@suse.de> | 2021-06-22 09:10:56 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-06-22 11:01:17 +0200 |
commit | 26f05f5a823030ebb52b107a8c303d07f77fe317 (patch) | |
tree | 8a76e352b63ad0aeeba0ad2cd8bdf77d92fcf5ae /gcc | |
parent | d58a66aa0faa64bfbd85e528be5104293dd41d0e (diff) | |
download | gcc-26f05f5a823030ebb52b107a8c303d07f77fe317.zip gcc-26f05f5a823030ebb52b107a8c303d07f77fe317.tar.gz gcc-26f05f5a823030ebb52b107a8c303d07f77fe317.tar.bz2 |
tree-optimization/101154 - fix out-of bound access in SLP
This fixes an out-of-bound access of matches.
2021-06-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/101154
* tree-vect-slp.c (vect_build_slp_tree_2): Fix out-of-bound access.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-slp.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index a32f86b..b9f91e7 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1963,15 +1963,15 @@ vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, if (dt == vect_constant_def || dt == vect_external_def) { - /* We can always build those. Might want to sort last - or defer building. */ - vec<tree> ops; - ops.create (group_size); - for (lane = 0; lane < group_size; ++lane) - ops.quick_push (chains[lane][n].op); - slp_tree child = vect_create_new_slp_node (ops); - SLP_TREE_DEF_TYPE (child) = dt; - children.safe_push (child); + /* We can always build those. Might want to sort last + or defer building. */ + vec<tree> ops; + ops.create (group_size); + for (lane = 0; lane < group_size; ++lane) + ops.quick_push (chains[lane][n].op); + slp_tree child = vect_create_new_slp_node (ops); + SLP_TREE_DEF_TYPE (child) = dt; + children.safe_push (child); } else if (dt != vect_internal_def) { @@ -2036,9 +2036,10 @@ vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, dump_printf_loc (MSG_NOTE, vect_location, "failed to match up op %d\n", n); op_stmts.release (); - matches[lane] = false; if (lane != group_size - 1) matches[0] = false; + else + matches[lane] = false; goto out; } if (dump_enabled_p ()) |