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)) |