| Index: gcc/gcc/integrate.c
|
| diff --git a/gcc/gcc/integrate.c b/gcc/gcc/integrate.c
|
| index 1fc0737c82206d455cbe06a0ae6469e65a1d575f..0884017e3916e20ffc3dfd5f1d60156d22ad7101 100644
|
| --- a/gcc/gcc/integrate.c
|
| +++ b/gcc/gcc/integrate.c
|
| @@ -1,6 +1,6 @@
|
| /* Procedure integration for GCC.
|
| Copyright (C) 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
| - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
| + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
| Free Software Foundation, Inc.
|
| Contributed by Michael Tiemann (tiemann@cygnus.com)
|
|
|
| @@ -53,11 +53,11 @@ along with GCC; see the file COPYING3. If not see
|
|
|
|
|
| /* Private type used by {get/has}_hard_reg_initial_val. */
|
| -typedef struct initial_value_pair GTY(()) {
|
| +typedef struct GTY(()) initial_value_pair {
|
| rtx hard_reg;
|
| rtx pseudo;
|
| } initial_value_pair;
|
| -typedef struct initial_value_struct GTY(()) {
|
| +typedef struct GTY(()) initial_value_struct {
|
| int num_entries;
|
| int max_entries;
|
| initial_value_pair * GTY ((length ("%h.num_entries"))) entries;
|
| @@ -167,6 +167,7 @@ set_block_abstract_flags (tree stmt, int setting)
|
| {
|
| tree local_decl;
|
| tree subblock;
|
| + unsigned int i;
|
|
|
| BLOCK_ABSTRACT (stmt) = setting;
|
|
|
| @@ -175,6 +176,14 @@ set_block_abstract_flags (tree stmt, int setting)
|
| local_decl = TREE_CHAIN (local_decl))
|
| set_decl_abstract_flags (local_decl, setting);
|
|
|
| + for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
|
| + {
|
| + local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
|
| + if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
|
| + || TREE_CODE (local_decl) == PARM_DECL)
|
| + set_decl_abstract_flags (local_decl, setting);
|
| + }
|
| +
|
| for (subblock = BLOCK_SUBBLOCKS (stmt);
|
| subblock != NULL_TREE;
|
| subblock = BLOCK_CHAIN (subblock))
|
| @@ -308,7 +317,7 @@ struct rtl_opt_pass pass_initial_value_sets =
|
| NULL, /* sub */
|
| NULL, /* next */
|
| 0, /* static_pass_number */
|
| - 0, /* tv_id */
|
| + TV_NONE, /* tv_id */
|
| 0, /* properties_required */
|
| 0, /* properties_provided */
|
| 0, /* properties_destroyed */
|
| @@ -334,7 +343,7 @@ allocate_initial_values (rtx *reg_equiv_memory_loc)
|
| {
|
| int regno = REGNO (ivs->entries[i].pseudo);
|
| rtx x = targetm.allocate_initial_value (ivs->entries[i].hard_reg);
|
| -
|
| +
|
| if (x && REG_N_SETS (REGNO (ivs->entries[i].pseudo)) <= 1)
|
| {
|
| if (MEM_P (x))
|
|
|