+2013-02-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/56461
+ * tree-flow.h (edge_var_map_vector): Change into va_heap, vl_embed
+ vector.
+ * tree-ssa.c (redirect_edge_var_map_add): Use vec_safe_reserve and
+ vec_safe_push, always update *slot.
+ (redirect_edge_var_map_clear): Use vec_free.
+ (redirect_edge_var_map_dup): Use vec_safe_copy and vec_safe_reserve.
+ (free_var_map_entry): Use vec_free.
+ * tree-cfgcleanup.c (remove_forwarder_block_with_phi): Use
+ FOR_EACH_VEC_SAFE_ELT instead of FOR_EACH_VEC_ELT.
+
2013-02-27 Andrey Belevantsev <abel@ispras.ru>
PR middle-end/45472
-
* sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
when the may_trap_p bit of the exprs being merged differs.
-
Reorder tests for speculativeness in the logical and operator.
2013-02-27 Jakub Jelinek <jakub@redhat.com>
redirection, replace it with the PHI argument that used
to be on E. */
head = redirect_edge_var_map_vector (e);
- FOR_EACH_VEC_ELT (*head, i, vm)
+ FOR_EACH_VEC_SAFE_ELT (head, i, vm)
{
tree old_arg = redirect_edge_var_map_result (vm);
tree new_arg = redirect_edge_var_map_def (vm);
/* A vector of var maps. */
-typedef vec<edge_var_map> edge_var_map_vector;
+typedef vec<edge_var_map, va_heap, vl_embed> edge_var_map_vector;
extern void init_tree_ssa (struct function *);
extern void redirect_edge_var_map_add (edge, tree, tree, source_location);
slot = pointer_map_insert (edge_var_maps, e);
head = (edge_var_map_vector *) *slot;
if (!head)
- {
- head = new edge_var_map_vector;
- head->create (5);
- *slot = head;
- }
+ vec_safe_reserve (head, 5);
new_node.def = def;
new_node.result = result;
new_node.locus = locus;
- head->safe_push (new_node);
+ vec_safe_push (head, new_node);
+ *slot = head;
}
if (slot)
{
head = (edge_var_map_vector *) *slot;
- delete head;
+ vec_free (head);
*slot = NULL;
}
}
return;
head = (edge_var_map_vector *) *old_slot;
- edge_var_map_vector *new_head = new edge_var_map_vector;
+ edge_var_map_vector *new_head = NULL;
if (head)
- *new_head = head->copy ();
+ new_head = vec_safe_copy (head);
else
- new_head->create (5);
+ vec_safe_reserve (new_head, 5);
*new_slot = new_head;
}
void *data ATTRIBUTE_UNUSED)
{
edge_var_map_vector *head = (edge_var_map_vector *) *value;
- delete head;
+ vec_free (head);
return true;
}