The SPARC bootstrap started to fail after recent addition of live range splitting and trunk merge. The following patch fixes a crash of GCC on SPARC64 bootstrap. Unfortunately, it is still not enough to fix the bootstrap failure but I am working on it.

The patch was successfully bootstrapped on x86/x86-64.

Committed as rev. 184444.

2012-02-21  Vladimir Makarov <vmaka...@redhat.com>

        * lra-constraints.c (inherit_in_ebb): Put split save before jump
        using the pseudo.

Index: lra-constraints.c
===================================================================
--- lra-constraints.c   (revision 184315)
+++ lra-constraints.c   (working copy)
@@ -4407,8 +4407,11 @@ inherit_in_ebb (rtx head, rtx tail)
                  }
                else if (reg_renumber[src_regno] >= 0)
                  {
+                   bool before_p;
                    rtx use_insn = curr_insn;
 
+                   before_p = (JUMP_P (curr_insn)
+                               || (CALL_P (curr_insn) && reg->type == OP_IN));
                    if (usage_insns[src_regno].check == curr_usage_insns_check
                        && (next_usage_insns
                            = usage_insns[src_regno].insns) != NULL_RTX
@@ -4422,8 +4425,7 @@ inherit_in_ebb (rtx head, rtx tail)
                        && need_for_split_p (potential_reload_hard_regs,
                                             src_regno)
                        && NONDEBUG_INSN_P (curr_insn)
-                       && split_pseudo (CALL_P (curr_insn) && reg->type == 
OP_IN,
-                                        src_regno, curr_insn,
+                       && split_pseudo (before_p, src_regno, curr_insn,
                                         next_usage_insns))
                      {
                        if (reg->subreg_p)
@@ -4431,7 +4433,7 @@ inherit_in_ebb (rtx head, rtx tail)
                        change_p = true;
                        /* Invalidate.  */
                        usage_insns[src_regno].check = 0;
-                       if (CALL_P (curr_insn) && reg->type == OP_IN)
+                       if (before_p)
                          use_insn = PREV_INSN (curr_insn);
                      }
                    if (NONDEBUG_INSN_P (curr_insn))

Reply via email to