gcc/gcc/ipa-cp.c

1266 lines
36 KiB
C
Raw Normal View History

/* Interprocedural constant propagation
alias.c (struct alias_set_entry_d): Rename from struct alias_set_entry. gcc/ChangeLog: * alias.c (struct alias_set_entry_d): Rename from struct alias_set_entry. Change all uses. * except.c (struct call_site_record_d): Rename from struct call_site_record. Change all uses. * except.h (struct eh_region_d): Rename from struct eh_region. Change all uses. * gcse.c (struct hash_table_d): Rename from struct hash_table. Change all uses. * graphite.c (struct ivtype_map_elt_d): Rename fromstruct ivtype_map_elt. Change all uses. (struct rename_map_elt_d): Rename fromstruct rename_map_elt. Change all uses. (struct ifsese_d): Rename fromstruct ifsese. Change all uses. * graphite.h (struct name_tree_d): Rename from struct name_tree. Change all uses. (struct sese_d): Rename from struct sese. Change all uses. * omega.h (struct eqn_d): Rename from struct eqn. Change all uses. (struct omega_pb_d): Rename from struct omega_pb. Change all uses. * optabs.h (struct optab_d): Rename from struct optab. Change all uses. (struct convert_optab_d): Rename from struct convert_optab. Change all uses. * tree-pass.h (struct ipa_opt_pass_d): Rename fromstruct ipa_opt_pass. Change all uses. * tree-predcom.c (struct dref_d): Rename from struct dref. Change all uses. * c-decl.c (pushtag): If -Wc++-compat, warn if the tag is already defined as a typedef. (grokdeclarator): If -Wc++-compat, warn if a typedef is already defined as a tag. gcc/cp/ChangeLog: * cp-tree.h (enum cp_lvalue_kind_flags): Rename from cp_lvalue_kind. Change all uses. (enum base_access_flags): Rename from enum base_access. Change all uses. * parser.c (enum cp_parser_flags): Remove enum tag. gcc/testsuite/ChangeLog: * gcc.dg/Wcxx-compat-10.c: New testcase. libcpp/ChangeLog: * include/cpplib.h (enum cpp_builtin_type): Rename from enum builtin_type. Change all uses. From-SVN: r147605
2009-05-16 08:54:11 +02:00
Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Contributed by Razya Ladelsky <RAZYA@il.ibm.com>
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Interprocedural constant propagation. The aim of interprocedural constant
propagation (IPCP) is to find which function's argument has the same
constant value in each invocation throughout the whole program. For example,
consider the following program:
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
int g (int y)
{
printf ("value is %d",y);
}
int f (int x)
{
g (x);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
int h (int y)
{
g (y);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
void main (void)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
f (3);
h (3);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
The IPCP algorithm will find that g's formal argument y is always called
with the value 3.
The algorithm used is based on "Interprocedural Constant Propagation", by
Challahan David, Keith D Cooper, Ken Kennedy, Linda Torczon, Comp86, pg
152-161
The optimization is divided into three stages:
First stage - intraprocedural analysis
=======================================
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
This phase computes jump_function and modification flags.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
A jump function for a callsite represents the values passed as an actual
arguments of a given callsite. There are three types of values:
Pass through - the caller's formal parameter is passed as an actual argument.
Constant - a constant is passed as an actual argument.
Unknown - neither of the above.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
The jump function info, ipa_jump_func, is stored in ipa_edge_args
structure (defined in ipa_prop.h and pointed to by cgraph_node->aux)
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
modified_flags are defined in ipa_node_params structure
(defined in ipa_prop.h and pointed to by cgraph_edge->aux).
-ipcp_init_stage() is the first stage driver.
Second stage - interprocedural analysis
========================================
This phase does the interprocedural constant propagation.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
It computes lattices for all formal parameters in the program
and their value that may be:
TOP - unknown.
BOTTOM - non constant.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
CONSTANT - constant value.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
Lattice describing a formal parameter p will have a constant value if all
callsites invoking this function have the same constant value passed to p.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
The lattices are stored in ipcp_lattice which is itself in ipa_node_params
structure (defined in ipa_prop.h and pointed to by cgraph_edge->aux).
-ipcp_iterate_stage() is the second stage driver.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
Third phase - transformation of function code
============================================
Propagates the constant-valued formals into the function.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
For each function whose parameters are constants, we create its clone.
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
Then we process the clone in two ways:
1. We insert an assignment statement 'parameter = const' at the beginning
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
of the cloned function.
2. For read-only parameters that do not live in memory, we replace all their
uses with the constant.
cgraph.c: Fix typos in comments. gcc/ * cgraph.c: Fix typos in comments. (cgraph_availability_names): Fix string typo. * fold-const.c: Fix typos in comments. (fold_binary): Fix typo in warning. * genautomata.c: Fix typos in comments. (check_presence_pattern_sets): Fix typo in local variable. (output_description): Fix typo in output. * ggc-zone.c (ggc_pch_finish): Fix typo in error message. * hwint.h: Likewise. * matrix-reorg.c (check_allocation_function): Likewise. * omega.c (smooth_weird_equations): Likewise. * auto-inc-dec.c: Fix typos in comments. * bb-reorder.c: Likewise. * builtins.c: Likewise. * c-common.c: Likewise. * c-cppbuiltin.c: Likewise. * c-parser.c: Likewise. * c-pretty-print.c: Likewise. * cfgcleanup.c: Likewise. * cfgexpand.c: Likewise. * cfghooks.c: Likewise. * cfglayout.c: Likewise. * cfgloopmanip.c: Likewise. * cgraphunit.c: Likewise. * coverage.c: Likewise. * dbxout.c: Likewise. * df-byte-scan.c: Likewise. * df-core.c: Likewise. * df-problems.c: Likewise. * df-scan.c: Likewise. * dfp.c: Likewise. * dominance.c: Likewise. * domwalk.c: Likewise. * dse.c: Likewise. * dwarf2out.c: Likewise. * emit-rtl.c: Likewise. * et-forest.c: Likewise. * function.c: Likewise. * function.h: Likewise. * gcc.c: Likewise. * gcov-io.c: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. * genattrtab.c: Likewise. * ggc-page.c: Likewise. * gimplify.c: Likewise. * gthr-lynx.h: Likewise. * haifa-sched.c: Likewise. * ipa-cp.c: Likewise. * ipa-inline.c: Likewise. * ipa-prop.h: Likewise. * ipa-pure-const.c: Likewise. * ipa-struct-reorg.c: Likewise. * ipa-struct-reorg.h: Likewise. * ipa-type-escape.c: Likewise. * ipa.c: Likewise. * loop-doloop.c: Likewise. * mips-tfile.c: Likewise. * mkmap-flat.awk: Likewise. * mkmap-symver.awk: Likewise. * modulo-sched.c: Likewise. * omp-low.c: Likewise. * optabs.c: Likewise. * optabs.h: Likewise. * opts.c: Likewise. * passes.c: Likewise. * postreload-gcse.c: Likewise. * postreload.c: Likewise. * predict.c: Likewise. * pretty-print.h: Likewise. * profile.c: Likewise. * protoize.c: Likewise. * ra-conflict.c: Likewise. * real.c: Likewise. * recog.c: Likewise. * regclass.c: Likewise. * regs.h: Likewise. * reload.c: Likewise. * rtl-error.c: Likewise. * rtlanal.c: Likewise. * scan.h: Likewise. * sched-rgn.c: Likewise. * see.c: Likewise. * stmt.c: Likewise. * target.h: Likewise. * tree-dfa.c: Likewise. * tree-eh.c: Likewise. * tree-flow-inline.h: Likewise. * tree-inline.c: Likewise. * tree-into-ssa.c: Likewise. * tree-loop-distribution.c: Likewise. * tree-nested.c: Likewise. * tree-parloops.c: Likewise. * tree-pass.h: Likewise. * tree-pretty-print.c: Likewise. * tree-profile.c: Likewise. * tree-scalar-evolution.c: Likewise. * tree-sra.c: Likewise. * tree-ssa-alias-warnings.c: Likewise. * tree-ssa-ccp.c: Likewise. * tree-ssa-coalesce.c: Likewise. * tree-ssa-dom.c: Likewise. * tree-ssa-dse.c: Likewise. * tree-ssa-forwprop.c: Likewise. * tree-ssa-live.c: Likewise. * tree-ssa-live.h: Likewise. * tree-ssa-loop-im.c: Likewise. * tree-ssa-loop-ivopts.c: Likewise. * tree-ssa-loop-niter.c: Likewise. * tree-ssa-loop-prefetch.c: Likewise. * tree-ssa-phiopt.c: Likewise. * tree-ssa-phiprop.c: Likewise. * tree-ssa-sccvn.c: Likewise. * tree-ssa-ter.c: Likewise. * tree-ssa-threadupdate.c: Likewise. * tree-ssa.c: Likewise. * tree-vect-analyze.c: Likewise. * tree-vect-transform.c: Likewise. * tree-vectorizer.c: Likewise. * tree-vn.c: Likewise. * tree-vrp.c: Likewise. * tree.c: Likewise. * tree.def: Likewise. * tree.h: Likewise. * unwind-dw2-fde.c: Likewise. * unwind.inc: Likewise. * value-prof.c: Likewise. * vmsdbgout.c: Likewise. From-SVN: r136425
2008-06-06 07:42:00 +02:00
We also need to modify some callsites to call the cloned functions instead
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
of the original ones. For a callsite passing an argument found to be a
constant by IPCP, there are two different cases to handle:
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
1. A constant is passed as an argument. In this case the callsite in the
should be redirected to call the cloned callee.
2. A parameter (of the caller) passed as an argument (pass through
argument). In such cases both the caller and the callee have clones and
only the callsite in the cloned caller is redirected to call to the
cloned callee.
cgraph.c: Fix typos in comments. gcc/ * cgraph.c: Fix typos in comments. (cgraph_availability_names): Fix string typo. * fold-const.c: Fix typos in comments. (fold_binary): Fix typo in warning. * genautomata.c: Fix typos in comments. (check_presence_pattern_sets): Fix typo in local variable. (output_description): Fix typo in output. * ggc-zone.c (ggc_pch_finish): Fix typo in error message. * hwint.h: Likewise. * matrix-reorg.c (check_allocation_function): Likewise. * omega.c (smooth_weird_equations): Likewise. * auto-inc-dec.c: Fix typos in comments. * bb-reorder.c: Likewise. * builtins.c: Likewise. * c-common.c: Likewise. * c-cppbuiltin.c: Likewise. * c-parser.c: Likewise. * c-pretty-print.c: Likewise. * cfgcleanup.c: Likewise. * cfgexpand.c: Likewise. * cfghooks.c: Likewise. * cfglayout.c: Likewise. * cfgloopmanip.c: Likewise. * cgraphunit.c: Likewise. * coverage.c: Likewise. * dbxout.c: Likewise. * df-byte-scan.c: Likewise. * df-core.c: Likewise. * df-problems.c: Likewise. * df-scan.c: Likewise. * dfp.c: Likewise. * dominance.c: Likewise. * domwalk.c: Likewise. * dse.c: Likewise. * dwarf2out.c: Likewise. * emit-rtl.c: Likewise. * et-forest.c: Likewise. * function.c: Likewise. * function.h: Likewise. * gcc.c: Likewise. * gcov-io.c: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. * genattrtab.c: Likewise. * ggc-page.c: Likewise. * gimplify.c: Likewise. * gthr-lynx.h: Likewise. * haifa-sched.c: Likewise. * ipa-cp.c: Likewise. * ipa-inline.c: Likewise. * ipa-prop.h: Likewise. * ipa-pure-const.c: Likewise. * ipa-struct-reorg.c: Likewise. * ipa-struct-reorg.h: Likewise. * ipa-type-escape.c: Likewise. * ipa.c: Likewise. * loop-doloop.c: Likewise. * mips-tfile.c: Likewise. * mkmap-flat.awk: Likewise. * mkmap-symver.awk: Likewise. * modulo-sched.c: Likewise. * omp-low.c: Likewise. * optabs.c: Likewise. * optabs.h: Likewise. * opts.c: Likewise. * passes.c: Likewise. * postreload-gcse.c: Likewise. * postreload.c: Likewise. * predict.c: Likewise. * pretty-print.h: Likewise. * profile.c: Likewise. * protoize.c: Likewise. * ra-conflict.c: Likewise. * real.c: Likewise. * recog.c: Likewise. * regclass.c: Likewise. * regs.h: Likewise. * reload.c: Likewise. * rtl-error.c: Likewise. * rtlanal.c: Likewise. * scan.h: Likewise. * sched-rgn.c: Likewise. * see.c: Likewise. * stmt.c: Likewise. * target.h: Likewise. * tree-dfa.c: Likewise. * tree-eh.c: Likewise. * tree-flow-inline.h: Likewise. * tree-inline.c: Likewise. * tree-into-ssa.c: Likewise. * tree-loop-distribution.c: Likewise. * tree-nested.c: Likewise. * tree-parloops.c: Likewise. * tree-pass.h: Likewise. * tree-pretty-print.c: Likewise. * tree-profile.c: Likewise. * tree-scalar-evolution.c: Likewise. * tree-sra.c: Likewise. * tree-ssa-alias-warnings.c: Likewise. * tree-ssa-ccp.c: Likewise. * tree-ssa-coalesce.c: Likewise. * tree-ssa-dom.c: Likewise. * tree-ssa-dse.c: Likewise. * tree-ssa-forwprop.c: Likewise. * tree-ssa-live.c: Likewise. * tree-ssa-live.h: Likewise. * tree-ssa-loop-im.c: Likewise. * tree-ssa-loop-ivopts.c: Likewise. * tree-ssa-loop-niter.c: Likewise. * tree-ssa-loop-prefetch.c: Likewise. * tree-ssa-phiopt.c: Likewise. * tree-ssa-phiprop.c: Likewise. * tree-ssa-sccvn.c: Likewise. * tree-ssa-ter.c: Likewise. * tree-ssa-threadupdate.c: Likewise. * tree-ssa.c: Likewise. * tree-vect-analyze.c: Likewise. * tree-vect-transform.c: Likewise. * tree-vectorizer.c: Likewise. * tree-vn.c: Likewise. * tree-vrp.c: Likewise. * tree.c: Likewise. * tree.def: Likewise. * tree.h: Likewise. * unwind-dw2-fde.c: Likewise. * unwind.inc: Likewise. * value-prof.c: Likewise. * vmsdbgout.c: Likewise. From-SVN: r136425
2008-06-06 07:42:00 +02:00
This update is done in two steps: First all cloned functions are created
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
during a traversal of the call graph, during which all callsites are
redirected to call the cloned function. Then the callsites are traversed
and many calls redirected back to fit the description above.
-ipcp_insert_stage() is the third phase driver.
*/
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tree.h"
#include "target.h"
#include "cgraph.h"
#include "ipa-prop.h"
#include "tree-flow.h"
#include "tree-pass.h"
#include "flags.h"
#include "timevar.h"
#include "diagnostic.h"
#include "tree-dump.h"
#include "tree-inline.h"
#include "fibheap.h"
#include "params.h"
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
/* Number of functions identified as candidates for cloning. When not cloning
we can simplify iterate stage not forcing it to go through the decision
on what is profitable and what not. */
static int n_cloning_candidates;
/* Maximal count found in program. */
static gcov_type max_count;
/* Cgraph nodes that has been completely replaced by cloning during iterate
* stage and will be removed after ipcp is finished. */
static bitmap dead_nodes;
static void ipcp_print_profile_data (FILE *);
static void ipcp_function_scale_print (FILE *);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Get the original node field of ipa_node_params associated with node NODE. */
static inline struct cgraph_node *
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_get_orig_node (struct cgraph_node *node)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
return IPA_NODE_REF (node)->ipcp_orig_node;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return true if NODE describes a cloned/versioned function. */
static inline bool
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_node_is_clone (struct cgraph_node *node)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
return (ipcp_get_orig_node (node) != NULL);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Create ipa_node_params and its data structures for NEW_NODE. Set ORIG_NODE
as the ipcp_orig_node field in ipa_node_params. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_init_cloned_node (struct cgraph_node *orig_node,
struct cgraph_node *new_node)
{
ipa-cp.c (ipcp_init_cloned_node): Call ipa_check_create_node_params instead of ipa_create_node_params. 2008-07-08 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_cloned_node): Call ipa_check_create_node_params instead of ipa_create_node_params. (ipcp_driver): Allocate infos with ipa_check_create_node_params and ipa_check_create_edge_args, free them with free_all_ipa_structures_after_ipa_cp, call ipa_register_cgraph_hooks. * ipa-prop.c: Include flags.h and tree-inline.h. (ipa_node_params_vector): New variable. (ipa_edge_args_vector): New variable. (edge_removal_hook_holder): New variable. (node_removal_hook_holder): New variable. (edge_duplication_hook_holder): New variable. (node_duplication_hook_holder): New variable. (ipa_detect_param_modifications): Check for presence of modified flags. (ipa_compute_jump_functions): Check for presence of jump functions. (ipa_free_edge_args_substructures): New function. (ipa_create_node_params): Removed. (ipa_free_all_edge_args): Changed to deallocate the on-the-side vector. (ipa_free_node_params_substructures): New function. (ipa_free_all_node_params): Changed to deallocate the on-the-side vector. (ipa_edge_removal_hook): New function. (ipa_node_removal_hook): New function. (duplicate_array): New function. (ipa_edge_duplication_hook): New function. (ipa_node_duplication_hook): New function. (ipa_register_cgraph_hooks): New function. (ipa_unregister_cgraph_hooks): New function. (free_all_ipa_structures_after_ipa_cp): New function. * ipa-prop.h: Include vec.h. (ipa_node_params_t): New typedef with vector types for it. (ipa_edge_args_t): New typedef with vector types for it. (IPA_NODE_REF): Changed to access an on-the-side vector. (IPA_EDGE_REF): Changed to access an on-the-side vector. (ipa_check_create_node_params): New function. (ipa_check_create_edge_args): New function. * Makefile.in (IPA_PROP_H): New variable for ipa-prop.h. Converted all users. From-SVN: r137620
2008-07-08 15:25:24 +02:00
ipa_check_create_node_params ();
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
ipa_initialize_node_params (new_node);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
IPA_NODE_REF (new_node)->ipcp_orig_node = orig_node;
}
/* Perform intraprocedrual analysis needed for ipcp. */
static void
ipcp_analyze_node (struct cgraph_node *node)
{
/* Unreachable nodes should have been eliminated before ipcp. */
gcc_assert (node->needed || node->reachable);
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
ipa_initialize_node_params (node);
ipa_detect_param_modifications (node);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return scale for NODE. */
static inline gcov_type
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_get_node_scale (struct cgraph_node *node)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
return IPA_NODE_REF (node)->count_scale;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Set COUNT as scale for NODE. */
static inline void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_set_node_scale (struct cgraph_node *node, gcov_type count)
{
IPA_NODE_REF (node)->count_scale = count;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return whether LAT is a constant lattice. */
static inline bool
ipcp_lat_is_const (struct ipcp_lattice *lat)
{
if (lat->type == IPA_CONST_VALUE)
return true;
else
return false;
}
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
/* Return whether LAT is a constant lattice that ipa-cp can actually insert
into the code (i.e. constants excluding member pointers and pointers). */
static inline bool
ipcp_lat_is_insertable (struct ipcp_lattice *lat)
{
return lat->type == IPA_CONST_VALUE;
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return true if LAT1 and LAT2 are equal. */
static inline bool
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_lats_are_equal (struct ipcp_lattice *lat1, struct ipcp_lattice *lat2)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
gcc_assert (ipcp_lat_is_const (lat1) && ipcp_lat_is_const (lat2));
if (lat1->type != lat2->type)
return false;
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (operand_equal_p (lat1->constant, lat2->constant, 0))
return true;
return false;
}
/* Compute Meet arithmetics:
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
Meet (IPA_BOTTOM, x) = IPA_BOTTOM
Meet (IPA_TOP,x) = x
Meet (const_a,const_b) = IPA_BOTTOM, if const_a != const_b.
MEET (const_a,const_b) = const_a, if const_a == const_b.*/
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipa_lattice_meet (struct ipcp_lattice *res, struct ipcp_lattice *lat1,
struct ipcp_lattice *lat2)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (lat1->type == IPA_BOTTOM || lat2->type == IPA_BOTTOM)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
res->type = IPA_BOTTOM;
return;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (lat1->type == IPA_TOP)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
res->type = lat2->type;
res->constant = lat2->constant;
return;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (lat2->type == IPA_TOP)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
res->type = lat1->type;
res->constant = lat1->constant;
return;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (!ipcp_lats_are_equal (lat1, lat2))
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
res->type = IPA_BOTTOM;
return;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
res->type = lat1->type;
res->constant = lat1->constant;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return the lattice corresponding to the Ith formal parameter of the function
described by INFO. */
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
static inline struct ipcp_lattice *
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
ipcp_get_lattice (struct ipa_node_params *info, int i)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
return &(info->params[i].ipcp_lattice);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Given the jump function JFUNC, compute the lattice LAT that describes the
value coming down the callsite. INFO describes the caller node so that
pass-through jump functions can be evaluated. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_lattice_from_jfunc (struct ipa_node_params *info, struct ipcp_lattice *lat,
struct ipa_jump_func *jfunc)
{
if (jfunc->type == IPA_JF_CONST)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
lat->type = IPA_CONST_VALUE;
lat->constant = jfunc->value.constant;
}
else if (jfunc->type == IPA_JF_PASS_THROUGH)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipcp_lattice *caller_lat;
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
caller_lat = ipcp_get_lattice (info, jfunc->value.formal_id);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
lat->type = caller_lat->type;
lat->constant = caller_lat->constant;
}
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
else
lat->type = IPA_BOTTOM;
}
builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * calls.c (avoid_likely_spilled_reg): Likewise. * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise. * cgraph.c (cgraph_clone_edge, cgraph_clone_node): Likewise. * config/i386/i386.c (ix86_expand_special_args_builtin, ix86_secondary_reload): Likewise. * except.c (struct eh_region, gen_eh_region_catch, remove_unreachable_regions, duplicate_eh_regions, assign_filter_values, build_post_landing_pads, sjlj_find_directly_reachable_regions, remove_eh_handler, reachable_next_level, foreach_reachable_handler, can_throw_internal_1, can_throw_external_1, collect_one_action_chain): Likewise. * expr.c (expand_expr_real_1, vector_mode_valid_p): Likewise. * fold-const.c (twoval_comparison_p, eval_subst): Likewise. * function.c (update_temp_slot_address, instantiate_new_reg, instantiate_virtual_regs_in_rtx, instantiate_virtual_regs_in_insn): Likewise. * gimple.c (extract_ops_from_tree, gimple_seq_copy): Likewise. * gimplify.c (gimplify_call_expr, gimplify_init_constructor, gimplify_cleanup_point_expr): Likewise. * ipa-cp.c (ipcp_lattice_changed): Likewise. * passes.c (next_pass_1): Likewise. * print-tree.c (print_node_brief, print_node): Likewise. * profile.c (branch_prob): Likewise. * tree-dump.c (dump_register): Likewise. * tree-eh.c (replace_goto_queue_cond_clause, lower_catch): Likewise. * tree-inline.c (remap_ssa_name, remap_type_1, remap_blocks, copy_statement_list, remap_gimple_op_r, copy_tree_body_r, copy_edges_for_bb, copy_cfg_body, copy_tree_r, copy_arguments_for_versioning, copy_static_chain): Likewise. * tree-into-ssa.c (names_replaced_by, add_to_repl_tbl, add_new_name_mapping, register_new_name_mapping): Likewise. * tree-mudflap.c (mf_xform_derefs): Likewise. * tree-predcom.c (struct chain, dump_chain, replace_ref_with, get_init_expr, combine_chains): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-structalias.c (create_variable_info_for): Likewise. * tree-vrp.c (simplify_cond_using_ranges): Likewise. * tree.c (substitute_in_expr, iterative_hash_expr): Likewise. * value-prof.c (gimple_duplicate_stmt_histograms): Likewise. From-SVN: r138809
2008-08-06 17:57:09 +02:00
/* True when OLD_LAT and NEW_LAT values are not the same. */
static bool
builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * calls.c (avoid_likely_spilled_reg): Likewise. * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise. * cgraph.c (cgraph_clone_edge, cgraph_clone_node): Likewise. * config/i386/i386.c (ix86_expand_special_args_builtin, ix86_secondary_reload): Likewise. * except.c (struct eh_region, gen_eh_region_catch, remove_unreachable_regions, duplicate_eh_regions, assign_filter_values, build_post_landing_pads, sjlj_find_directly_reachable_regions, remove_eh_handler, reachable_next_level, foreach_reachable_handler, can_throw_internal_1, can_throw_external_1, collect_one_action_chain): Likewise. * expr.c (expand_expr_real_1, vector_mode_valid_p): Likewise. * fold-const.c (twoval_comparison_p, eval_subst): Likewise. * function.c (update_temp_slot_address, instantiate_new_reg, instantiate_virtual_regs_in_rtx, instantiate_virtual_regs_in_insn): Likewise. * gimple.c (extract_ops_from_tree, gimple_seq_copy): Likewise. * gimplify.c (gimplify_call_expr, gimplify_init_constructor, gimplify_cleanup_point_expr): Likewise. * ipa-cp.c (ipcp_lattice_changed): Likewise. * passes.c (next_pass_1): Likewise. * print-tree.c (print_node_brief, print_node): Likewise. * profile.c (branch_prob): Likewise. * tree-dump.c (dump_register): Likewise. * tree-eh.c (replace_goto_queue_cond_clause, lower_catch): Likewise. * tree-inline.c (remap_ssa_name, remap_type_1, remap_blocks, copy_statement_list, remap_gimple_op_r, copy_tree_body_r, copy_edges_for_bb, copy_cfg_body, copy_tree_r, copy_arguments_for_versioning, copy_static_chain): Likewise. * tree-into-ssa.c (names_replaced_by, add_to_repl_tbl, add_new_name_mapping, register_new_name_mapping): Likewise. * tree-mudflap.c (mf_xform_derefs): Likewise. * tree-predcom.c (struct chain, dump_chain, replace_ref_with, get_init_expr, combine_chains): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-structalias.c (create_variable_info_for): Likewise. * tree-vrp.c (simplify_cond_using_ranges): Likewise. * tree.c (substitute_in_expr, iterative_hash_expr): Likewise. * value-prof.c (gimple_duplicate_stmt_histograms): Likewise. From-SVN: r138809
2008-08-06 17:57:09 +02:00
ipcp_lattice_changed (struct ipcp_lattice *old_lat,
struct ipcp_lattice *new_lat)
{
builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * calls.c (avoid_likely_spilled_reg): Likewise. * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise. * cgraph.c (cgraph_clone_edge, cgraph_clone_node): Likewise. * config/i386/i386.c (ix86_expand_special_args_builtin, ix86_secondary_reload): Likewise. * except.c (struct eh_region, gen_eh_region_catch, remove_unreachable_regions, duplicate_eh_regions, assign_filter_values, build_post_landing_pads, sjlj_find_directly_reachable_regions, remove_eh_handler, reachable_next_level, foreach_reachable_handler, can_throw_internal_1, can_throw_external_1, collect_one_action_chain): Likewise. * expr.c (expand_expr_real_1, vector_mode_valid_p): Likewise. * fold-const.c (twoval_comparison_p, eval_subst): Likewise. * function.c (update_temp_slot_address, instantiate_new_reg, instantiate_virtual_regs_in_rtx, instantiate_virtual_regs_in_insn): Likewise. * gimple.c (extract_ops_from_tree, gimple_seq_copy): Likewise. * gimplify.c (gimplify_call_expr, gimplify_init_constructor, gimplify_cleanup_point_expr): Likewise. * ipa-cp.c (ipcp_lattice_changed): Likewise. * passes.c (next_pass_1): Likewise. * print-tree.c (print_node_brief, print_node): Likewise. * profile.c (branch_prob): Likewise. * tree-dump.c (dump_register): Likewise. * tree-eh.c (replace_goto_queue_cond_clause, lower_catch): Likewise. * tree-inline.c (remap_ssa_name, remap_type_1, remap_blocks, copy_statement_list, remap_gimple_op_r, copy_tree_body_r, copy_edges_for_bb, copy_cfg_body, copy_tree_r, copy_arguments_for_versioning, copy_static_chain): Likewise. * tree-into-ssa.c (names_replaced_by, add_to_repl_tbl, add_new_name_mapping, register_new_name_mapping): Likewise. * tree-mudflap.c (mf_xform_derefs): Likewise. * tree-predcom.c (struct chain, dump_chain, replace_ref_with, get_init_expr, combine_chains): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-structalias.c (create_variable_info_for): Likewise. * tree-vrp.c (simplify_cond_using_ranges): Likewise. * tree.c (substitute_in_expr, iterative_hash_expr): Likewise. * value-prof.c (gimple_duplicate_stmt_histograms): Likewise. From-SVN: r138809
2008-08-06 17:57:09 +02:00
if (old_lat->type == new_lat->type)
{
builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * calls.c (avoid_likely_spilled_reg): Likewise. * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise. * cgraph.c (cgraph_clone_edge, cgraph_clone_node): Likewise. * config/i386/i386.c (ix86_expand_special_args_builtin, ix86_secondary_reload): Likewise. * except.c (struct eh_region, gen_eh_region_catch, remove_unreachable_regions, duplicate_eh_regions, assign_filter_values, build_post_landing_pads, sjlj_find_directly_reachable_regions, remove_eh_handler, reachable_next_level, foreach_reachable_handler, can_throw_internal_1, can_throw_external_1, collect_one_action_chain): Likewise. * expr.c (expand_expr_real_1, vector_mode_valid_p): Likewise. * fold-const.c (twoval_comparison_p, eval_subst): Likewise. * function.c (update_temp_slot_address, instantiate_new_reg, instantiate_virtual_regs_in_rtx, instantiate_virtual_regs_in_insn): Likewise. * gimple.c (extract_ops_from_tree, gimple_seq_copy): Likewise. * gimplify.c (gimplify_call_expr, gimplify_init_constructor, gimplify_cleanup_point_expr): Likewise. * ipa-cp.c (ipcp_lattice_changed): Likewise. * passes.c (next_pass_1): Likewise. * print-tree.c (print_node_brief, print_node): Likewise. * profile.c (branch_prob): Likewise. * tree-dump.c (dump_register): Likewise. * tree-eh.c (replace_goto_queue_cond_clause, lower_catch): Likewise. * tree-inline.c (remap_ssa_name, remap_type_1, remap_blocks, copy_statement_list, remap_gimple_op_r, copy_tree_body_r, copy_edges_for_bb, copy_cfg_body, copy_tree_r, copy_arguments_for_versioning, copy_static_chain): Likewise. * tree-into-ssa.c (names_replaced_by, add_to_repl_tbl, add_new_name_mapping, register_new_name_mapping): Likewise. * tree-mudflap.c (mf_xform_derefs): Likewise. * tree-predcom.c (struct chain, dump_chain, replace_ref_with, get_init_expr, combine_chains): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-structalias.c (create_variable_info_for): Likewise. * tree-vrp.c (simplify_cond_using_ranges): Likewise. * tree.c (substitute_in_expr, iterative_hash_expr): Likewise. * value-prof.c (gimple_duplicate_stmt_histograms): Likewise. From-SVN: r138809
2008-08-06 17:57:09 +02:00
if (!ipcp_lat_is_const (old_lat))
return false;
builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * builtins.c (expand_builtin_profile_func): Avoid C++ keywords. * calls.c (avoid_likely_spilled_reg): Likewise. * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise. * cgraph.c (cgraph_clone_edge, cgraph_clone_node): Likewise. * config/i386/i386.c (ix86_expand_special_args_builtin, ix86_secondary_reload): Likewise. * except.c (struct eh_region, gen_eh_region_catch, remove_unreachable_regions, duplicate_eh_regions, assign_filter_values, build_post_landing_pads, sjlj_find_directly_reachable_regions, remove_eh_handler, reachable_next_level, foreach_reachable_handler, can_throw_internal_1, can_throw_external_1, collect_one_action_chain): Likewise. * expr.c (expand_expr_real_1, vector_mode_valid_p): Likewise. * fold-const.c (twoval_comparison_p, eval_subst): Likewise. * function.c (update_temp_slot_address, instantiate_new_reg, instantiate_virtual_regs_in_rtx, instantiate_virtual_regs_in_insn): Likewise. * gimple.c (extract_ops_from_tree, gimple_seq_copy): Likewise. * gimplify.c (gimplify_call_expr, gimplify_init_constructor, gimplify_cleanup_point_expr): Likewise. * ipa-cp.c (ipcp_lattice_changed): Likewise. * passes.c (next_pass_1): Likewise. * print-tree.c (print_node_brief, print_node): Likewise. * profile.c (branch_prob): Likewise. * tree-dump.c (dump_register): Likewise. * tree-eh.c (replace_goto_queue_cond_clause, lower_catch): Likewise. * tree-inline.c (remap_ssa_name, remap_type_1, remap_blocks, copy_statement_list, remap_gimple_op_r, copy_tree_body_r, copy_edges_for_bb, copy_cfg_body, copy_tree_r, copy_arguments_for_versioning, copy_static_chain): Likewise. * tree-into-ssa.c (names_replaced_by, add_to_repl_tbl, add_new_name_mapping, register_new_name_mapping): Likewise. * tree-mudflap.c (mf_xform_derefs): Likewise. * tree-predcom.c (struct chain, dump_chain, replace_ref_with, get_init_expr, combine_chains): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-structalias.c (create_variable_info_for): Likewise. * tree-vrp.c (simplify_cond_using_ranges): Likewise. * tree.c (substitute_in_expr, iterative_hash_expr): Likewise. * value-prof.c (gimple_duplicate_stmt_histograms): Likewise. From-SVN: r138809
2008-08-06 17:57:09 +02:00
if (ipcp_lats_are_equal (old_lat, new_lat))
return false;
}
return true;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Print all ipcp_lattices of all functions to F. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_all_lattices (FILE * f)
{
struct cgraph_node *node;
int i, count;
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
fprintf (f, "\nLattice:\n");
for (node = cgraph_nodes; node; node = node->next)
{
struct ipa_node_params *info;
if (!node->analyzed)
continue;
info = IPA_NODE_REF (node);
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
fprintf (f, " Node: %s:\n", cgraph_node_name (node));
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
count = ipa_get_param_count (info);
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
fprintf (f, " param [%d]: ", i);
if (lat->type == IPA_CONST_VALUE)
{
fprintf (f, "type is CONST ");
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
print_generic_expr (f, lat->constant, 0);
fprintf (f, "\n");
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
else if (lat->type == IPA_TOP)
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
fprintf (f, "type is TOP\n");
else
ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. 2008-07-23 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_print_edge_profiles): Test for node->analyzed rather than for DECL_SAVED_TREE. * ipa-prop.c: Include diagnostic.h. (ipa_check_stmt_modifications): Check LHS of GIMPLE_MODIFY_EXPRs thoroughly. (ipa_detect_param_modifications): Function rewritten from scratch. (ipa_compute_jump_functions): Changed accesses to modification flags. (ipa_free_node_params_substructures): Update flags destruction. (ipa_node_duplication_hook): Update flags duplication. (ipa_print_all_params_modified): Updated flag access. * ipa-prop.h (struct ipa_param_flags): New structure. (struct ipa_node_params): New field modification_analysis_done, modified_flags changed into param_flags. (ipa_is_ith_param_modified): Changed to use new flags. * Makefile.in (ipa-prop.o): Add $(DIAGNOSTIC_H) to dependencies. * ipa-prop.c (ipa_print_all_jump_functions): Moved here from ipa-cp.c and split into two functions. (ipa_print_node_jump_functions): New function. (compute_scalar_jump_functions): New function. (type_like_member_ptr_p): New function. (compute_pass_through_member_ptrs): New function. (fill_member_ptr_cst_jump_function): New function. (determine_cst_member_ptr): New function. (compute_cst_member_ptr_arguments): New function. (ipa_compute_jump_functions): Complete rewrite. * ipa-prop.h (enum jump_func_type): Make explicit that we depend on IPA_UNKNOWN being zero. Added value IPA_CONST_MEMBER_PTR. (struct ipa_member_ptr_cst): New structure. (union jump_func_value): New field member_cst. * ipa-cp.c (ipcp_lat_is_insertable): New function. (ipcp_lattice_from_jfunc): Produces bottom lattices for unhandled jump function types. (ipcp_print_all_lattices): Slight fprintf rearrangement. (ipcp_print_all_structures): Call ipa_print_all_jump_functions instead of ipcp_print_all_jump_functions. (ipcp_insert_stage): Use ipcp_lat_is_insertable, create replace maps only for replacable scalars. * doc/invoke.texi (Optimize options): Add description of -findirect-inlining. * common.opt (flag_indirect_inlining): New flag. * opts.c (decode_options): Set flag_indirect_inlining when optimize >= 3. * ipa-inline.c: Include ipa-prop.h. (inline_indirect_intraprocedural_analysis): New function. (inline_generate_summary): Allocate parameter and argument info structures, call inline_indirect_intraprocedural_analysis on each node when doing indirect inlining and deallocate indirect inlining data structures in the end. * ipa-prop.c (ipa_create_param_decls_array): Return if already done. (free_all_ipa_structures_after_iinln): New function. (free_all_ipa_structures_after_ipa_cp): Checks whether iinln will be done. * Makefile.in (ipa-inline.o): Added $(IPA_PROP_H) to dependencies. * cgraphbuild.c (compute_call_stmt_bb_frequency): New function. (build_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. (rebuild_cgraph_edges): Call compute_call_stmt_bb_frequency instead of computing the frequency separately. * ipa-cp.c (ipcp_print_all_structures): Replace a call to ipa_print_all_param_modified with a call to ipa_print_all_param_flags. * ipa-prop.c (ipa_get_member_ptr_load_param): New function. (ipa_get_stmt_member_ptr_load_param): New function. (ipa_is_ssa_with_stmt_def): New function. (ipa_note_param_call): New function. (ipa_analyze_call_uses): New function. (ipa_analyze_stmt_uses): New function. (ipa_analyze_params_uses): New function. (ipa_free_node_params_substructures): Also free the param_calls linked list. (ipa_node_duplication_hook): Also duplicate the param_calls linked list. (ipa_print_node_param_flags): New function. (ipa_print_all_params_modified): Renamed to ipa_print_all_param_flags. (ipa_print_all_param_flags): Calls ipa_print_node_param_flags. * ipa-prop.h (struct ipa_param_flags): New field called. (struct ipa_param_call_note): New structure. (struct ipa_node_params): New fields param_calls and uses_analysis_done. (ipa_is_ith_param_called): New function. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_analyze_params_uses and dump parameter flags. * ipa-inline.c (cgraph_decide_recursive_inlining): Call ipa_propagate_indirect_call_infos if performing indirect inlining, pass a new parameter new_edges to it. (add_new_edges_to_heap): New fucntion. (cgraph_decide_inlining_of_small_functions): New vector new_indirect_edges for newly found indirect edges , call ipa_propagate_indirect_call_infos after inlining. (cgraph_decide_inlining): Call ipa_propagate_indirect_call_infos after inlining if performing indirect inlining. Call free_all_ipa_structures_after_iinln when doing so too. (inline_generate_summary): Do not call free_all_ipa_structures_after_iinln here. * ipa-prop.c (update_jump_functions_after_inlining): New function. (print_edge_addition_message): New function. (update_call_notes_after_inlining): New function. (propagate_info_to_inlined_callees): New function. (ipa_propagate_indirect_call_infos): New function. * ipa-prop.h: Include cgraph.h (struct ipa_param_call_note): Fields reordered, new field processed. * cgraph.h (cgraph_edge): Shrink loop_nest field to 31 bits, add a new flag indirect_call. * cgraphunit.c (verify_cgraph_node): Allow indirect edges not to have rediscovered call statements. * cgraph.c (cgraph_create_edge): Initialize indirect_call to zero. (dump_cgraph_node): Dump also the indirect_call flag. (cgraph_clone_edge): Copy also the indirect_call flag. * tree-inline.c (copy_bb): Do not check for fndecls from call expressions, check for edge availability when moving clones. (get_indirect_callee_fndecl): New function. (expand_call_inline): If callee declaration is not apprent from the statement, try calling get_indirect_callee_fndecl. Do not issue warnings or call sorry when not inlinings an indirect edge. * Makefile.in (IPA_PROP_H): Added $(CGRAPH_H) to dependencies. * ipa-prop.c (ipa_print_node_param_flags): Make the dump format a bit more frandly to matching. * testsuite/g++.dg/ipa/iinline-1.C: New testcase. * testsuite/gcc.dg/ipa/iinline-1.c: New testcase. * testsuite/gcc.dg/ipa/modif-1.c: New testcase. From-SVN: r138092
2008-07-23 21:45:45 +02:00
fprintf (f, "type is BOTTOM\n");
}
}
}
/* Return true if ipcp algorithms would allow cloning NODE. */
static bool
ipcp_versionable_function_p (struct cgraph_node *node)
{
tree decl = node->decl;
basic_block bb;
/* There are a number of generic reasons functions cannot be versioned. */
if (!tree_versionable_function_p (decl))
return false;
/* Removing arguments doesn't work if the function takes varargs. */
if (DECL_STRUCT_FUNCTION (decl)->stdarg)
return false;
/* Removing arguments doesn't work if we use __builtin_apply_args. */
FOR_EACH_BB_FN (bb, DECL_STRUCT_FUNCTION (decl))
{
gimple_stmt_iterator gsi;
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
const_gimple stmt = gsi_stmt (gsi);
tree t;
if (!is_gimple_call (stmt))
continue;
t = gimple_call_fndecl (stmt);
if (t == NULL_TREE)
continue;
if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
&& DECL_FUNCTION_CODE (t) == BUILT_IN_APPLY_ARGS)
return false;
}
}
return true;
}
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
/* Return true if this NODE is viable candidate for cloning. */
static bool
ipcp_cloning_candidate_p (struct cgraph_node *node)
{
int n_calls = 0;
int n_hot_calls = 0;
gcov_type direct_call_sum = 0;
struct cgraph_edge *e;
/* We never clone functions that are not visible from outside.
FIXME: in future we should clone such functions when they are called with
different constants, but current ipcp implementation is not good on this.
*/
if (!node->needed || !node->analyzed)
return false;
if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; body is overwrittable.\n",
cgraph_node_name (node));
return false;
}
if (!ipcp_versionable_function_p (node))
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; body is not versionable.\n",
cgraph_node_name (node));
return false;
}
for (e = node->callers; e; e = e->next_caller)
{
direct_call_sum += e->count;
n_calls ++;
if (cgraph_maybe_hot_edge_p (e))
n_hot_calls ++;
}
if (!n_calls)
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; no direct calls.\n",
cgraph_node_name (node));
return false;
}
cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.h (struct inline_summary): New filed self_wize, size_inlining_benefit, self_time and time_inlining_benefit. (struct cgraph_global_info): Replace insns by time ans size fields. * ipa-cp (ipcp_cloning_candidate_p): Base estimate on size (ipcp_estimate_growth, ipcp_insert_stage): Likewise. (ipcp_update_callgraph): Do not touch function bodies. * ipa-inline.c: Include except.h (MAX_TIME): New constant. (overall_insns): Remove. (leaf_node_p): New. (overall_size, max_benefit): New static variables. (cgraph_estimate_time_after_inlining): New function. (cgraph_estimate_size_after_inlining): Rewrite using benefits. (cgraph_clone_inlined_nodes): Update size. (cgraph_mark_inline_edge): Update size. (cgraph_estimate_growth): Use size info. (cgraph_check_inline_limits): Check size. (cgraph_default_inline_p): Likewise. (cgraph_edge_badness): Compute badness based on benefit and size cost. (cgraph_decide_recursive_inlining): Check size. (cgraph_decide_inlining_of_small_function): Update size; dump sizes and times. (cgraph_decide_inlining): Likewise. (cgraph_decide_inlining_incrementally): Likewise; honor PARAM_EARLY_INLINING_INSNS. (likely_eliminated_by_inlining_p): New predicate. (estimate_function_body_sizes): New function. (compute_inline_parameters): Use it. * except.c (must_not_throw_labels): New function. * except.h (must_not_throw_labels): Declare. * tree-inline.c (init_inline_once): Kill inlining_weigths * tree-ssa-structalias.c: Avoid uninitialized warning. * params.def (PARAM_MAX_INLINE_INSNS_SINGLE): Reduce to 300. (PARAM_MAX_INLINE_INSNS_AUTO): Reduce to 60. (PARAM_INLINE_CALL_COST): Remove. (PARAM_EARLY_INLINING_INSNS): New. From-SVN: r147852
2009-05-25 23:59:24 +02:00
if (node->local.inline_summary.self_size < n_calls)
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
{
if (dump_file)
fprintf (dump_file, "Considering %s for cloning; code would shrink.\n",
cgraph_node_name (node));
return true;
}
if (!flag_ipa_cp_clone)
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; -fipa-cp-clone disabled.\n",
cgraph_node_name (node));
return false;
}
if (!optimize_function_for_speed_p (DECL_STRUCT_FUNCTION (node->decl)))
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; optimizing it for size.\n",
cgraph_node_name (node));
return false;
}
/* When profile is available and function is hot, propagate into it even if
calls seems cold; constant propagation can improve function's speed
significandly. */
if (max_count)
{
if (direct_call_sum > node->count * 90 / 100)
{
if (dump_file)
fprintf (dump_file, "Considering %s for cloning; usually called directly.\n",
cgraph_node_name (node));
return true;
}
}
if (!n_hot_calls)
{
if (dump_file)
fprintf (dump_file, "Not considering %s for cloning; no hot calls.\n",
cgraph_node_name (node));
return false;
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
}
if (dump_file)
fprintf (dump_file, "Considering %s for cloning.\n",
cgraph_node_name (node));
return true;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Initialize ipcp_lattices array. The lattices corresponding to supported
types (integers, real types and Fortran constants defined as const_decls)
are initialized to IPA_TOP, the rest of them to IPA_BOTTOM. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_initialize_node_lattices (struct cgraph_node *node)
{
int i;
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipa_node_params *info = IPA_NODE_REF (node);
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
enum ipa_lattice_type type;
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
if (ipa_is_called_with_var_arguments (info))
type = IPA_BOTTOM;
else if (!node->needed)
type = IPA_TOP;
/* When cloning is allowed, we can assume that externally visible functions
are not called. We will compensate this by cloning later. */
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
else if (ipcp_cloning_candidate_p (node))
type = IPA_TOP, n_cloning_candidates ++;
else
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
type = IPA_BOTTOM;
for (i = 0; i < ipa_get_param_count (info) ; i++)
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
ipcp_get_lattice (info, i)->type = type;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* build INTEGER_CST tree with type TREE_TYPE and value according to LAT.
Return the tree. */
static tree
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
build_const_val (struct ipcp_lattice *lat, tree tree_type)
{
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
tree val;
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
gcc_assert (ipcp_lat_is_const (lat));
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
val = lat->constant;
if (!useless_type_conversion_p (tree_type, TREE_TYPE (val)))
{
if (fold_convertible_p (tree_type, val))
return fold_build1 (NOP_EXPR, tree_type, val);
else
return fold_build1 (VIEW_CONVERT_EXPR, tree_type, val);
}
return val;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Compute the proper scale for NODE. It is the ratio between the number of
direct calls (represented on the incoming cgraph_edges) and sum of all
invocations of NODE (represented as count in cgraph_node). */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_compute_node_scale (struct cgraph_node *node)
{
gcov_type sum;
struct cgraph_edge *cs;
sum = 0;
/* Compute sum of all counts of callers. */
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
sum += cs->count;
if (node->count == 0)
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_set_node_scale (node, 0);
else
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_set_node_scale (node, sum * REG_BR_PROB_BASE / node->count);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Initialization and computation of IPCP data structures. This is the initial
intraprocedural analysis of functions, which gathers information to be
propagated later on. */
static void
ipcp_init_stage (void)
{
struct cgraph_node *node;
struct cgraph_edge *cs;
for (node = cgraph_nodes; node; node = node->next)
if (node->analyzed)
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
ipcp_analyze_node (node);
for (node = cgraph_nodes; node; node = node->next)
{
if (!node->analyzed)
continue;
/* building jump functions */
for (cs = node->callees; cs; cs = cs->next_callee)
{
if (!cs->callee->analyzed)
continue;
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
ipa_count_arguments (cs);
if (ipa_get_cs_argument_count (IPA_EDGE_REF (cs))
!= ipa_get_param_count (IPA_NODE_REF (cs->callee)))
{
/* Handle cases of functions with
a variable number of parameters. */
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee));
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
if (flag_indirect_inlining)
ipa_compute_jump_functions (cs);
}
else
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
ipa_compute_jump_functions (cs);
}
}
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return true if there are some formal parameters whose value is IPA_TOP (in
the whole compilation unit). Change their values to IPA_BOTTOM, since they
most probably get their values from outside of this compilation unit. */
static bool
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_change_tops_to_bottom (void)
{
int i, count;
struct cgraph_node *node;
bool prop_again;
prop_again = false;
for (node = cgraph_nodes; node; node = node->next)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipa_node_params *info = IPA_NODE_REF (node);
count = ipa_get_param_count (info);
for (i = 0; i < count; i++)
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (lat->type == IPA_TOP)
{
prop_again = true;
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
if (dump_file)
{
fprintf (dump_file, "Forcing param ");
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
print_generic_expr (dump_file, ipa_get_param (info, i), 0);
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
fprintf (dump_file, " of node %s to bottom.\n",
cgraph_node_name (node));
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
lat->type = IPA_BOTTOM;
}
}
}
return prop_again;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Interprocedural analysis. The algorithm propagates constants from the
caller's parameters to the callee's arguments. */
static void
ipcp_propagate_stage (void)
{
int i;
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipcp_lattice inc_lat = { IPA_BOTTOM, NULL };
struct ipcp_lattice new_lat = { IPA_BOTTOM, NULL };
struct ipcp_lattice *dest_lat;
struct cgraph_edge *cs;
struct ipa_jump_func *jump_func;
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
struct ipa_func_list *wl;
int count;
ipa_check_create_node_params ();
ipa_check_create_edge_args ();
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
/* Initialize worklist to contain all functions. */
wl = ipa_init_func_list ();
while (wl)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct cgraph_node *node = ipa_pop_func_from_list (&wl);
struct ipa_node_params *info = IPA_NODE_REF (node);
for (cs = node->callees; cs; cs = cs->next_callee)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipa_node_params *callee_info = IPA_NODE_REF (cs->callee);
struct ipa_edge_args *args = IPA_EDGE_REF (cs);
if (ipa_is_called_with_var_arguments (callee_info))
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
continue;
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
count = ipa_get_cs_argument_count (args);
for (i = 0; i < count; i++)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
jump_func = ipa_get_ith_jump_func (args, i);
ipcp_lattice_from_jfunc (info, &inc_lat, jump_func);
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
dest_lat = ipcp_get_lattice (callee_info, i);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipa_lattice_meet (&new_lat, &inc_lat, dest_lat);
if (ipcp_lattice_changed (&new_lat, dest_lat))
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
dest_lat->type = new_lat.type;
dest_lat->constant = new_lat.constant;
ipa_push_func_to_list (&wl, cs->callee);
}
}
}
}
}
/* Call the constant propagation algorithm and re-call it if necessary
(if there are undetermined values left). */
static void
ipcp_iterate_stage (void)
{
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
struct cgraph_node *node;
n_cloning_candidates = 0;
if (dump_file)
fprintf (dump_file, "\nIPA iterate stage:\n\n");
for (node = cgraph_nodes; node; node = node->next)
{
ipcp_initialize_node_lattices (node);
ipcp_compute_node_scale (node);
}
if (dump_file && (dump_flags & TDF_DETAILS))
{
ipcp_print_all_lattices (dump_file);
ipcp_function_scale_print (dump_file);
}
ipcp_propagate_stage ();
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (ipcp_change_tops_to_bottom ())
/* Some lattices have changed from IPA_TOP to IPA_BOTTOM.
This change should be propagated. */
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
{
gcc_assert (n_cloning_candidates);
ipcp_propagate_stage ();
}
if (dump_file)
{
fprintf (dump_file, "\nIPA lattices after propagation:\n");
ipcp_print_all_lattices (dump_file);
if (dump_flags & TDF_DETAILS)
ipcp_print_profile_data (dump_file);
}
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Check conditions to forbid constant insertion to function described by
NODE. */
static inline bool
ipcp_node_modifiable_p (struct cgraph_node *node)
{
/* Once we will be able to do in-place replacement, we can be more
lax here. */
return ipcp_versionable_function_p (node);
}
/* Print count scale data structures. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_function_scale_print (FILE * f)
{
struct cgraph_node *node;
for (node = cgraph_nodes; node; node = node->next)
{
if (!node->analyzed)
continue;
fprintf (f, "printing scale for %s: ", cgraph_node_name (node));
fprintf (f, "value is " HOST_WIDE_INT_PRINT_DEC
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
" \n", (HOST_WIDE_INT) ipcp_get_node_scale (node));
}
}
/* Print counts of all cgraph nodes. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_func_profile_counts (FILE * f)
{
struct cgraph_node *node;
for (node = cgraph_nodes; node; node = node->next)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
fprintf (f, "function %s: ", cgraph_node_name (node));
fprintf (f, "count is " HOST_WIDE_INT_PRINT_DEC
" \n", (HOST_WIDE_INT) node->count);
}
}
/* Print counts of all cgraph edges. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_call_profile_counts (FILE * f)
{
struct cgraph_node *node;
struct cgraph_edge *cs;
for (node = cgraph_nodes; node; node = node->next)
{
for (cs = node->callees; cs; cs = cs->next_callee)
{
fprintf (f, "%s -> %s ", cgraph_node_name (cs->caller),
cgraph_node_name (cs->callee));
fprintf (f, "count is " HOST_WIDE_INT_PRINT_DEC " \n",
(HOST_WIDE_INT) cs->count);
}
}
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Print profile info for all functions. */
static void
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_profile_data (FILE * f)
{
fprintf (f, "\nNODE COUNTS :\n");
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_func_profile_counts (f);
fprintf (f, "\nCS COUNTS stage:\n");
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_call_profile_counts (f);
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Build and initialize ipa_replace_map struct according to LAT. This struct is
processed by versioning, which operates according to the flags set.
PARM_TREE is the formal parameter found to be constant. LAT represents the
constant. */
static struct ipa_replace_map *
ipcp_create_replace_map (tree parm_tree, struct ipcp_lattice *lat)
{
struct ipa_replace_map *replace_map;
tree const_val;
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
replace_map = GGC_NEW (struct ipa_replace_map);
const_val = build_const_val (lat, TREE_TYPE (parm_tree));
if (dump_file)
{
fprintf (dump_file, " replacing param ");
print_generic_expr (dump_file, parm_tree, 0);
fprintf (dump_file, " with const ");
print_generic_expr (dump_file, const_val, 0);
fprintf (dump_file, "\n");
}
replace_map->old_tree = parm_tree;
replace_map->new_tree = const_val;
replace_map->replace_p = true;
replace_map->ref_p = false;
return replace_map;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Return true if this callsite should be redirected to the original callee
(instead of the cloned one). */
static bool
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_need_redirect_p (struct cgraph_edge *cs)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
struct ipa_node_params *orig_callee_info;
int i, count;
struct ipa_jump_func *jump_func;
struct cgraph_node *node = cs->callee, *orig;
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
if (!n_cloning_candidates)
return false;
if ((orig = ipcp_get_orig_node (node)) != NULL)
node = orig;
if (ipcp_get_orig_node (cs->caller))
return false;
orig_callee_info = IPA_NODE_REF (node);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
count = ipa_get_param_count (orig_callee_info);
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (orig_callee_info, i);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (ipcp_lat_is_const (lat))
{
ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal... 2008-04-30 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_stage): Calls ipa_set_called_with_variable_arg instead of setting number of formal parameters to zero. (ipcp_init_stage): Do not set the number of actual parameters to zero either. (ipcp_propagate_stage): Explicitly skipping all calls to nodes which are called with variable number of arguments. (ipcp_insert_stage): Explicitely skipping all nodes which are called with variable number of arguments. (ipcp_callsite_param_print): Skipps callsites to nodes with varaible number of parameters. * ipa-prop.h (struct ipa_node_params): Added flag called_with_var_arguments (ipa_set_param_count): Added. Changed sole setter to use it. (ipa_get_param_count): Added. All readers of param_count converted to use it instead. (ipa_set_called_with_variable_arg): Added. (ipa_is_called_with_var_arguments): Added. (ipa_get_ith_param): Added. All readers of param_decls converted to use it instead. (ipa_set_cs_argument_count): Added, sole writer to argument_count changed to use it. (ipa_get_cs_argument_count): Added, all readers of argument_count changed to cal it. (ipa_get_ith_jump_func): Added. Accessors of jump values changed to use it. * ipa-prop.h (struct ipcp_formal): Renamed to ipcp_lattice (struct ipcp_lattice): Renamed cval_type to type (struct ipa_node_params): ipcp_cval renamed to ipcp_lattices * ipa-cp.c (ipcp_cval_get_cvalue): Changed return value to tree (ipcp_cval_set_cvalue): Changed type of parameter value to tree (ipcp_insert_stage): Changed the type of variable cvalue to tree (ipcp_replace_map_create): Changed the type of parameter cvalue to tree (build_const_val): Changed the type of parameter cvalue to tree (ipcp_propagate_const): Changed the type of parameter cvalue to tree (ipcp_method_cval_set_cvalue_type): Renamed parameter cval_type1 to type * ipa-prop.h (struct ipcp_formal): Replaced cvalue with tree called constant * ipa-prop.c (ipa_methodlist_init): Renamed to ipa_init_func_list (ipa_methodlist_not_empty): Removed, the sole user now checks directly (ipa_add_method): Renamed to ipa_push_func_to_list (ipa_remove_method): Renamed to ipa_pop_func_from_list (ipa_callsite_param_count): Removed. (ipa_callsite_param_count_set): Removed. (ipa_callsite_param): Removed. (ipa_callsite_callee): Removed. (ipa_callsite_compute_param): Renamed to ipa_compute_jump_functions (ipa_callsite_compute_count): Renamed to ipa_count_arguments (ipa_method_formal_count): Removed. (ipa_method_formal_count_set): Removed. (ipa_method_get_tree): Removed. (ipa_method_tree_map_create): Removed. (ipa_method_compute_tree_map): Renamed to ipa_create_param_decls_array (ipa_create_param_decls_array): Creates the array itself (ipa_create_param_decls_array): Temporary variable info instead of a few dereferences. (ipa_method_formal_compute_count): Renamed to ipa_count_formal_params (ipa_method_compute_modify): Renamed to ipa_detect_param_modifications (get_type): Removed. (ipa_jf_get_info_type): Removed. (ipa_node_create): Renamed to ipa_create_node_params (ipa_free): Renamed to ipa_free_all_node_params (ipa_nodes_create): Renamed to ipa_create_all_node_params (ipa_edges_create): Renamed to ipa_create_all_edge_args (ipa_edges_free): Renamed to ipa_free_all_edge_args (ipa_nodes_free): Integrated into ipa_free_all_node_params and removed (ipa_free_all_node_params): Deallocation to jump_functions moved to ipa_free_all_edge_args (ipa_method_tree_print): Renamed to ipa_print_all_tree_maps (ipa_method_modify_print): Renamed to ipa_print_all_params_modified (ipa_create_methodlist_node): Removed. (ipa_methodlist_method): Removed. (ipa_methodlist_method_set): Removed. (ipa_methodlist_next_method): Removed. (ipa_methodlist_next_method_set): Removed. (ipa_method_is_modified): Removed. (ipa_method_modify_create): Removed. (ipa_method_modify_init): Temporary variable info instead of a few dereferences. (ipa_detect_param_modifications): Temporary variable info instead of a few dereferences. (ipa_compute_jump_functions): Temporary variable info instead of a few dereferences. (ipa_method_modify_set): Removed. (ipa_method_tree_map): Renamed to ipa_get_param_decl_index (ipa_get_param_decl_index): Now accepts struct ipa_node_params rather than craph_node as the first parameter. (ipa_method_modify_stmt): Renamed to ipa_check_stmt_modifications (ipa_method_modify_init): Removed. (ipa_compute_jump_functions): Added a temp variable instead of repeatadly dereferencing the cgraph_edge.aux pointer (ipa_callsite_param_set_type): Removed. (ipa_compute_jump_functions): i renamed to index and moved to an inner block (ipa_callsite_param_set_info_type_formal): Removed. (ipa_callsite_param_set_info_type): Removed. (ipa_callsite_param_map_create): Removed. (ipa_callsite_tree): Removed. (ipa_callsite_caller): Removed. (ipa_pop_func_from_list): return_method removed to return_func * ipa-prop.h (enum cvalue_type): Renamed to ipa_lattice_type, prefixed all values with IPA_. Changed all users. (enum jump_func_type): Rnamed UNKNOWN_IPATYPE to IPA_UNKNOWN, CONST_IPATYPE to IPA_CONST, CONST_IPATYPE_REF to IPA_CONST_REF and FORMAL_IPATYPE IPA_PASS_THROUGH. (union parameter_info): Renamed to jump_func_value. (union jump_func_value): Renamed value to constant (struct ipa_jump_func): Renamed info_type to value (struct ipa_node): Renamed to ipa_node_params (struct ipa_node_params): Renamed ipa_arg_num to param_count (struct ipa_node_params): Renamed ipa_param_tree to param_decls (struct ipa_node_params): Renamed ipa_mod to modified_flags (struct ipa_edge): Renamed to ipa_edge_args (struct ipa_edge_args): Renamed ipa_param_num to argument_count (struct ipa_edge_args): Renamed ipa_param_map to jump_functions (struct ipa_methodlist): Renamed to ipa_func_list (struct ipa_func_list): method_p renamed to node, next_method renamed to next (ipa_methodlist_p): Removed, switched all users to struct pointer (IS_VALID_TREE_MAP_INDEX): Renamed to IS_VALID_JUMP_FUNC_INDEX From-SVN: r134818
2008-04-30 12:01:59 +02:00
jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
if (jump_func->type != IPA_JF_CONST)
return true;
}
}
return false;
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Fix the callsites and the call graph after function cloning was done. */
static void
ipcp_update_callgraph (void)
{
struct cgraph_node *node;
for (node = cgraph_nodes; node; node = node->next)
if (node->analyzed && ipcp_node_is_clone (node))
{
bitmap args_to_skip = BITMAP_ALLOC (NULL);
struct cgraph_node *orig_node = ipcp_get_orig_node (node);
struct ipa_node_params *info = IPA_NODE_REF (orig_node);
int i, count = ipa_get_param_count (info);
struct cgraph_edge *cs, *next;
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
tree parm_tree = ipa_get_param (info, i);
/* We can proactively remove obviously unused arguments. */
if (is_gimple_reg (parm_tree)
&& !gimple_default_def (DECL_STRUCT_FUNCTION (orig_node->decl),
parm_tree))
{
bitmap_set_bit (args_to_skip, i);
continue;
}
if (lat->type == IPA_CONST_VALUE)
bitmap_set_bit (args_to_skip, i);
}
for (cs = node->callers; cs; cs = next)
{
next = cs->next_caller;
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
if (!ipcp_node_is_clone (cs->caller) && ipcp_need_redirect_p (cs))
cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.h (struct inline_summary): New filed self_wize, size_inlining_benefit, self_time and time_inlining_benefit. (struct cgraph_global_info): Replace insns by time ans size fields. * ipa-cp (ipcp_cloning_candidate_p): Base estimate on size (ipcp_estimate_growth, ipcp_insert_stage): Likewise. (ipcp_update_callgraph): Do not touch function bodies. * ipa-inline.c: Include except.h (MAX_TIME): New constant. (overall_insns): Remove. (leaf_node_p): New. (overall_size, max_benefit): New static variables. (cgraph_estimate_time_after_inlining): New function. (cgraph_estimate_size_after_inlining): Rewrite using benefits. (cgraph_clone_inlined_nodes): Update size. (cgraph_mark_inline_edge): Update size. (cgraph_estimate_growth): Use size info. (cgraph_check_inline_limits): Check size. (cgraph_default_inline_p): Likewise. (cgraph_edge_badness): Compute badness based on benefit and size cost. (cgraph_decide_recursive_inlining): Check size. (cgraph_decide_inlining_of_small_function): Update size; dump sizes and times. (cgraph_decide_inlining): Likewise. (cgraph_decide_inlining_incrementally): Likewise; honor PARAM_EARLY_INLINING_INSNS. (likely_eliminated_by_inlining_p): New predicate. (estimate_function_body_sizes): New function. (compute_inline_parameters): Use it. * except.c (must_not_throw_labels): New function. * except.h (must_not_throw_labels): Declare. * tree-inline.c (init_inline_once): Kill inlining_weigths * tree-ssa-structalias.c: Avoid uninitialized warning. * params.def (PARAM_MAX_INLINE_INSNS_SINGLE): Reduce to 300. (PARAM_MAX_INLINE_INSNS_AUTO): Reduce to 60. (PARAM_INLINE_CALL_COST): Remove. (PARAM_EARLY_INLINING_INSNS): New. From-SVN: r147852
2009-05-25 23:59:24 +02:00
cgraph_redirect_edge_callee (cs, orig_node);
}
}
}
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
/* Update profiling info for versioned functions and the functions they were
versioned from. */
static void
ipcp_update_profiling (void)
{
struct cgraph_node *node, *orig_node;
gcov_type scale, scale_complement;
struct cgraph_edge *cs;
for (node = cgraph_nodes; node; node = node->next)
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
if (ipcp_node_is_clone (node))
{
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
orig_node = ipcp_get_orig_node (node);
scale = ipcp_get_node_scale (orig_node);
node->count = orig_node->count * scale / REG_BR_PROB_BASE;
scale_complement = REG_BR_PROB_BASE - scale;
orig_node->count =
orig_node->count * scale_complement / REG_BR_PROB_BASE;
for (cs = node->callees; cs; cs = cs->next_callee)
cs->count = cs->count * scale / REG_BR_PROB_BASE;
for (cs = orig_node->callees; cs; cs = cs->next_callee)
cs->count = cs->count * scale_complement / REG_BR_PROB_BASE;
}
}
}
/* If NODE was cloned, how much would program grow? */
static long
ipcp_estimate_growth (struct cgraph_node *node)
{
struct cgraph_edge *cs;
int redirectable_node_callers = 0;
int removable_args = 0;
bool need_original = node->needed;
struct ipa_node_params *info;
int i, count;
int growth;
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
if (cs->caller == node || !ipcp_need_redirect_p (cs))
redirectable_node_callers++;
else
need_original = true;
/* If we will be able to fully replace orignal node, we never increase
program size. */
if (!need_original)
return 0;
info = IPA_NODE_REF (node);
count = ipa_get_param_count (info);
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
tree parm_tree = ipa_get_param (info, i);
/* We can proactively remove obviously unused arguments. */
if (is_gimple_reg (parm_tree)
&& !gimple_default_def (DECL_STRUCT_FUNCTION (node->decl),
parm_tree))
removable_args++;
if (lat->type == IPA_CONST_VALUE)
removable_args++;
}
/* We make just very simple estimate of savings for removal of operand from
call site. Precise cost is dificult to get, as our size metric counts
constants and moves as free. Generally we are looking for cases that
small function is called very many times. */
cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.h (struct inline_summary): New filed self_wize, size_inlining_benefit, self_time and time_inlining_benefit. (struct cgraph_global_info): Replace insns by time ans size fields. * ipa-cp (ipcp_cloning_candidate_p): Base estimate on size (ipcp_estimate_growth, ipcp_insert_stage): Likewise. (ipcp_update_callgraph): Do not touch function bodies. * ipa-inline.c: Include except.h (MAX_TIME): New constant. (overall_insns): Remove. (leaf_node_p): New. (overall_size, max_benefit): New static variables. (cgraph_estimate_time_after_inlining): New function. (cgraph_estimate_size_after_inlining): Rewrite using benefits. (cgraph_clone_inlined_nodes): Update size. (cgraph_mark_inline_edge): Update size. (cgraph_estimate_growth): Use size info. (cgraph_check_inline_limits): Check size. (cgraph_default_inline_p): Likewise. (cgraph_edge_badness): Compute badness based on benefit and size cost. (cgraph_decide_recursive_inlining): Check size. (cgraph_decide_inlining_of_small_function): Update size; dump sizes and times. (cgraph_decide_inlining): Likewise. (cgraph_decide_inlining_incrementally): Likewise; honor PARAM_EARLY_INLINING_INSNS. (likely_eliminated_by_inlining_p): New predicate. (estimate_function_body_sizes): New function. (compute_inline_parameters): Use it. * except.c (must_not_throw_labels): New function. * except.h (must_not_throw_labels): Declare. * tree-inline.c (init_inline_once): Kill inlining_weigths * tree-ssa-structalias.c: Avoid uninitialized warning. * params.def (PARAM_MAX_INLINE_INSNS_SINGLE): Reduce to 300. (PARAM_MAX_INLINE_INSNS_AUTO): Reduce to 60. (PARAM_INLINE_CALL_COST): Remove. (PARAM_EARLY_INLINING_INSNS): New. From-SVN: r147852
2009-05-25 23:59:24 +02:00
growth = node->local.inline_summary.self_size
- removable_args * redirectable_node_callers;
if (growth < 0)
return 0;
return growth;
}
/* Estimate cost of cloning NODE. */
static long
ipcp_estimate_cloning_cost (struct cgraph_node *node)
{
int freq_sum = 1;
gcov_type count_sum = 1;
struct cgraph_edge *e;
int cost;
cost = ipcp_estimate_growth (node) * 1000;
if (!cost)
{
if (dump_file)
fprintf (dump_file, "Versioning of %s will save code size\n",
cgraph_node_name (node));
return 0;
}
for (e = node->callers; e; e = e->next_caller)
if (!bitmap_bit_p (dead_nodes, e->caller->uid)
&& !ipcp_need_redirect_p (e))
{
count_sum += e->count;
freq_sum += e->frequency + 1;
}
if (max_count)
cost /= count_sum * 1000 / max_count + 1;
else
cost /= freq_sum * 1000 / REG_BR_PROB_BASE + 1;
if (dump_file)
fprintf (dump_file, "Cost of versioning %s is %i, (size: %i, freq: %i)\n",
cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.h (struct inline_summary): New filed self_wize, size_inlining_benefit, self_time and time_inlining_benefit. (struct cgraph_global_info): Replace insns by time ans size fields. * ipa-cp (ipcp_cloning_candidate_p): Base estimate on size (ipcp_estimate_growth, ipcp_insert_stage): Likewise. (ipcp_update_callgraph): Do not touch function bodies. * ipa-inline.c: Include except.h (MAX_TIME): New constant. (overall_insns): Remove. (leaf_node_p): New. (overall_size, max_benefit): New static variables. (cgraph_estimate_time_after_inlining): New function. (cgraph_estimate_size_after_inlining): Rewrite using benefits. (cgraph_clone_inlined_nodes): Update size. (cgraph_mark_inline_edge): Update size. (cgraph_estimate_growth): Use size info. (cgraph_check_inline_limits): Check size. (cgraph_default_inline_p): Likewise. (cgraph_edge_badness): Compute badness based on benefit and size cost. (cgraph_decide_recursive_inlining): Check size. (cgraph_decide_inlining_of_small_function): Update size; dump sizes and times. (cgraph_decide_inlining): Likewise. (cgraph_decide_inlining_incrementally): Likewise; honor PARAM_EARLY_INLINING_INSNS. (likely_eliminated_by_inlining_p): New predicate. (estimate_function_body_sizes): New function. (compute_inline_parameters): Use it. * except.c (must_not_throw_labels): New function. * except.h (must_not_throw_labels): Declare. * tree-inline.c (init_inline_once): Kill inlining_weigths * tree-ssa-structalias.c: Avoid uninitialized warning. * params.def (PARAM_MAX_INLINE_INSNS_SINGLE): Reduce to 300. (PARAM_MAX_INLINE_INSNS_AUTO): Reduce to 60. (PARAM_INLINE_CALL_COST): Remove. (PARAM_EARLY_INLINING_INSNS): New. From-SVN: r147852
2009-05-25 23:59:24 +02:00
cgraph_node_name (node), cost, node->local.inline_summary.self_size,
freq_sum);
return cost + 1;
}
/* Return number of live constant parameters. */
static int
ipcp_const_param_count (struct cgraph_node *node)
{
int const_param = 0;
struct ipa_node_params *info = IPA_NODE_REF (node);
int count = ipa_get_param_count (info);
int i;
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
tree parm_tree = ipa_get_param (info, i);
if (ipcp_lat_is_insertable (lat)
/* Do not count obviously unused arguments. */
&& (!is_gimple_reg (parm_tree)
|| gimple_default_def (DECL_STRUCT_FUNCTION (node->decl),
parm_tree)))
const_param++;
}
return const_param;
}
/* Propagate the constant parameters found by ipcp_iterate_stage()
to the function's code. */
static void
ipcp_insert_stage (void)
{
struct cgraph_node *node, *node1 = NULL;
int i;
VEC (cgraph_edge_p, heap) * redirect_callers;
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
VEC (ipa_replace_map_p,gc)* replace_trees;
int node_callers, count;
tree parm_tree;
struct ipa_replace_map *replace_param;
fibheap_t heap;
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
long overall_size = 0, new_size = 0;
long max_new_size;
ipa_check_create_node_params ();
ipa_check_create_edge_args ();
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
if (dump_file)
fprintf (dump_file, "\nIPA insert stage:\n\n");
dead_nodes = BITMAP_ALLOC (NULL);
for (node = cgraph_nodes; node; node = node->next)
if (node->analyzed)
{
if (node->count > max_count)
max_count = node->count;
cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.c (dump_cgraph_node): Dump size/time/benefit. * cgraph.h (struct inline_summary): New filed self_wize, size_inlining_benefit, self_time and time_inlining_benefit. (struct cgraph_global_info): Replace insns by time ans size fields. * ipa-cp (ipcp_cloning_candidate_p): Base estimate on size (ipcp_estimate_growth, ipcp_insert_stage): Likewise. (ipcp_update_callgraph): Do not touch function bodies. * ipa-inline.c: Include except.h (MAX_TIME): New constant. (overall_insns): Remove. (leaf_node_p): New. (overall_size, max_benefit): New static variables. (cgraph_estimate_time_after_inlining): New function. (cgraph_estimate_size_after_inlining): Rewrite using benefits. (cgraph_clone_inlined_nodes): Update size. (cgraph_mark_inline_edge): Update size. (cgraph_estimate_growth): Use size info. (cgraph_check_inline_limits): Check size. (cgraph_default_inline_p): Likewise. (cgraph_edge_badness): Compute badness based on benefit and size cost. (cgraph_decide_recursive_inlining): Check size. (cgraph_decide_inlining_of_small_function): Update size; dump sizes and times. (cgraph_decide_inlining): Likewise. (cgraph_decide_inlining_incrementally): Likewise; honor PARAM_EARLY_INLINING_INSNS. (likely_eliminated_by_inlining_p): New predicate. (estimate_function_body_sizes): New function. (compute_inline_parameters): Use it. * except.c (must_not_throw_labels): New function. * except.h (must_not_throw_labels): Declare. * tree-inline.c (init_inline_once): Kill inlining_weigths * tree-ssa-structalias.c: Avoid uninitialized warning. * params.def (PARAM_MAX_INLINE_INSNS_SINGLE): Reduce to 300. (PARAM_MAX_INLINE_INSNS_AUTO): Reduce to 60. (PARAM_INLINE_CALL_COST): Remove. (PARAM_EARLY_INLINING_INSNS): New. From-SVN: r147852
2009-05-25 23:59:24 +02:00
overall_size += node->local.inline_summary.self_size;
}
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
max_new_size = overall_size;
if (max_new_size < PARAM_VALUE (PARAM_LARGE_UNIT_INSNS))
max_new_size = PARAM_VALUE (PARAM_LARGE_UNIT_INSNS);
max_new_size = max_new_size * PARAM_VALUE (PARAM_IPCP_UNIT_GROWTH) / 100 + 1;
/* First collect all functions we proved to have constant arguments to heap. */
heap = fibheap_new ();
for (node = cgraph_nodes; node; node = node->next)
{
struct ipa_node_params *info;
/* Propagation of the constant is forbidden in certain conditions. */
if (!node->analyzed || !ipcp_node_modifiable_p (node))
continue;
info = IPA_NODE_REF (node);
if (ipa_is_called_with_var_arguments (info))
continue;
if (ipcp_const_param_count (node))
node->aux = fibheap_insert (heap, ipcp_estimate_cloning_cost (node), node);
}
/* Now clone in priority order until code size growth limits are met or
heap is emptied. */
while (!fibheap_empty (heap))
{
struct ipa_node_params *info;
int growth = 0;
bitmap args_to_skip;
struct cgraph_edge *cs;
node = (struct cgraph_node *)fibheap_extract_min (heap);
node->aux = NULL;
if (dump_file)
fprintf (dump_file, "considering function %s\n",
cgraph_node_name (node));
growth = ipcp_estimate_growth (node);
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
if (new_size + growth > max_new_size)
break;
if (growth
loop-unswitch.c (unswitch_single_loop): Use optimize_loop_for_speed_p. * loop-unswitch.c (unswitch_single_loop): Use optimize_loop_for_speed_p. * tree-ssa-threadupdate.c (mark_threaded_blocks): Use optimize_function_for_size_p. * tracer.c (ignore_bb_p): Use optimize_bb_for_size_p. * postreload-gcse.c (eliminate_partially_redundant_load): Use optimize_bb_for_size_p. * value-prof.c (gimple_divmod_fixed_value_transform, gimple_mod_pow2_value_transform, gimple_mod_subtract_transform, gimple_stringops_transform): Use optimize_bb_for_size_p. * ipa-cp.c (ipcp_insert_stage): Use optimize_function_for_size_p. * final.c (compute_alignments): Use optimize_function_for_size_p. * builtins.c (fold_builtin_cabs): Use optimize_function_for_speed_p. (fold_builtin_strcpy, fold_builtin_fputs): Use optimize_function_for_size_p. * fold-const.c (tree_swap_operands_p): Use optimize_function_for_size_p. * recog.c (relax_delay_slots): Likewise. * tree-ssa-math-opts.c (replace_reciprocal): Use optimize_bb_for_speed_p. (execute_cse_reciprocals): Use optimize_bb_for_size_p. * ipa-inline.c (cgraph_decide_recursive_inlining): Use optimize_function_for_size_p. (cgraph_decide_inlining_of_small_function): Use optimize_function_for_size_p. * global.c (find_reg): Use optimize_function_for_size_p. * opts.c (decode_options): Do not clear flag_tree_ch, flag_inline_functions, flag_unswitch_loops, flag_unroll_loops, flag_unroll_all_loops and flag_prefetch_loop_arrays. Those can work it out from profile. * tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely): Use optimize_loop_for_speed_p. * predict.c (optimize_bb_for_size_p, optimize_bb_for_speed_p): Constify argument. (optimize_loop_nest_for_size_p, optimize_loop_nest_for_speed_p): New. * tree-parloops.c (parallelize_loops): Use optimize_loop_for_size_p. * tree-eh.c (decide_copy_try_finally): Use optimize_function_for_size_p. * local-alloc.c (block_alloc): Pass BB pointer. (find_free_reg): Add BB pointer, use optimize_bb_for_size_p. * gcse.c (gcse_main): Use optimize_function_for_size_p. * loop-unroll.c (decide_unrolling_and_peeling): Use optimize_loop_for_size_p. (decide_peel_completely): Likewise. * tree-vect-analyze.c (vect_mark_for_runtime_alias_test): Use optimize_loop_for_size_p. (vect_enhance_data_refs_alignment): Likewise. * tree-ssa-coalesce.c (coalesce_cost): Add optimize_for_size argument. (coalesce_cost_bb, coalesce_cost_edge, create_outofssa_var_map): Update call. * cfgcleanup.c (outgoing_edges_match): Use optimize_bb_for_speed_p. (try_crossjump_bb): Use optimize_bb_for_size_p. * tree-ssa-loop-prefetch.c (loop_prefetch_arrays): Use optimize_loop_for_speed_p. * bb-reorder.c (find_traces_1_round): Likewise. (copy_bb): Use optimize_bb_for_speed_p. (duplicate_computed_gotos): Likewise. * basic-block.h (optimize_loop_nest_for_size_p, optimize_loop_nest_for_speed_p): New. * stmt.c (expand_case): Use optimize_insn_for_size_p. From-SVN: r139760
2008-08-29 12:35:57 +02:00
&& optimize_function_for_size_p (DECL_STRUCT_FUNCTION (node->decl)))
{
if (dump_file)
fprintf (dump_file, "Not versioning, cold code would grow");
continue;
}
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
new_size += growth;
/* Look if original function becomes dead after clonning. */
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
if (cs->caller == node || ipcp_need_redirect_p (cs))
break;
if (!cs && !node->needed)
bitmap_set_bit (dead_nodes, node->uid);
info = IPA_NODE_REF (node);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
count = ipa_get_param_count (info);
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
replace_trees = VEC_alloc (ipa_replace_map_p, gc, 1);
args_to_skip = BITMAP_GGC_ALLOC ();
for (i = 0; i < count; i++)
{
ipa-prop.h (struct ipa_param_flags): Removed. 2008-09-11 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (struct ipa_param_flags): Removed. (struct ipa_param_descriptor): New structure. (struct ipa_node_params): ipcp_lattices, param_decls and param_flags moved to ipa_param_description. (ipa_get_ith_param): Renamed to ipa_get_param, changed to access descriptors. Renamed all users. (ipa_is_ith_param_modified): Renamed to ipa_is_param_modified, changed to access descriptors. Renamed all users. (ipa_is_ith_param_called): Renamed to ipa_is_param_called, changed to access descriptors. Renamed all users. * ipa-cp.c (ipcp_init_cloned_node): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. (ipcp_analyze_node): Likewise. (ipcp_get_ith_lattice): Renamed to ipcp_get_lattice, changed to access descriptors. Renamed all users. (ipcp_initialize_node_lattices): Remove allocation. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Call ipa_initialize_node_params instead of ipa_count_formal_params and ipa_create_param_decls_array. * ipa-prop.c (ipa_create_param_decls_array): Renamed to ipa_populate_param_decls, made static, added parameter info, renamed mt to node, removed allocation, changed to use descriptors. (ipa_count_formal_params): Made static, added parameter info, renamed mt to node. (ipa_initialize_node_params): New function. (ipa_check_stmt_modifications): Changed to use descriptors. (ipa_detect_param_modifications): Removed allocation, changed to use descriptors. (ipa_note_param_call): Changed to use descriptors. (ipa_analyze_params_uses): Removed allocation. (ipa_free_node_params_substructures): Changed to use descriptors. (ipa_edge_duplication_hook): Use the unused attribute. (ipa_node_duplication_hook): Use the unused attribute, changed to use descriptors, changed to duplicate descriptors. * ipa-inline.c (cgraph_mark_inline_edge): New parameter new_edges, changed all callers. Call ipa_propagate_indirect_call_infos if doing indirect inlining. Made static. (cgraph_decide_inlining): Freeing ipa-prop structures after inlining functions called only once. (cgraph_decide_recursive_inlining): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining_of_small_functions): Don't call ipa_propagate_indirect_call_infos, pass new_edges to cgraph_mark_inline_edge instead. (cgraph_decide_inlining): Don't call ipa_propagate_indirect_call_infos. * ipa-prop.c: Check that vectors are allocated. * ipa-inline.c (cgraph_mark_inline_edge): Returns boolean, true iff a new cgraph edges have been created. (cgraph_decide_inlining): New variable redo_always_inline. Flattening and always_inlining loop until callgraph stabilizes. * ipa-prop.c (update_call_notes_after_inlining): Returns boolean, true iff new cgraph edges have been created. (propagate_info_to_inlined_callees): Likewise. (ipa_propagate_indirect_call_infos): Likewise. From-SVN: r140293
2008-09-11 19:03:23 +02:00
struct ipcp_lattice *lat = ipcp_get_lattice (info, i);
parm_tree = ipa_get_param (info, i);
/* We can proactively remove obviously unused arguments. */
if (is_gimple_reg (parm_tree)
&& !gimple_default_def (DECL_STRUCT_FUNCTION (node->decl),
parm_tree))
{
bitmap_set_bit (args_to_skip, i);
continue;
}
if (lat->type == IPA_CONST_VALUE)
{
replace_param =
ipcp_create_replace_map (parm_tree, lat);
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
VEC_safe_push (ipa_replace_map_p, gc, replace_trees, replace_param);
bitmap_set_bit (args_to_skip, i);
}
}
/* Compute how many callers node has. */
node_callers = 0;
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
node_callers++;
redirect_callers = VEC_alloc (cgraph_edge_p, heap, node_callers);
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
VEC_quick_push (cgraph_edge_p, redirect_callers, cs);
/* Redirecting all the callers of the node to the
new versioned node. */
node1 =
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
cgraph_create_virtual_clone (node, redirect_callers, replace_trees,
args_to_skip);
args_to_skip = NULL;
VEC_free (cgraph_edge_p, heap, redirect_callers);
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
replace_trees = NULL;
if (node1 == NULL)
continue;
if (dump_file)
fprintf (dump_file, "versioned function %s with growth %i, overall %i\n",
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
cgraph_node_name (node), (int)growth, (int)new_size);
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_init_cloned_node (node, node1);
cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. * cgraphbuild.c (compute_call_stmt_bb_frequency): Accept function argument; handle correctly when profile is absent. (build_cgraph_edges): Update. (rebuild_cgraph_edges): Update. * cgraph.c: Do not include varrau.h (cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones): New function (cgraph_update_edges_for_call_stmt_node): New stati cfunction. (cgraph_update_edges_for_call_stmt): Handle clones. (cgraph_remove_node): Handle clone tree. (cgraph_remove_node_and_inline_clones): New function. (dump_cgraph_node): Dump clone tree. (cgraph_clone_node): Handle clone tree. (clone_function_name): Bring here from tree-inline.c (cgraph_create_virtual_clone): New function. * cgraph.h (ipa_replace_map): Move ehre from ipa.h (cgraph_clone_info): New function (strut cgraph_node): Add clone_info and new clone tree pointers. (cgraph_remove_node_and_inline_clones, cgraph_set_call_stmt_including_clones, cgraph_create_edge_including_clones, cgraph_create_virtual_clone): Declare. (cgraph_function_versioning): Use VEC argument. (compute_call_stmt_bb_frequency): Update prototype. (cgraph_materialize_all_clones): New function. * ipa-cp.c (ipcp_update_cloned_node): Remove. (ipcp_create_replace_map): Update to VECtors. (ipcp_update_callgraph): Use virtual clones. (ipcp_update_bb_counts, ipcp_update_edges_counts): Remove. (ipcp_update_profiling): Do not update local profiling. (ipcp_insert_stage): Use VECtors and virtual clones. * cgraphunit.c (verify_cgraph_node): Verify clone tree. (clone_of_p): New function. (cgraph_preserve_function_body_p): Use clone tree. (cgraph_optimize): Materialize clones. (cgraph_function_versioning): Update for VECtors. (save_inline_function_body): Use clone tree. (cgraph_materialize_clone, cgraph_materialize_all_clones): New functions. * ipa-inline.c (cgraph_default_inline_p): Use analyzed flags. * ipa.c: Include gimple.h. (cgraph_remove_unreachable_nodes): Use clone tree. * ipa-prop.c (ipa_note_param_call): Update call of compute_call_stmt_bb_frequency. * ipa-prop.h (ipa_replace_map): Move to cgraph.h. * tree-inline.c: Do not include varray.h; do not include gt-tree-inline.h (copy_bb): Handle updating of clone tree; add new edge when new call appears. (expand_call_inline): Be strict about every call having edge. (clone_fn_id_num, clone_function_name): Move to cgraph.c. (delete_unreachable_blocks_update_callgraph): New function. (tree_function_versioning): Use VECtors; always remove unreachable blocks and fold conditionals. * tree-inline.h: Do not include varray.h (tree_function_versioning): Remove. * Makefile.in (GTFILES): Remove tree-inline.c * passes.c (do_per_function): Do only functions having body. * ipa-struct-reorg.c (do_reorg_1, collect_data_accesses): Handle cone tree. From-SVN: r147294
2009-05-08 21:19:51 +02:00
/* TODO: We can use indirect inlning info to produce new calls. */
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
if (dump_file)
dump_function_to_file (node1->decl, dump_file, dump_flags);
for (cs = node->callees; cs; cs = cs->next_callee)
if (cs->callee->aux)
{
fibheap_delete_node (heap, (fibnode_t) cs->callee->aux);
cs->callee->aux = fibheap_insert (heap,
ipcp_estimate_cloning_cost (cs->callee),
cs->callee);
}
}
while (!fibheap_empty (heap))
{
if (dump_file)
fprintf (dump_file, "skipping function %s\n",
cgraph_node_name (node));
node = (struct cgraph_node *) fibheap_extract_min (heap);
node->aux = NULL;
}
fibheap_delete (heap);
BITMAP_FREE (dead_nodes);
ipcp_update_callgraph ();
ipcp_update_profiling ();
}
/* The IPCP driver. */
static unsigned int
ipcp_driver (void)
{
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
cgraph_remove_unreachable_nodes (true,dump_file);
if (dump_file)
{
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
fprintf (dump_file, "\nIPA structures before propagation:\n");
if (dump_flags & TDF_DETAILS)
ipa_print_all_params (dump_file);
ipa_print_all_jump_functions (dump_file);
}
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
/* 2. Do the interprocedural propagation. */
ipcp_iterate_stage ();
/* 3. Insert the constants found to the functions. */
ipcp_insert_stage ();
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "\nProfiling info after insert stage:\n");
ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. 2008-05-06 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_method_orig_node): Renamed to ipcp_get_orig_node. (ipcp_method_is_cloned): Renamed to ipcp_node_is_clone (ipcp_method_set_orig_node): Removed. (ipcp_cval_get_cvalue_type): Removed. (ipcp_method_get_scale): Renamed to ipcp_get_node_scale. (ipcp_method_set_scale): Renamed to ipcp_set_node_scale. (ipcp_cval_set_cvalue_type): Removed. (ipcp_cval_get_cvalue): Removed. (ipcp_cval_set_cvalue): Removed. (ipcp_type_is_const): Renamed to ipcp_lat_is_const. (ipcp_cval_equal_cvalues): Renamed to ipcp_lats_are_equal (ipcp_lats_are_equal): Changed parameters to two ipcp_lattice's (ipcp_cval_meet): Renamed to ipa_lattice_meet (ipcp_cval_changed): Changed to use ipcp_lat_is_const (ipcp_method_cval): Renamed to ipcp_get_ith_lattice (ipcp_get_ith_lattice): Changed parameters. (ipcp_cval_compute): Renamed to ipcp_lattice_from_jfunc (ipcp_lattice_from_jfunc): Changed parameters. (ipcp_redirect): Local lattice pointer instead of lattice type variable. (ipcp_method_cval_print): Added temporary variable info. (ipcp_redirect): Removed already unused local variable caller. (ipcp_redirect): New temporary variable orig_callee_info (ipcp_redirect): Removed newly unused local variable callee. (ipcp_redirect): Removed (a bit confusing) local variable type. (ipcp_insert_stage): Added local variable info. (ipcp_cval_changed): Renamed to ipcp_lattice_changed, parameters renamed too (ipcp_formal_create): Removed. (ipcp_method_cval_set): Removed. (ipcp_propagate_stage): Renamed lattice variables. (ipcp_method_cval_set_cvalue_type): Removed. (ipcp_method_cval_print): Renamed to ipcp_print_all_lattices (ipcp_print_all_lattices): Changed printed strings to refer to lattices rather than cvals. (ipcp_method_cval_init): Renamed to ipcp_initialize_node_lattices (ipcp_propagate_const): Changed formal parameters. (build_const_val): Changed formal parameters. (ipcp_insert_stage): Removed useless variable cvalue (build_const_val): Changed formal parameters. (ipcp_method_compute_scale): Renamed to ipcp_compute_node_scale (ipcp_after_propagate): Renamed to ipcp_change_tops_to_bottom (ipcp_callsite_param_print): Renamed to ipcp_print_all_jump_functions (ipcp_profile_mt_count_print): Renamed to ipcp_print_func_profile_counts (ipcp_print_func_profile_counts): Changed string from "method" to "function" (ipcp_profile_cs_count_print): Renamed to ipcp_print_call_profile_counts (ipcp_profile_edge_print): Renamed to ipcp_print_edge_profiles (ipcp_profile_bb_print): Renamed to ipcp_print_bb_profiles (ipcp_structures_print): Renamed to ipcp_print_all_structures (ipcp_profile_print): Renamed to ipcp_print_profile_data (ipcp_lat_is_const): Changed parameters and made inline. (ipcp_replace_map_create): Renamed to ipcp_create_replace_map (ipcp_redirect): Renamed to ipcp_need_redirect_p (ipcp_need_redirect_p): Calls ipcp_lat_is_const instead of using the predicate condition directly (ipcp_propagate_stage): Added local variable args. Removed local variable callee. (Both are mere code simplifications.) (ipcp_method_dont_insert_const): Renamed to ipcp_node_not_modifiable_p. (ipcp_node_not_modifiable_p): Made inline. (ipcp_cloned_create): Renamed to ipcp_init_cloned_node (ipcp_propagate_const): Renamed to ipcp_propagate_one_const (ipcp_print_all_lattices): Removed variable cvalue (ipcp_method_scale_print): Renamed to ipcp_function_scale_print Updated comments. From-SVN: r134984
2008-05-06 16:15:18 +02:00
ipcp_print_profile_data (dump_file);
}
/* Free all IPCP structures. */
ipa-cp.c (ipcp_init_cloned_node): Call ipa_check_create_node_params instead of ipa_create_node_params. 2008-07-08 Martin Jambor <mjambor@suse.cz> * ipa-cp.c (ipcp_init_cloned_node): Call ipa_check_create_node_params instead of ipa_create_node_params. (ipcp_driver): Allocate infos with ipa_check_create_node_params and ipa_check_create_edge_args, free them with free_all_ipa_structures_after_ipa_cp, call ipa_register_cgraph_hooks. * ipa-prop.c: Include flags.h and tree-inline.h. (ipa_node_params_vector): New variable. (ipa_edge_args_vector): New variable. (edge_removal_hook_holder): New variable. (node_removal_hook_holder): New variable. (edge_duplication_hook_holder): New variable. (node_duplication_hook_holder): New variable. (ipa_detect_param_modifications): Check for presence of modified flags. (ipa_compute_jump_functions): Check for presence of jump functions. (ipa_free_edge_args_substructures): New function. (ipa_create_node_params): Removed. (ipa_free_all_edge_args): Changed to deallocate the on-the-side vector. (ipa_free_node_params_substructures): New function. (ipa_free_all_node_params): Changed to deallocate the on-the-side vector. (ipa_edge_removal_hook): New function. (ipa_node_removal_hook): New function. (duplicate_array): New function. (ipa_edge_duplication_hook): New function. (ipa_node_duplication_hook): New function. (ipa_register_cgraph_hooks): New function. (ipa_unregister_cgraph_hooks): New function. (free_all_ipa_structures_after_ipa_cp): New function. * ipa-prop.h: Include vec.h. (ipa_node_params_t): New typedef with vector types for it. (ipa_edge_args_t): New typedef with vector types for it. (IPA_NODE_REF): Changed to access an on-the-side vector. (IPA_EDGE_REF): Changed to access an on-the-side vector. (ipa_check_create_node_params): New function. (ipa_check_create_edge_args): New function. * Makefile.in (IPA_PROP_H): New variable for ipa-prop.h. Converted all users. From-SVN: r137620
2008-07-08 15:25:24 +02:00
free_all_ipa_structures_after_ipa_cp ();
if (dump_file)
fprintf (dump_file, "\nIPA constant propagation end\n");
tree-vrp.c (execute_vrp): Return value. 2006-03-02 Daniel Berlin <dberlin@dberlin.org> * gcc/tree-vrp.c (execute_vrp): Return value. * gcc/regrename.c (rest_of_handle_regrename): Ditto. * gcc/tree-into-ssa.c (rewrite_into_ssa): Ditto. * gcc/tree-complex.c (tree_lower_complex): Ditto. (tree_lower_complex_O0): Ditto. * gcc/tracer.c (rest_of_handle_tracer): Ditto. * gcc/postreload-gcse.c (rest_of_handle_gcse2): Ditto. * gcc/postreload.c (rest_of_handle_postreload): Ditto. * gcc/tree-tailcall.c (execute_tail_recursion): Ditto. (execute_tail_calls): Ditto. * gcc/tree-ssa-loop-ch.c (copy_loop_headers): Ditto. * gcc/tree.h (init_function_for_compilation): Ditto. * gcc/ipa-cp.c (ipcp_driver): Ditto. * gcc/tree-scalar-evolution.c (scev_const_prop): Ditto. * gcc/tree-scalar-evolution.h (scev_const_prop): Ditto. * gcc/final.c (compute_alignments): Ditto. (rest_of_handle_final): Ditto. (rest_of_handle_shorten_branches): Ditto. (rest_of_clean_state): Ditto. * gcc/omp-low.c (execute_expand_omp): Ditto. (execute_lower_omp): Ditto. * gcc/tree-ssa-dse.c (tree_ssa_dse): Ditto. * gcc/ipa-reference.c (static_execute): Ditto. * gcc/tree-ssa-uncprop.c (tree_ssa_uncprop): Ditto. * gcc/reorg.c (rest_of_handle_delay_slots): Ditto. (rest_of_handle_machine_reorg): Ditto. * gcc/cgraphunit.c (rebuild_cgraph_edges): Ditto. * gcc/flow.c (recompute_reg_usage): Ditto. (rest_of_handle_remove_death_notes): Ditto. (rest_of_handle_life): Ditto. (rest_of_handle_flow2): Ditto. * gcc/tree-ssa-copyrename.c (rename_ssa_copies): Ditto. * gcc/tree-ssa-ccp.c (do_ssa_ccp): Ditto. (do_ssa_store_ccp): Ditto. (execute_fold_all_builtins): Ditto. * gcc/mode-switching.c (rest_of_handle_mode_switching): Ditto. * gcc/modulo-sched.c (rest_of_handle_sms): Ditto. * gcc/ipa-pure-const.c (static_execute): Ditto. * gcc/cse.c (rest_of_handle_cse): Ditto. (rest_of_handle_cse2): Ditto. * gcc/web.c (rest_of_handle_web): Ditto. * gcc/tree-stdarg.c (execute_optimize_stdarg): Ditto. * gcc/tree-ssa-math-opts.c (execute_cse_reciprocals): Ditto. * gcc/tree-ssa-dom.c (tree_ssa_dominator_optimize): Ditto. * gcc/tree-nrv.c (tree_nrv): Ditto. (execute_return_slot_opt): Ditto. * gcc/tree-ssa-alias.c (compute_may_aliases): Ditto. (create_structure_vars): Ditto. * gcc/loop-init.c (rtl_loop_init): Ditto. (rtl_loop_done): Ditto. (rtl_move_loop_invariants): Ditto. (rtl_unswitch): Ditto. (rtl_unroll_and_peel_loops): Ditto. (rtl_doloop): Ditto. * gcc/gimple-low.c (lower_function_body): Ditto. (mark_used_blocks): Ditto. * gcc/tree-ssa-sink.c (execute_sink_code): Ditto. * gcc/ipa-inline.c (cgraph_decide_inlining): Ditto. (cgraph_early_inlining): Ditto. * gcc/global.c (rest_of_handle_global_alloc): Ditto. * gcc/jump.c (cleanup_barriers): Ditto. (purge_line_number_notes): Ditto. * gcc/ifcvt.c (rest_of_handle_if_conversion): Ditto. (rest_of_handle_if_after_reload): Ditto. * gcc/tree-ssa-loop.c (tree_ssa_loop_init): Ditto. (tree_ssa_loop_im): Ditto. (tree_ssa_loop_unswitch): Ditto. (tree_vectorize): Ditto. (tree_linear_transform): Ditto. (tree_ssa_loop_ivcanon): Ditto. (tree_ssa_empty_loop): Ditto. (tree_ssa_loop_bounds): Ditto. (tree_complete_unroll): Ditto. (tree_ssa_loop_prefetch): Ditto. (tree_ssa_loop_ivopts): Ditto. (tree_ssa_loop_done): Ditto. * gcc/predict.c (tree_estimate_probability): Ditto. * gcc/recog.c (split_all_insns_noflow): Ditto. (rest_of_handle_peephole2): Ditto. (rest_of_handle_split_all_insns): Ditto. * gcc/tree-eh.c (lower_eh_constructs): Ditto. * gcc/regmove.c (rest_of_handle_regmove): Ditto. (rest_of_handle_stack_adjustments): Ditto. * gcc/local-alloc.c (rest_of_handle_local_alloc): Ditto. * gcc/function.c (instantiate_virtual_regs): Ditto. (init_function_for_compilation): Ditto. (rest_of_handle_check_leaf_regs): Ditto. * gcc/gcse.c (rest_of_handle_jump_bypass): Ditto. (rest_of_handle_gcse): Ditto. * gcc/ipa-type-escape.c (type_escape_execute): Ditto. * gcc/alias.c (rest_of_handle_cfg): Ditto. * gcc/tree-if-conv.c (main_tree_if_conversion): Ditto. * gcc/profile.c (rest_of_handle_branch_prob): Ditto. * gcc/tree-ssa-phiopt.c (tree_ssa_phiopt): Ditto. * gcc/rtl-factoring.c (rest_of_rtl_seqabstr): Ditto. * gcc/bt-load.c (rest_of_handle_branch_target_load_optimize): Ditto * gcc/tree-dfa.c (find_referenced_vars): Ditto. * gcc/except.c (set_nothrow_function_flags): Ditto. (convert_to_eh_region_ranges): Ditto. (rest_of_handle_eh): Ditto. * gcc/emit-rtl.c (unshare_all_rtl): Ditto. (remove_unnecessary_notes): Ditto. * gcc/except.h (set_nothrow_function_flags): Ditto. (convert_to_eh_region_ranges): Ditto. * gcc/cfgexpand.c (tree_expand_cfg): Ditto. * gcc/tree-cfgcleanup.c (merge_phi_nodes): Ditto. * gcc/tree-ssa-pre.c (do_pre): Ditto. (execute_fre): Ditto. * gcc/cfgcleanup.c (rest_of_handle_jump): Ditto. (rest_of_handle_jump2): Ditto. * gcc/tree-sra.c (tree_sra): Ditto. * gcc/tree-mudflap.c (execute_mudflap_function_ops): Ditto. (execute_mudflap_function_decls): Ditto. * gcc/tree-ssa-copy.c (do_copy_prop): Ditto. (do_store_copy_prop): Ditto. * gcc/ipa-prop.h (ipcp_driver): Ditto. * gcc/cfglayout.c (insn_locators_initialize): Ditto. * gcc/tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_vars): Ditto. * gcc/cfglayout.h (insn_locators_initialize): Ditto. * gcc/tree-ssa-dce.c (tree_ssa_dce): Ditto. * gcc/tree-ssa.c (execute_early_warn_uninitialized): Ditto. (execute_late_warn_uninitialized): Ditto. * gcc/rtl.h (cleanup_barriers): Ditto. (split_all_insns_noflow): Ditto. (purge_line_number_notes): Ditto. (unshare_all_rtl): Ditto. (remove_unnecessary_notes): Ditto. (recompute_reg_usage): Ditto. (variable_tracking_main): Ditto. * gcc/integrate.c (emit_initial_value_sets): Ditto. * gcc/integrate.h (emit_initial_value_sets): Ditto. * gcc/tree-optimize.c (execute_free_datastructures): Ditto (execute_free_cfg_annotations): Ditto. (execute_fixup_cfg): Ditto. (execute_cleanup_cfg_pre_ipa): Ditto. (execute_cleanup_cfg_post_optimizing): Ditto. (execute_init_datastructures): Ditto. * gcc/tree-object-size.c (compute_object_sizes): Ditto. * gcc/combine.c (rest_of_handle_combine): Ditto. * gcc/tree-outof-ssa.c (rewrite_out_of_ssa): Ditto. * gcc/bb-reorder.c (duplicate_computed_gotos): Ditto. (rest_of_handle_reorder_blocks): Ditto. (rest_of_handle_partition_blocks): Ditto. * gcc/var-tracking.c (variable_tracking_main): Ditto. * gcc/tree-profile.c (tree_profiling): Ditto. * gcc/tree-vect-generic.c (expand_vector_operations): Ditto. * gcc/reg-stack.c (rest_of_handle_stack_regs): Ditto. * gcc/sched-rgn.c (rest_of_handle_sched): Ditto. (rest_of_handle_sched2): Ditto. * gcc/basic-block.h (free_bb_insn): Ditto. * gcc/tree-ssa-structalias.c (ipa_pta_execute): Ditto. * gcc/tree-cfg.c (execute_build_cfg): Ditto. (remove_useless_stmts): Ditto. (split_critical_edges): Ditto. (execute_warn_function_return): Ditto. (execute_warn_function_noreturn): Ditto. * gcc/tree-ssa-reassoc.c (execute_reassoc): Ditto. * gcc/cfgrtl.c (free_bb_for_insn): Ditto. * gcc/passes.c (execute_one_pass): Run additional todos returned by execute function. * gcc/tree-pass.h (struct tree_opt_pass): Make execute return a value. From-SVN: r111643
2006-03-02 20:00:11 +01:00
return 0;
}
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
/* Note function body size. */
static void
ipcp_generate_summary (void)
{
if (dump_file)
fprintf (dump_file, "\nIPA constant propagation start:\n");
ipa_check_create_node_params ();
ipa_check_create_edge_args ();
ipa_register_cgraph_hooks ();
/* 1. Call the init stage to initialize
the ipa_node_params and ipa_edge_args structures. */
ipcp_init_stage ();
}
/* Gate for IPCP optimization. */
static bool
cgraph_gate_cp (void)
{
return flag_ipa_cp;
}
alias.c (struct alias_set_entry_d): Rename from struct alias_set_entry. gcc/ChangeLog: * alias.c (struct alias_set_entry_d): Rename from struct alias_set_entry. Change all uses. * except.c (struct call_site_record_d): Rename from struct call_site_record. Change all uses. * except.h (struct eh_region_d): Rename from struct eh_region. Change all uses. * gcse.c (struct hash_table_d): Rename from struct hash_table. Change all uses. * graphite.c (struct ivtype_map_elt_d): Rename fromstruct ivtype_map_elt. Change all uses. (struct rename_map_elt_d): Rename fromstruct rename_map_elt. Change all uses. (struct ifsese_d): Rename fromstruct ifsese. Change all uses. * graphite.h (struct name_tree_d): Rename from struct name_tree. Change all uses. (struct sese_d): Rename from struct sese. Change all uses. * omega.h (struct eqn_d): Rename from struct eqn. Change all uses. (struct omega_pb_d): Rename from struct omega_pb. Change all uses. * optabs.h (struct optab_d): Rename from struct optab. Change all uses. (struct convert_optab_d): Rename from struct convert_optab. Change all uses. * tree-pass.h (struct ipa_opt_pass_d): Rename fromstruct ipa_opt_pass. Change all uses. * tree-predcom.c (struct dref_d): Rename from struct dref. Change all uses. * c-decl.c (pushtag): If -Wc++-compat, warn if the tag is already defined as a typedef. (grokdeclarator): If -Wc++-compat, warn if a typedef is already defined as a tag. gcc/cp/ChangeLog: * cp-tree.h (enum cp_lvalue_kind_flags): Rename from cp_lvalue_kind. Change all uses. (enum base_access_flags): Rename from enum base_access. Change all uses. * parser.c (enum cp_parser_flags): Remove enum tag. gcc/testsuite/ChangeLog: * gcc.dg/Wcxx-compat-10.c: New testcase. libcpp/ChangeLog: * include/cpplib.h (enum cpp_builtin_type): Rename from enum builtin_type. Change all uses. From-SVN: r147605
2009-05-16 08:54:11 +02:00
struct ipa_opt_pass_d pass_ipa_cp =
re PR other/35094 (RTL dump file letters hosed and partly undocumented) * gcc.dg/20050811-2.c: Update dumping flags. * gcc.dg/sms-2.c: Update dumping flags. * gcc.dg/var-expand1.c: Update dumping flags. * gcc.dg/var-expand3.c: Update dumping flags. * gcc.dg/pr30957-1.c: Update dumping flags. * gcc.dg/20050811-1.c: Update dumping flags. * gcc.dg/cpp/cmdlne-dI-M.C: Do not xfail. * gcc.dg/cpp/cmdlne-dM-M.C: Do not xfail. PR other/35094 * toplev.c (decode_d_option): Handle all CPP flags. * tree-vrp.c: Update tree_pass descriptors. * regrename.c: Update tree_pass descriptors. * fwprop.c: Update tree_pass descriptors. * doc/invoke.texi: Remove documentation of dropped -d? flags. * tree-into-ssa.c: Update tree_pass descriptors. * tree-dump.c: Update tree_pass descriptors. * tree-complex.c: Update tree_pass descriptors. * tree-dump.h: Update tree_pass descriptors. * see.c: Update tree_pass descriptors. * cgraphbuild.c: Update tree_pass descriptors. * tracer.c: Update tree_pass descriptors. * tree-loop-distribution.c: Update tree_pass descriptors. * cgraph.c: Update tree_pass descriptors. * postreload-gcse.c: Update tree_pass descriptors. * postreload.c: Update tree_pass descriptors. * tree-ssa-loop-ch.c: Update tree_pass descriptors. * tree-tailcall.c: Update tree_pass descriptors. * tree-pass.h (tree_opt_pass): Rename to ... (opt_pass) ... this one; add "type" field and remove letter field. (gimple_opt_pass, rtl_opt_pass, simple_ipa_opt_pass): New. (execute_pass_list, execute_ipa_pass_list, all_passes, all_ipa_passes, all_lowering_passes): Update declaration. * ipa-cp.c: Update tree_pass descriptors. * final.c: Update tree_pass descriptors. * omp-low.c: Update tree_pass descriptors. * tree-ssa-dse.c: Update tree_pass descriptors. * ipa-reference.c: Update tree_pass descriptors. * tree-ssa-uncprop.c: Update tree_pass descriptors. * auto-inc-dec.c: Update tree_pass descriptors. * reorg.c: Update tree_pass descriptors. * cgraphunit.c: Update tree_pass descriptors. * tree-ssa-copyrename.c: Update tree_pass descriptors. * tree-ssa-ccp.c: Update tree_pass descriptors. * df-core.c: Update tree_pass descriptors. * mode-switching.c: Update tree_pass descriptors. * tree-nomudflap.c: Update tree_pass descriptors. * modulo-sched.c: Update tree_pass descriptors. * ipa-pure-const.c: Update tree_pass descriptors. * cse.c: Update tree_pass descriptors. * web.c: Update tree_pass descriptors. * tree-stdarg.c: Update tree_pass descriptors. * tree-ssa-math-opts.c: Update tree_pass descriptors. * tree-ssa-dom.c: Update tree_pass descriptors. * tree-nrv.c: Update tree_pass descriptors. * tree-ssa-alias.c: Update tree_pass descriptors. * loop-init.c: Update tree_pass descriptors. * gimple-low.c: Update tree_pass descriptors. * ipa-inline.c: Update tree_pass descriptors. * tree-ssa-sink.c: Update tree_pass descriptors. * global.c: Update tree_pass descriptors. * ifcvt.c: Update tree_pass descriptors. * jump.c: Update tree_pass descriptors. * predict.c: Update tree_pass descriptors. * tree-ssa-loop.c: Update tree_pass descriptors. * recog.c: Update tree_pass descriptors. * dse.c: Update tree_pass descriptors. * tree-ssa-ifcombine.c: Update tree_pass descriptors. * tree-eh.c: Update tree_pass descriptors. * regmove.c: Update tree_pass descriptors. * local-alloc.c * function.c: Update tree_pass descriptors. * tree-vectorizer.c: Update tree_pass descriptors. * gcse.c: Update tree_pass descriptors. * ipa-type-escape.c: Update tree_pass descriptors. * tree-if-conv.c: Update tree_pass descriptors. * init-regs.c: Update tree_pass descriptors. * ipa.c: Update tree_pass descriptors. * tree-ssa-phiopt.c: Update tree_pass descriptors. * rtl-factoring.c: Update tree_pass descriptors. * lower-subreg.c: Update tree_pass descriptors. * bt-load.c: Update tree_pass descriptors. * tree-dfa.c: Update tree_pass descriptors. * except.c: Update tree_pass descriptors. * emit-rtl.c: Update tree_pass descriptors. * cfgexpand.c: Update tree_pass descriptors. * tree-cfgcleanup.c: Update tree_pass descriptors. * cfgcleanup.c: Update tree_pass descriptors. * tree-ssa-pre.c: Update tree_pass descriptors. * tree-sra.c: Update tree_pass descriptors. * tree-mudflap.c: Update tree_pass descriptors. * tree-ssa-copy.c: Update tree_pass descriptors. * cfglayout.c: Update tree_pass descriptors. * tree-ssa-forwprop.c: Update tree_pass descriptors. * tree-ssa-dce.c: Update tree_pass descriptors. * tree-ssa.c: Update tree_pass descriptors. * regclass.c: Update tree_pass descriptors. * integrate.c: Update tree_pass descriptors. * tree-optimize.c: Update tree_pass descriptors. * tree-ssa-phiprop.c: Update tree_pass descriptors. * tree-object-size.c: Update tree_pass descriptors. * combine.c: Update tree_pass descriptors. * tree-outof-ssa.c: Update tree_pass descriptors. * bb-reorder.c: Update tree_pass descriptors. * stack-ptr-mod.c: Update tree_pass descriptors. * var-tracking.c: Update tree_pass descriptors. * tree-profile.c: Update tree_pass descriptors. * tree-vect-generic.c: Update tree_pass descriptors. * reg-stack.c: Update tree_pass descriptors. * sched-rgn.c: Update tree_pass descriptors. * tree-ssa-structalias.c: Update tree_pass descriptors. * tree-cfg.c: Update tree_pass descriptors. * passes.c (current_pass): Update declaration. (finish_optimization_passes): Update. (all_passes, all_ipa_passes, all_lowering_passes): Update declaration. (register_one_dump_file, register_dump_files_1, next_pass_1): Update arguments. (init_optimization_passes): Update handling of new types. (execute_one_pass, execute_pass_list, execute_ipa_pass_list): Update. * ipa-struct-reorg.c: Update tree_pass descriptors. * tree-ssa-reassoc.c: Update tree_pass descriptors. * combine-stack-adj.c: Update tree_pass descriptors. * cfgrtl.c: Update tree_pass descriptors. * dce.c: Update tree_pass descriptors. * tree-ssanames.c: Update tree_pass descriptors. From-SVN: r133342
2008-03-19 12:22:40 +01:00
{
{
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
IPA_PASS,
"cp", /* name */
cgraph_gate_cp, /* gate */
ipcp_driver, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
TV_IPA_CONSTANT_PROP, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.c (cgraph_remove_node): Do not remove nested nodes. * cgraph.h (cgraph_maybe_hot_edge_p): Declare. * ipa-cp.c (n_cloning_candidates): New static variable. (ipcp_print_profile_data, ipcp_function_scale_print): Forward declare. (ipcp_print_all_lattices): Improve debug output. (ipcp_cloning_candidate_p): New function. (ipcp_initialize_node_lattices): Use it. (ipcp_init_stage): Do only analyzis here; prettier debug output. (ipcp_propagate_stage): Prettier debug output. (ipcp_iterate_stage): Initialize latices here; prettier debug output. (ipcp_print_all_structures): Remove. (ipcp_need_redirect_p): Test !n_cloning_candidates. (ipcp_insert_stage): Prettier debug output; call cgraph_remove_unreachable_nodes before propagating. (pass_ipa_cp): Schedule function removal pass. * ipa-inline.c (inline_indirect_intraprocedural_analysis): Better debug output. (cgraph_maybe_hot_edge_p): Move to ... * predict.c (cgraph_maybe_hot_edge_p) ... here. * opts.c (flag_ipa_cp_set, flag_ipa_cp_clone_set): New. (common_handle_option): Set them; enable ipa-cp when profiling. * ipa-prop.c (ipa_print_node_jump_functions): Prettier output. (ipa_print_all_jump_functions): Likewise. (ipa_print_all_tree_maps, ipa_print_node_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. * ipa-prop.h (ipa_print_all_tree_maps, ipa_print_node_param_flags, ipa_print_all_param_flags): Remove. (ipa_print_node_params, ipa_print_all_params): New. From-SVN: r139772
2008-08-29 18:41:35 +02:00
TODO_dump_cgraph | TODO_dump_func |
TODO_remove_functions /* todo_flags_finish */
cgraph.c (first_cgraph_function_insertion_hook): New variable. * cgraph.c (first_cgraph_function_insertion_hook): New variable. (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): New functions. * cgraph.h (cgraph_add_function_insertion_hook, cgraph_remove_function_insertion_hook, cgraph_call_function_insertion_hooks): Declare. * ipa-reference.c (function_insertion_hook_holder): New variable. (check_operand, look_for_address_of): When checking late, do not care about module bitmaps. (add_new_function): New function. (generate_summary): Register hooks; zero module bitmaps. (propagate): Unregister hooks. * ipa-pure-const.c (function_insertion_hook_holder): New variable. (add_new_function): New function. (generate_summary): Register hook. (propagate): Remove hook. * ipa-cp.c (ipcp_need_redirect_p): Fix to not be constant 0. * tree-pass.h (pass_ipa_cp): Make ipa_opt_pass. * ipa-cp.c (ipcp_update_cloned_node): New function. (build_const_val): Handle functions correctly; bring type logic into sync with tree-inline.c (ipcp_init_stage): Take care of computing stuff needed by indirect inlining; update clones. (ipcp_generate_summary): Break out of ipcp_driver. (ipcp_driver): Do only execution and transformation. (pass_ipa_cp): Make IPA_PASS. * tree-ssa-ccp.c (fold_stmt_r): Check type before trying to fold offset to address. * ipa-inline.c (inline_indirect_intraprocedural_analysis): When doing ipcp, some info is already available. * ipa-prop.c (ipa_count_arguments): Grow edge lists as needed. * tree-inline.c (remap_ssa_name): Unshare expression. From-SVN: r139389
2008-08-21 17:26:59 +02:00
},
ipcp_generate_summary, /* generate_summary */
NULL, /* write_summary */
NULL, /* read_summary */
NULL, /* function_read_summary */
0, /* TODOs */
NULL, /* function_transform */
NULL, /* variable_transform */
};