From 5ea2e42fb6fb37678f2ae3d579860e7179db68a8 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Thu, 23 Sep 2010 22:06:18 +0000 Subject: [PATCH] * tree-flow.h (execute_update_addresses_taken): Adjust. * tree-ssa.c (maybe_optimize_var): Tweak comment and dump messages. (execute_update_addresses_taken): Remove parameter and OPTIMIZE test. * passes.c (execute_function_todo): Adjust calls to above function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164571 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/passes.c | 8 +++----- gcc/tree-flow.h | 2 +- gcc/tree-ssa.c | 37 +++++++++++++++++-------------------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66552a6..09b8a30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-09-23 Eric Botcazou + + * tree-flow.h (execute_update_addresses_taken): Adjust. + * tree-ssa.c (maybe_optimize_var): Tweak comment and dump messages. + (execute_update_addresses_taken): Remove parameter and OPTIMIZE test. + * passes.c (execute_function_todo): Adjust calls to above function. + 2010-09-23 Anatoly Sokolov * config/arm/arm.h (OUTPUT_ADDR_CONST_EXTRA): Remove. diff --git a/gcc/passes.c b/gcc/passes.c index c61a1d2..24bae5f 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1206,15 +1206,13 @@ execute_function_todo (void *data) cfun->last_verified &= ~TODO_verify_ssa; } - if (flags & TODO_update_address_taken) - execute_update_addresses_taken (true); - if (flags & TODO_rebuild_alias) { - if (!(flags & TODO_update_address_taken)) - execute_update_addresses_taken (true); + execute_update_addresses_taken (); compute_may_aliases (); } + else if (optimize && (flags & TODO_update_address_taken)) + execute_update_addresses_taken (); if (flags & TODO_remove_unused_locals) remove_unused_locals (); diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index da23516..85ad534 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -559,7 +559,7 @@ extern void delete_tree_ssa (void); extern bool ssa_undefined_value_p (tree); extern void warn_uninit (tree, const char *, void *); extern unsigned int warn_uninitialized_vars (bool); -extern void execute_update_addresses_taken (bool); +extern void execute_update_addresses_taken (void); /* Call-back function for walk_use_def_chains(). At each reaching definition, a function with this prototype is called. */ diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 10c7ab9..0b83b37 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1885,9 +1885,9 @@ non_rewritable_mem_ref_base (tree ref) return NULL_TREE; } -/* When possible, clear ADDRESSABLE bit or set the REGISTER bit - and mark the variable VAR for conversion into SSA. Returns true - when updating stmts is required. */ +/* When possible, clear TREE_ADDRESSABLE bit or set DECL_GIMPLE_REG_P bit and + mark the variable VAR for conversion into SSA. Return true when updating + stmts is required. */ static bool maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) @@ -1918,11 +1918,12 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) update_vops = true; if (dump_file) { - fprintf (dump_file, "No longer having address taken "); + fprintf (dump_file, "No longer having address taken: "); print_generic_expr (dump_file, var, 0); fprintf (dump_file, "\n"); } } + if (!DECL_GIMPLE_REG_P (var) && !bitmap_bit_p (not_reg_needs, DECL_UID (var)) && (TREE_CODE (TREE_TYPE (var)) == COMPLEX_TYPE @@ -1935,7 +1936,7 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) update_vops = true; if (dump_file) { - fprintf (dump_file, "Decl is now a gimple register "); + fprintf (dump_file, "Now a gimple register: "); print_generic_expr (dump_file, var, 0); fprintf (dump_file, "\n"); } @@ -1947,14 +1948,14 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) /* Compute TREE_ADDRESSABLE and DECL_GIMPLE_REG_P for local variables. */ void -execute_update_addresses_taken (bool do_optimize) +execute_update_addresses_taken (void) { - tree var; gimple_stmt_iterator gsi; basic_block bb; bitmap addresses_taken = BITMAP_ALLOC (NULL); bitmap not_reg_needs = BITMAP_ALLOC (NULL); bool update_vops = false; + tree var; unsigned i; /* Collect into ADDRESSES_TAKEN all variables whose address is taken within @@ -2047,20 +2048,16 @@ execute_update_addresses_taken (bool do_optimize) } } - /* When possible, clear ADDRESSABLE bit or set the REGISTER bit - and mark variable for conversion into SSA. */ - if (optimize && do_optimize) - { - /* We cannot iterate over all referenced vars as that can contain - unused vars from BLOCK trees which cause code generation - differences for -g vs. -g0. */ - for (var = DECL_ARGUMENTS (cfun->decl); var; var = DECL_CHAIN (var)) - update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); - FOR_EACH_VEC_ELT (tree, cfun->local_decls, i, var) - update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); - } + /* We cannot iterate over all referenced vars because that can contain + unused vars from BLOCK trees, which causes code generation differences + for -g vs. -g0. */ + for (var = DECL_ARGUMENTS (cfun->decl); var; var = DECL_CHAIN (var)) + update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); + + FOR_EACH_VEC_ELT (tree, cfun->local_decls, i, var) + update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); - /* Operand caches needs to be recomputed for operands referencing the updated + /* Operand caches need to be recomputed for operands referencing the updated variables. */ if (update_vops) { -- 2.7.4