[PR97983] LRA: Use the right emit func for putting insn in the destination BB.
authorVladimir N. Makarov <vmakarov@redhat.com>
Wed, 25 Nov 2020 22:06:13 +0000 (17:06 -0500)
committerVladimir N. Makarov <vmakarov@redhat.com>
Thu, 26 Nov 2020 00:58:01 +0000 (19:58 -0500)
gcc/

2020-11-25  Vladimir Makarov  <vmakarov@redhat.com>

PR bootstrap/97983
* lra.c (lra_process_new_insns): Use emit_insn_before_noloc or
emit_insn_after_noloc with the destination BB.

gcc/lra.c

index 4ec0f46637699b5f880a89ae2250d8957a7f9476..a79213e32e0dbba9e024b5f3825648e0ecbc2824 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1908,13 +1908,9 @@ lra_process_new_insns (rtx_insn *insn, rtx_insn *before, rtx_insn *after,
                  tmp = NEXT_INSN (tmp);
                if (NOTE_INSN_BASIC_BLOCK_P (tmp))
                  tmp = NEXT_INSN (tmp);
-               for (curr = tmp; curr != NULL; curr = NEXT_INSN (curr))
-                 if (INSN_P (curr))
-                   break;
                /* Do not put reload insns if it is the last BB
-                  without actual insns.  In this case the reload insns
-                  can get null BB after emitting.  */
-               if (curr == NULL)
+                  without actual insns.  */
+               if (tmp == NULL)
                  continue;
                start_sequence ();
                for (curr = after; curr != NULL_RTX; curr = NEXT_INSN (curr))
@@ -1927,7 +1923,11 @@ lra_process_new_insns (rtx_insn *insn, rtx_insn *before, rtx_insn *after,
                             e->dest->index);
                    dump_rtl_slim (lra_dump_file, copy, NULL, -1, 0);
                  }
-               emit_insn_before (copy, tmp);
+               /* Use the right emit func for setting up BB_END/BB_HEAD: */
+               if (BB_END (e->dest) == PREV_INSN (tmp))
+                 emit_insn_after_noloc (copy, PREV_INSN (tmp), e->dest);
+               else
+                 emit_insn_before_noloc (copy, tmp, e->dest);
                push_insns (last, PREV_INSN (copy));
                setup_sp_offset (copy, last);
                /* We can ignore BB live info here as it and reg notes