void cgraph_rebuild_references (void) { basic_block bb; struct cgraph_node *node = cgraph_get_node (current_function_decl); gimple_stmt_iterator gsi; struct ipa_ref *ref; int i; /* Keep speculative references for further cgraph edge expansion. */ for (i = 0; ipa_ref_list_reference_iterate (&node->ref_list, i, ref);) if (!ref->speculative) ipa_remove_reference (ref); else i++; node->count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count; FOR_EACH_BB_FN (bb, cfun) { for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) ipa_record_stmt_references (node, gsi_stmt (gsi)); for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) ipa_record_stmt_references (node, gsi_stmt (gsi)); } record_eh_tables (node, cfun); }
void ipa_remove_all_referring (struct ipa_ref_list *list) { while (list->referring.length ()) ipa_remove_reference (list->referring.last ()); list->referring.release (); }
void ipa_remove_all_references (struct ipa_ref_list *list) { while (vec_safe_length (list->references)) ipa_remove_reference (&list->references->last ()); vec_free (list->references); }
void ipa_remove_stmt_references (symtab_node *referring_node, gimple stmt) { struct ipa_ref *r = NULL; int i; for (i = 0; ipa_ref_list_reference_iterate (&referring_node->ref_list, i, r); i++) if (r->stmt == stmt) ipa_remove_reference (r); }
void ipa_remove_stmt_references (symtab_node *referring_node, gimple stmt) { struct ipa_ref *r = NULL; int i = 0; while (ipa_ref_list_reference_iterate (&referring_node->ref_list, i, r)) if (r->stmt == stmt) ipa_remove_reference (r); else i++; }