The following makes sure to release any SLP kind specific data when
rolling back earlier successful analysis. This avoids crashing
when re-analyzing such node via another graph entry.
Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
The testcase was on the big side, so not included.
Richard.
PR tree-optimization/123986
* tree-vect-slp.cc (vect_slp_analyze_operations): When
rolling back analyzed nodes, release node specific data
and reset SLP_TREE_TYPE.
---
gcc/tree-vect-slp.cc | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index c481efc749f..c932e8d5cba 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -9258,10 +9258,19 @@ vect_slp_analyze_operations (vec_info *vinfo)
dump_printf_loc (MSG_NOTE, vect_location,
"removing SLP instance operations starting from:
%G",
stmt_info->stmt);
+ while (!visited_vec.is_empty ())
+ {
+ slp_tree node = visited_vec.pop ();
+ SLP_TREE_TYPE (node) = undef_vec_info_type;
+ if (node->data)
+ {
+ delete node->data;
+ node->data = nullptr;
+ }
+ visited.remove (node);
+ }
vect_free_slp_instance (instance);
vinfo->slp_instances.ordered_remove (i);
- while (!visited_vec.is_empty ())
- visited.remove (visited_vec.pop ());
}
else
{
--
2.51.0