This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
patch to fix PR59915
- From: Vladimir Makarov <vmakarov at redhat dot com>
- To: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 23 Jan 2014 15:09:08 -0500
- Subject: patch to fix PR59915
- Authentication-results: sourceware.org; auth=none
The following patch fixes
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59915
The patch was successfully bootstrapped and tested on x86/x86-64 and
ppc64 (with -mlra).
Committed as rev. 207007.
2014-01-23 Vladimir Makarov <vmakarov@redhat.com>
PR regression/59915
* lra-constraints.c (simplify_operand_subreg): Spill pseudo if
there is a danger of looping.
Index: lra-constraints.c
===================================================================
--- lra-constraints.c (revision 206976)
+++ lra-constraints.c (working copy)
@@ -1291,9 +1291,20 @@ simplify_operand_subreg (int nop, enum m
&& ! LRA_SUBREG_P (operand))
|| CONSTANT_P (reg) || GET_CODE (reg) == PLUS || MEM_P (reg))
{
- /* The class will be defined later in curr_insn_transform. */
- enum reg_class rclass
- = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
+ enum reg_class rclass;
+
+ if (REG_P (reg)
+ && curr_insn_set != NULL_RTX
+ && (REG_P (SET_SRC (curr_insn_set))
+ || GET_CODE (SET_SRC (curr_insn_set)) == SUBREG))
+ /* There is big probability that we will get the same class
+ for the new pseudo and we will get the same insn which
+ means infinite looping. So spill the new pseudo. */
+ rclass = NO_REGS;
+ else
+ /* The class will be defined later in curr_insn_transform. */
+ rclass
+ = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS);
if (get_reload_reg (curr_static_id->operand[nop].type, reg_mode, reg,
rclass, "subreg reg", &new_reg))