> 2011-04-06 Martin Jambor <mjam...@suse.cz> > > * cgraph.h (cgraph_node): Remove function declaration. > (cgraph_create_node): Declare. > (cgraph_get_create_node): Likewise. > > * cgraph.c (cgraph_create_node): Renamed to cgraph_create_node_1. > Updated all callers. > (cgraph_node): Renamed to cgraph_create_node, assert that a node for > the decl does not already exist. Call cgraph_get_create_node instead > of cgraph_node. > (cgraph_get_create_node): New function. > (cgraph_same_body_alias): Update comment. > (cgraph_set_call_stmt): Call cgraph_get_node instead of cgraph_node, > assert it does not return NULL. > (cgraph_update_edges_for_call_stmt): Likewise. > (cgraph_clone_edge): Likewise. > (cgraph_create_virtual_clone): Likewise. > (cgraph_update_edges_for_call_stmt_node): Call cgraph_get_create_node > instead of cgraph_node. > (cgraph_add_new_function): Call cgraph_create_node or > cgraph_get_create_node instead of cgraph_node. > > * cgraphbuild.c (record_reference): Call cgraph_get_create_node > instead of cgraph_node. > (record_eh_tables): Likewise. > (mark_address): Likewise. > (mark_load): Likewise. > (build_cgraph_edges): Call cgraph_get_create_node instead > of cgraph_node. > (rebuild_cgraph_edges): Likewise. > > * cgraphunit.c (cgraph_finalize_function): Call cgraph_get_create_node > instead of cgraph_node. > (cgraph_copy_node_for_versioning): Call cgraph_create_node instead of > cgraph_node. > > * lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Call > cgraph_create_node instead of cgraph_node. > > * c-decl.c (finish_function): Call cgraph_get_create_node instead > of cgraph_node. > * lto-cgraph.c (input_node): Likewise. > * lto-streamer-in.c (input_function): Likewise. > * varasm.c (mark_decl_referenced): Likewise. > (assemble_alias): Likewise. > > gcc/c-family/ > * c-gimplify.c (c_genericize): Call cgraph_get_create_node instead > of cgraph_node. > > gcc/cp/ > * cp/class.c (cp_fold_obj_type_ref): Call cgraph_get_create_node > instead of cgraph_node. > * cp/decl2.c (cxx_callgraph_analyze_expr): Likewise. > (cp_write_global_declarations): Likewise. > * cp/optimize.c (maybe_clone_body): Likewise. > * cp/semantics.c (maybe_add_lambda_conv_op): Likewise. > * cp/mangle.c (mangle_decl): Likewise. > * cp/method.c (make_alias_for_thunk): Likewise. > (use_thunk): Likewise. > > gcc/ada/ > * gcc-interface/utils.c (end_subprog_body): Call > cgraph_get_create_node instead of cgraph_node. > > gcc/fortran/ > * trans-decl.c (gfc_generate_function_code): Call > cgraph_get_create_node instead of cgraph_node. > > gcc/objc/ > * objc-act.c (mark_referenced_methods): Call cgraph_get_create_node > instead of cgraph_node.
OK. > Index: src/gcc/lto-cgraph.c > =================================================================== > --- src.orig/gcc/lto-cgraph.c > +++ src/gcc/lto-cgraph.c > @@ -1045,7 +1045,7 @@ input_node (struct lto_file_decl_data *f > 0, CGRAPH_FREQ_BASE, 0, false, NULL); > } > else > - node = cgraph_node (fn_decl); > + node = cgraph_get_create_node (fn_decl); > > node->count = lto_input_sleb128 (ib); > node->count_materialization_scale = lto_input_sleb128 (ib); > Index: src/gcc/lto-streamer-in.c > =================================================================== > --- src.orig/gcc/lto-streamer-in.c > +++ src/gcc/lto-streamer-in.c > @@ -1301,7 +1301,7 @@ input_function (tree fn_decl, struct dat > DECL_INITIAL (fn_decl) = lto_input_tree (ib, data_in); > gcc_assert (DECL_INITIAL (fn_decl)); > DECL_SAVED_TREE (fn_decl) = NULL_TREE; > - node = cgraph_node (fn_decl); > + node = cgraph_get_create_node (fn_decl); I would expect those two to be cgraph_create_node and cgraph_get_node or we have latent bug somewhere. Did you have particular reason for the choice here? I guess we can handle this incrementally. > Index: src/gcc/cgraphbuild.c > =================================================================== > --- src.orig/gcc/cgraphbuild.c > +++ src/gcc/cgraphbuild.c > @@ -74,9 +74,9 @@ record_reference (tree *tp, int *walk_su > if (TREE_CODE (decl) == FUNCTION_DECL) > { > if (!ctx->only_vars) > - cgraph_mark_address_taken_node (cgraph_node (decl)); > + cgraph_mark_address_taken_node (cgraph_get_create_node (decl)); > ipa_record_reference (NULL, ctx->varpool_node, > - cgraph_node (decl), NULL, > + cgraph_get_node (decl), NULL, Please CSE the cgraph_get_create_node call here. In both cases we want get_create_node, during the later cgraph builds the new nodes ight become needed as result of devirtualization and external construvctor folding. Honza