Comments
Patch
===================================================================
@@ -1989,6 +1989,7 @@ setup_reg_renumber (void)
ira_assert (!optimize || flag_caller_saves
|| (ALLOCNO_CALLS_CROSSED_NUM (a)
== ALLOCNO_CHEAP_CALLS_CROSSED_NUM (a))
+ || regno >= ira_reg_equiv_len
|| ira_equiv_no_lvalue_p (regno));
caller_save_needed = 1;
}
===================================================================
@@ -947,7 +947,8 @@ emit_move_list (move_t list, int freq)
= gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv_init (regno));
}
}
- ira_update_equiv_info_by_shuffle_insn (to_regno, from_regno, list->insn);
+ if (ira_use_lra_p)
+ ira_update_equiv_info_by_shuffle_insn (to_regno, from_regno, list->insn);
emit_insn (list->insn);
mode = ALLOCNO_MODE (list->to);
aclass = ALLOCNO_CLASS (list->to);
The following patch is to solve http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55050 and probably http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55068 Code updating equivalences was added to IRA. It was supposed for LRA. It might create problems for reload because it creates inconsistency in dealing with equivs in reload and IRA. The patch was successfully bootstrapped on x86/x86-64. Committed as rev. 192797. 2012-10-24 Vladimir Makarov <vmakarov@redhat.com> PR bootstrap/55068 PR regression/55050 * ira.c (setup_reg_renumber): Fix assert. * ira-emit.c (emit_move_list): Update equivalences only for LRA.