The following patch fixes a gfortran test failure. LRA tried to put a split code after sibling call. Sibling calls mean no return.

  Committed as rev. 192657.

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

        * lra-constraints.c (inherit_in_ebb): Check sibling call.

Index: lra-constraints.c
===================================================================
--- lra-constraints.c   (revision 192656)
+++ lra-constraints.c   (working copy)
@@ -4491,8 +4491,9 @@ inherit_in_ebb (rtx head, rtx tail)
          last_insn = get_last_insertion_point (curr_bb);
          after_p = (! JUMP_P (last_insn)
                     && (! CALL_P (last_insn)
-                        || find_reg_note (last_insn,
-                                          REG_NORETURN, NULL) == NULL_RTX));
+                        || (find_reg_note (last_insn,
+                                          REG_NORETURN, NULL) == NULL_RTX
+                            && ! SIBLING_CALL_P (last_insn))));
          REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (curr_bb));
          IOR_HARD_REG_SET (live_hard_regs, eliminable_regset);
          IOR_HARD_REG_SET (live_hard_regs, lra_no_alloc_regs);

Reply via email to