diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2012-01-19 20:46:31 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2012-01-19 20:46:31 +0000 |
commit | 2608d8414085d05d05fae8cba70ac22c8fe2c8d0 (patch) | |
tree | 0d29df176c3620279d71202389bdc2b5691fc410 /gcc/ira-conflicts.c | |
parent | 8e19c582b18e18030c172cca406b5607114f80cc (diff) | |
download | gcc-2608d8414085d05d05fae8cba70ac22c8fe2c8d0.tar.gz |
re PR rtl-optimization/40761 (IRA memory hog for insanely nested loops)
2012-01-19 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/40761
* ira-int.h (struct ira_loop_tree_node): Add comment for member
loop. Add new member loop_num.
(IRA_LOOP_NODE_BY_INDEX): Modify the check.
(ira_build): Remove the parameter.
* ira.c (ira_print_disposition): Use loop_num instead of
loop->num.
(ira.c): Do not build CFG loops for one region allocation. Remove
argument from ira_build call.
* ira-build.c (init_loop_tree_node): New function.
(create_loop_tree_nodes): Use it. Separate the case when CFG
loops are not built.
(more_one_region_p): Check current_loops.
(finish_loop_tree_nodes): Separate the case when CFG loops are not
built.
(add_loop_to_tree): Process loop equal to NULL too.
(form_loop_tree): Separate the case when CFG loops are not built.
Use explicitly number for the root.
(rebuild_regno_allocno_maps, create_loop_tree_node_allocnos): Add
an assertion.
(ira_print_expanded_allocno, loop_compare_func): Use loop_num
instead of loop->num.
(mark_loops_for_removal): Ditto. Use loop_num instead of
loop->num.
(mark_all_loops_for_removal): Ditto.
(remove_unnecessary_regions): Separate the case when CFG loops
are not built.
(ira_build): Remove the parameter. Use explicit number of regions
when CFG loops are not built.
* ira-color.c (print_loop_title): Separate the case for the root
node. Use loop_num instead of loop->num.
(move_spill_restore): Use loop_num instead of loop->num.
* ira-emit.c (setup_entered_from_non_parent_p): Add an assertion.
(change_loop): Ditto.
(change_loop): Use loop_num instead of loop->num.
* ira-lives.c (process_bb_node_lives): Ditto.
* ira-costs.c (print_allocno_costs, find_costs_and_classes):
Ditto.
* ira-conflicts.c (print_allocno_conflicts): Ditto.
From-SVN: r183312
Diffstat (limited to 'gcc/ira-conflicts.c')
-rw-r--r-- | gcc/ira-conflicts.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c index f2f13114f38..a0d36094ed5 100644 --- a/gcc/ira-conflicts.c +++ b/gcc/ira-conflicts.c @@ -419,6 +419,7 @@ process_regs_for_copy (rtx reg1, rtx reg2, bool constraint_p, { ira_allocno_t a1 = ira_curr_regno_allocno_map[REGNO (reg1)]; ira_allocno_t a2 = ira_curr_regno_allocno_map[REGNO (reg2)]; + if (!allocnos_conflict_for_copy_p (a1, a2) && offset1 == offset2) { cp = ira_add_allocno_copy (a1, a2, freq, constraint_p, insn, @@ -765,7 +766,7 @@ print_allocno_conflicts (FILE * file, bool reg_p, ira_allocno_t a) if ((bb = ALLOCNO_LOOP_TREE_NODE (a)->bb) != NULL) fprintf (file, "b%d", bb->index); else - fprintf (file, "l%d", ALLOCNO_LOOP_TREE_NODE (a)->loop->num); + fprintf (file, "l%d", ALLOCNO_LOOP_TREE_NODE (a)->loop_num); putc (')', file); } @@ -796,7 +797,7 @@ print_allocno_conflicts (FILE * file, bool reg_p, ira_allocno_t a) fprintf (file, ",b%d", bb->index); else fprintf (file, ",l%d", - ALLOCNO_LOOP_TREE_NODE (conflict_a)->loop->num); + ALLOCNO_LOOP_TREE_NODE (conflict_a)->loop_num); putc (')', file); } } |