> 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

Reply via email to