diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d8e36f2ec33..43e4b39164f1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-01-10 Razya Ladelsky + + * function.c (get_last_funcdef_no): New function. + * function.h (get_last_funcdef_no): Declare. + * tree-inline.c (initialize_cfun): Add initialization. + (tree_function_versioning): Cleanup. + 2007-01-10 Jan Hubicka * tree-inline.c (setup_one_parameter): Do not propagate into abnormal diff --git a/gcc/function.c b/gcc/function.c index b657e2490eb7..e941c7c7140b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3773,6 +3773,14 @@ debug_find_var_in_block_tree (tree var, tree block) return NULL_TREE; } + +/* Return value of funcdef and increase it. */ +int +get_next_funcdef_no(void) +{ + return funcdef_no++; +} + /* Allocate a function structure for FNDECL and set its contents to the defaults. */ @@ -3787,7 +3795,7 @@ allocate_struct_function (tree fndecl) cfun->stack_alignment_needed = STACK_BOUNDARY; cfun->preferred_stack_boundary = STACK_BOUNDARY; - current_function_funcdef_no = funcdef_no++; + current_function_funcdef_no = get_next_funcdef_no (); cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL; diff --git a/gcc/function.h b/gcc/function.h index e8039a711a18..e02077f6c63c 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -599,4 +599,5 @@ extern bool reference_callee_copied (CUMULATIVE_ARGS *, enum machine_mode, extern void used_types_insert (tree); +extern int get_next_funcdef_no (void); #endif /* GCC_FUNCTION_H */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 1e9a244d155f..3775585d5ecc 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1080,6 +1080,7 @@ initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count, /* Register specific tree functions. */ tree_register_cfg_hooks (); *new_cfun = *DECL_STRUCT_FUNCTION (callee_fndecl); + new_cfun->funcdef_no = get_next_funcdef_no (); VALUE_HISTOGRAMS (new_cfun) = NULL; new_cfun->unexpanded_var_list = NULL; new_cfun->cfg = NULL; @@ -3303,7 +3304,13 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map, fold_cond_expr_cond (); if (gimple_in_ssa_p (cfun)) { + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); + delete_unreachable_blocks (); update_ssa (TODO_update_ssa); + fold_cond_expr_cond (); + if (need_ssa_update_p ()) + update_ssa (TODO_update_ssa); } free_dominance_info (CDI_DOMINATORS); free_dominance_info (CDI_POST_DOMINATORS);