aboutsummaryrefslogtreecommitdiff
path: root/gcc/ira-build.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2008-11-19 21:25:00 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2008-11-19 21:25:00 +0000
commitea1c67e6e3fe69c1926b8bbba75998d147dd5565 (patch)
treeabbc12ec53d3e488d10d9e7e19b31568683777b9 /gcc/ira-build.c
parent3553f0bb324124195a64ce30c0832463e9082461 (diff)
downloadgcc-ea1c67e6e3fe69c1926b8bbba75998d147dd5565.zip
gcc-ea1c67e6e3fe69c1926b8bbba75998d147dd5565.tar.gz
gcc-ea1c67e6e3fe69c1926b8bbba75998d147dd5565.tar.bz2
re PR bootstrap/37859 (Bootstrap failure on mips64octeon-unknown-linux-gnu)
2008-11-19 Vladimir Makarov <vmakarov@redhat.com> PR bootstrap/37859 * ira-int.h (struct ira_loop_tree_node): New member entered_from_non_parent_p. * ira-color.c (print_loop_title): Print loop bbs. * ira-emit.c (entered_from_non_parent_p, setup_entered_from_non_parent_p): New functions. (not_modified_p): Rename to store_can_be_removed_p. Check there is no side entries. (generate_edge_moves): Use store_can_be_removed_p instead of not_modified_p. (ira_emit): Call setup_entered_from_non_parent_p. * ira-build.c (copy_info_to_removed_store_destinations): Accumulate CALL_FREQ, CALL_CROSSED_NUM, and ALLOCNO_EXCESS_PRESSURE_POINTS_NUM. (ira_flattening): Don't CHECK MEM_OPTIMIZED_DEST[_P], always update all accumulated attributes. From-SVN: r142018
Diffstat (limited to 'gcc/ira-build.c')
-rw-r--r--gcc/ira-build.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/gcc/ira-build.c b/gcc/ira-build.c
index af1d174..e4ed601 100644
--- a/gcc/ira-build.c
+++ b/gcc/ira-build.c
@@ -2193,6 +2193,11 @@ copy_info_to_removed_store_destinations (int regno)
if (ALLOCNO_TOTAL_NO_STACK_REG_P (a))
ALLOCNO_TOTAL_NO_STACK_REG_P (parent_a) = true;
#endif
+ ALLOCNO_CALL_FREQ (parent_a) += ALLOCNO_CALL_FREQ (a);
+ ALLOCNO_CALLS_CROSSED_NUM (parent_a)
+ += ALLOCNO_CALLS_CROSSED_NUM (a);
+ ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (parent_a)
+ += ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (a);
merged_p = true;
}
return merged_p;
@@ -2208,7 +2213,7 @@ void
ira_flattening (int max_regno_before_emit, int ira_max_point_before_emit)
{
int i, j, num;
- bool stop_p, keep_p;
+ bool keep_p;
int hard_regs_num;
bool new_pseudos_p, merged_p, mem_dest_p;
unsigned int n;
@@ -2293,26 +2298,15 @@ ira_flattening (int max_regno_before_emit, int ira_max_point_before_emit)
continue;
}
new_pseudos_p = true;
- first = ALLOCNO_MEM_OPTIMIZED_DEST (a) == NULL ? NULL : a;
- stop_p = false;
for (;;)
{
- if (first == NULL
- && ALLOCNO_MEM_OPTIMIZED_DEST (parent_a) != NULL)
- first = parent_a;
ALLOCNO_NREFS (parent_a) -= ALLOCNO_NREFS (a);
ALLOCNO_FREQ (parent_a) -= ALLOCNO_FREQ (a);
- if (first != NULL
- && ALLOCNO_MEM_OPTIMIZED_DEST (first) == parent_a)
- stop_p = true;
- else if (!stop_p)
- {
- ALLOCNO_CALL_FREQ (parent_a) -= ALLOCNO_CALL_FREQ (a);
- ALLOCNO_CALLS_CROSSED_NUM (parent_a)
- -= ALLOCNO_CALLS_CROSSED_NUM (a);
- ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (parent_a)
- -= ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (a);
- }
+ ALLOCNO_CALL_FREQ (parent_a) -= ALLOCNO_CALL_FREQ (a);
+ ALLOCNO_CALLS_CROSSED_NUM (parent_a)
+ -= ALLOCNO_CALLS_CROSSED_NUM (a);
+ ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (parent_a)
+ -= ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (a);
ira_assert (ALLOCNO_CALLS_CROSSED_NUM (parent_a) >= 0
&& ALLOCNO_NREFS (parent_a) >= 0
&& ALLOCNO_FREQ (parent_a) >= 0);