bool streamer_tree_cache_lookup (struct streamer_tree_cache_d *cache, tree t, unsigned *ix_p) { void **slot; bool retval; unsigned ix; gcc_assert (t); slot = pointer_map_contains (cache->node_map, t); if (slot == NULL) { retval = false; ix = -1; } else { retval = true; ix = (size_t) *slot - 1; } if (ix_p) *ix_p = ix; return retval; }
edge_var_map_vector * redirect_edge_var_map_vector (edge e) { void **slot; /* Hey, what kind of idiot would... you'd be surprised. */ if (!edge_var_maps) return NULL; slot = pointer_map_contains (edge_var_maps, e); if (!slot) return NULL; return (edge_var_map_vector *) *slot; }
void redirect_edge_var_map_clear (edge e) { void **slot; edge_var_map_vector *head; if (!edge_var_maps) return; slot = pointer_map_contains (edge_var_maps, e); if (slot) { head = (edge_var_map_vector *) *slot; vec_free (head); *slot = NULL; } }
void redirect_edge_var_map_dup (edge newe, edge olde) { void **new_slot, **old_slot; edge_var_map_vector head; if (!edge_var_maps) return; new_slot = pointer_map_insert (edge_var_maps, newe); old_slot = pointer_map_contains (edge_var_maps, olde); if (!old_slot) return; head = (edge_var_map_vector) *old_slot; if (head) *new_slot = VEC_copy (edge_var_map, heap, head); else *new_slot = VEC_alloc (edge_var_map, heap, 5); }
void redirect_edge_var_map_dup (edge newe, edge olde) { void **new_slot, **old_slot; edge_var_map_vector *head; if (!edge_var_maps) return; new_slot = pointer_map_insert (edge_var_maps, newe); old_slot = pointer_map_contains (edge_var_maps, olde); if (!old_slot) return; head = (edge_var_map_vector *) *old_slot; edge_var_map_vector *new_head = NULL; if (head) new_head = vec_safe_copy (head); else vec_safe_reserve (new_head, 5); *new_slot = new_head; }