aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira-build.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@gcc.gnu.org>2008-10-27 16:19:25 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2008-10-27 16:19:25 +0000
commit801f03e3d21a96f63249aa22c8716490e14b7c26 (patch)
tree60b53ab90a403aef59459df0c4e45de7a73e5cc3 /gcc/ira-build.c
parent83b83ae97a8d5d291a6209bad3610c686a7138e3 (diff)
downloadgcc-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.c17
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);