diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2009-01-09 17:52:03 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2009-01-09 17:52:03 +0000 |
commit | a174c19c0f7cecdb87f8da952d2fb916dfd7872c (patch) | |
tree | cc3de1bf580b8cc5cf02b7cf216c96d081bf646a /gcc/ira-emit.c | |
parent | 32dbfb3c17b32e39f92a729061641cbff61af7e9 (diff) | |
download | gcc-a174c19c0f7cecdb87f8da952d2fb916dfd7872c.zip gcc-a174c19c0f7cecdb87f8da952d2fb916dfd7872c.tar.gz gcc-a174c19c0f7cecdb87f8da952d2fb916dfd7872c.tar.bz2 |
re PR rtl-optimization/38495 (ACATS tests cxa4004 cxa4005 cxa4026 fail)
2008-01-09 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/38495
* ira-emit.c (print_move_list, ira_debug_move_list): New
functions.
(add_range_and_copies_from_move_list): Print all added ranges.
Add ranges to memory optimized destination.
From-SVN: r143214
Diffstat (limited to 'gcc/ira-emit.c')
-rw-r--r-- | gcc/ira-emit.c | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/gcc/ira-emit.c b/gcc/ira-emit.c index 536d6ee..f524718 100644 --- a/gcc/ira-emit.c +++ b/gcc/ira-emit.c @@ -129,6 +129,26 @@ eq_move_lists_p (move_t list1, move_t list2) return list1 == list2; } +/* Print move list LIST into file F. */ +static void +print_move_list (FILE *f, move_t list) +{ + for (; list != NULL; list = list->next) + fprintf (f, " a%dr%d->a%dr%d", + ALLOCNO_NUM (list->from), ALLOCNO_REGNO (list->from), + ALLOCNO_NUM (list->to), ALLOCNO_REGNO (list->to)); + fprintf (f, "\n"); +} + +extern void ira_debug_move_list (move_t list); + +/* Print move list LIST into stderr. */ +void +ira_debug_move_list (move_t list) +{ + print_move_list (stderr, list); +} + /* This recursive function changes pseudo-registers in *LOC if it is necessary. The function returns TRUE if a change was done. */ static bool @@ -945,7 +965,14 @@ add_range_and_copies_from_move_list (move_t list, ira_loop_tree_node_t node, REGNO (ALLOCNO_REG (from))); } else - r->finish = ira_max_point; + { + r->finish = ira_max_point; + if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) + fprintf (ira_dump_file, + " Adding range [%d..%d] to allocno a%dr%d\n", + r->start, ira_max_point, ALLOCNO_NUM (from), + REGNO (ALLOCNO_REG (from))); + } ira_max_point++; ALLOCNO_LIVE_RANGES (to) = ira_create_allocno_live_range (to, ira_max_point, -1, @@ -968,18 +995,18 @@ add_range_and_copies_from_move_list (move_t list, ira_loop_tree_node_t node, EXECUTE_IF_SET_IN_BITMAP (live_through, FIRST_PSEUDO_REGISTER, regno, bi) { a = node->regno_allocno_map[regno]; - if (ALLOCNO_MEM_OPTIMIZED_DEST (a) == NULL) - { - ALLOCNO_LIVE_RANGES (a) - = ira_create_allocno_live_range (a, start, ira_max_point - 1, - ALLOCNO_LIVE_RANGES (a)); - if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) - fprintf - (ira_dump_file, - " Adding range [%d..%d] to live through allocno a%dr%d\n", - start, ira_max_point - 1, ALLOCNO_NUM (a), - REGNO (ALLOCNO_REG (a))); - } + if ((to = ALLOCNO_MEM_OPTIMIZED_DEST (a)) != NULL) + a = to; + ALLOCNO_LIVE_RANGES (a) + = ira_create_allocno_live_range (a, start, ira_max_point - 1, + ALLOCNO_LIVE_RANGES (a)); + if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) + fprintf + (ira_dump_file, + " Adding range [%d..%d] to live through %s allocno a%dr%d\n", + start, ira_max_point - 1, + to != NULL ? "upper level" : "", + ALLOCNO_NUM (a), REGNO (ALLOCNO_REG (a))); } } |