> 2011-07-14 Martin Jambor <mjam...@suse.cz> > > * ipa-prop.h: Include alloc-pool.h, all sorts of updates to general > comments. > (ipcp_values_pool): Declare. > (ipcp_sources_pool): Likewise. > (ipcp_lattice): Changed to forward declaration. > (ipa_param_descriptor): Removed fields ipcp_lattice, types and > cannot_devirtualize. > (ipa_node_params): New fields descriptors, lattices, known_vals, > clone_for_all_contexts and node dead, removed fields params and > count_scale. > (ipa_set_param_count): Removed. > (ipa_get_param_count): Made to work with descriptors vector. > (ipa_get_param): Updated. > (ipa_param_cannot_devirtualize_p): Removed. > (ipa_param_types_vec_empty): Likewise. > (ipa_set_param_used): New function. > (ipa_get_param_used): Updated to use descriptors vector. > (ipa_func_list): Removed. > (ipa_init_func_list): Removed declaration. > (ipa_push_func_to_list_1): Likewise. > (ipa_pop_func_from_list): Likewise. > (ipa_push_func_to_list): Removed. > (ipa_lattice_from_jfunc): Remove declaration. > (ipa_get_jf_pass_through_result): Declare. > (ipa_get_jf_ancestor_result): Likewise. > (ipa_value_from_jfunc): Likewise. > (ipa_get_lattice): Update. > (ipa_lat_is_single_const): New function. > * ipa-prop.c (ipa_push_func_to_list_1): Removed. > (ipa_init_func_list): Likewise. > (ipa_pop_func_from_list): Likewise. > (ipa_get_param_decl_index): Fix coding style. > (count_formal_params): Removed. > (count_formal_params_1): Renamed to count_formal_params. > (ipa_populate_param_decls): Update to use descriptors vector. > (ipa_initialize_node_params): Likewise. > (visit_ref_for_mod_analysis): Use ipa_set_param_used. > (ipa_analyze_params_uses): Likewise. > (ipa_free_node_params_substructures): Likewise and free also lattices > and known values. > (duplicate_array): Removed. > (ipa_edge_duplication_hook): Add the new edge to the list of edge > clones. > (ipa_node_duplication_hook): Update to use new lattices. > (ipa_free_all_structures_after_ipa_cp): Free alloc pools. > (ipa_free_all_structures_after_iinln): Likewise. > (ipa_write_node_info): Update to use new lattices. > (ipa_read_node_info): Likewise. > (ipa_get_jf_pass_through_result): New function. > (ipa_get_jf_ancestor_result): Likewise. > (ipa_value_from_jfunc): Likewise. > (ipa_cst_from_jfunc): Reimplemented using ipa_value_from_jfunc. > * ipa-cp.c: Reimplemented. > * params.def (PARAM_DEVIRT_TYPE_LIST_SIZE): Removed. > (PARAM_IPA_CP_VALUE_LIST_SIZE): New parameter. > (PARAM_IPA_CP_EVAL_THRESHOLD): Likewise. > * Makefile.in (IPA_PROP_H): Added alloc-pool.h to dependencies. > > * doc/invoke.texi (devirt-type-list-size): Removed description. > (ipa-cp-value-list-size): Added description. > > * testsuite/gcc.dg/ipa/ipa-1.c: Updated testcase dump scan. > * testsuite/gcc.dg/ipa/ipa-2.c: Likewise. > * testsuite/gcc.dg/ipa/ipa-3.c: Likewise and made functions static. > * testsuite/gcc.dg/ipa/ipa-4.c: Updated testcase dump scan. > * testsuite/gcc.dg/ipa/ipa-5.c: Likewise. > * testsuite/gcc.dg/ipa/ipa-7.c: Likewise. > * testsuite/gcc.dg/ipa/ipa-8.c: Updated testcase dump scan. > * testsuite/gcc.dg/ipa/ipacost-1.c: Likewise. > * testsuite/gcc.dg/ipa/ipacost-2.c: Likewise and increased sizes > of some functions. > * testsuite/gcc.dg/ipa/ipcp-1.c: New test. > * testsuite/gcc.dg/ipa/ipcp-2.c: Likewise. > * testsuite/gcc.dg/tree-ssa/ipa-cp-1.c: Updated testcase. > > > /* ipa_node_params stores information related to formal parameters of > functions > and some other information for interprocedural passes that operate on > parameters (such as ipa-cp). */ > > struct ipa_node_params > { > /* Information about individual formal parameters that are gathered when > summaries are generated. */ > VEC (ipa_param_descriptor_t, heap) *descriptors; > /* Pointer to an array of structures describing individual formal > parameters. */ > struct ipcp_lattice *lattices;
Hmm, I was under impression that the plan was to break away the stuff used by ipa-cp internally during the propagatoin stage (i.e. ipcp_orig_node/known_vals and probably lattices from the stuff used to represent parameters and jump functions, i.e. descriptors. But this can be handled incrementally. > /* FIXME: Can we clobber only the first argument of thunks? */ Well, we should know how to propagate through it. But it is not too important side case I guess untill we can devirtualize to them effectively. > if (node->alias || node->thunk.thunk_p > || ipa_is_called_with_var_arguments (info)) > disable = true; The patch is OK, thanks! It would be nice to add a testcase that the profile updating is done correctly. Honza