diff options
author | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2008-10-27 16:19:25 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2008-10-27 16:19:25 +0000 |
commit | 801f03e3d21a96f63249aa22c8716490e14b7c26 (patch) | |
tree | 60b53ab90a403aef59459df0c4e45de7a73e5cc3 /gcc/ira-build.c | |
parent | 83b83ae97a8d5d291a6209bad3610c686a7138e3 (diff) | |
download | gcc-801f03e3d21a96f63249aa22c8716490e14b7c26.zip gcc-801f03e3d21a96f63249aa22c8716490e14b7c26.tar.gz gcc-801f03e3d21a96f63249aa22c8716490e14b7c26.tar.bz2 |
re PR middle-end/37884 (Bootstrap failure due to miscompilation of tree-vrp.c)
2008-10-27 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/37884
* ira-build.c (copy_live_ranges_to_removed_store_destinations):
Rename to copy_info_to_removed_store_destinations. Propagate
conflict hard regs and register stack attribute.
From-SVN: r141383
Diffstat (limited to 'gcc/ira-build.c')
-rw-r--r-- | gcc/ira-build.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ira-build.c b/gcc/ira-build.c index 3d58e55..68b54df 100644 --- a/gcc/ira-build.c +++ b/gcc/ira-build.c @@ -2042,11 +2042,12 @@ create_caps (void) static ira_allocno_t *regno_top_level_allocno_map; /* Process all allocnos originated from pseudo REGNO and copy live - ranges from low level allocnos to final allocnos which are - destinations of removed stores at a loop exit. Return true if we - copied live ranges. */ + ranges, hard reg conflicts, and allocno stack reg attributes from + low level allocnos to final allocnos which are destinations of + removed stores at a loop exit. Return true if we copied live + ranges. */ static bool -copy_live_ranges_to_removed_store_destinations (int regno) +copy_info_to_removed_store_destinations (int regno) { ira_allocno_t a, parent_a; ira_loop_tree_node_t parent; @@ -2087,6 +2088,12 @@ copy_live_ranges_to_removed_store_destinations (int regno) change_allocno_in_range_list (r, parent_a); ALLOCNO_LIVE_RANGES (parent_a) = merge_ranges (r, ALLOCNO_LIVE_RANGES (parent_a)); + IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (parent_a), + ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a)); +#ifdef STACK_REGS + if (ALLOCNO_TOTAL_NO_STACK_REG_P (a)) + ALLOCNO_TOTAL_NO_STACK_REG_P (parent_a) = true; +#endif merged_p = true; } return merged_p; @@ -2235,7 +2242,7 @@ ira_flattening (int max_regno_before_emit, int ira_max_point_before_emit) ALLOCNO_COPIES (a) = NULL; regno_top_level_allocno_map[REGNO (ALLOCNO_REG (a))] = a; } - if (mem_dest_p && copy_live_ranges_to_removed_store_destinations (i)) + if (mem_dest_p && copy_info_to_removed_store_destinations (i)) merged_p = true; } ira_assert (new_pseudos_p || ira_max_point_before_emit == ira_max_point); |