* ira-emit.c (emit_moves): Skip DEBUG_INSNs when setting the location.
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 9 Jul 2019 09:58:51 +0000 (09:58 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 9 Jul 2019 09:58:51 +0000 (09:58 +0000)
From-SVN: r273297

gcc/ChangeLog
gcc/ira-emit.c

index 21d7c1c..5a6a7f4 100644 (file)
@@ -1,3 +1,7 @@
+2019-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * ira-emit.c (emit_moves): Skip DEBUG_INSNs when setting the location.
+
 2019-07-09  Sylvia Taylor  <sylvia.taylor@arm.com>
 
        * config/arm/crypto.md:
index c42acad..255af30 100644 (file)
@@ -997,27 +997,30 @@ emit_moves (void)
   basic_block bb;
   edge_iterator ei;
   edge e;
-  rtx_insn *insns, *tmp;
+  rtx_insn *insns, *tmp, *next;
 
   FOR_EACH_BB_FN (bb, cfun)
     {
       if (at_bb_start[bb->index] != NULL)
        {
          at_bb_start[bb->index] = modify_move_list (at_bb_start[bb->index]);
-         insns = emit_move_list (at_bb_start[bb->index],
-                                 REG_FREQ_FROM_BB (bb));
+         insns
+           = emit_move_list (at_bb_start[bb->index], REG_FREQ_FROM_BB (bb));
          tmp = BB_HEAD (bb);
          if (LABEL_P (tmp))
            tmp = NEXT_INSN (tmp);
          if (NOTE_INSN_BASIC_BLOCK_P (tmp))
            tmp = NEXT_INSN (tmp);
-         /* Propagate the location of the current first instruction to the
-            moves so that they don't inherit a random location.  */
-         if (tmp != NULL_RTX && INSN_P (tmp))
-           set_insn_locations (insns, INSN_LOCATION (tmp));
+         /* Make sure to put the location of TMP or a subsequent instruction
+            to avoid inheriting the location of the previous instruction.  */
+         next = tmp;
+         while (next && !NONDEBUG_INSN_P (next))
+           next = NEXT_INSN (next);
+         if (next)
+           set_insn_locations (insns, INSN_LOCATION (next));
          if (tmp == BB_HEAD (bb))
            emit_insn_before (insns, tmp);
-         else if (tmp != NULL_RTX)
+         else if (tmp)
            emit_insn_after (insns, PREV_INSN (tmp));
          else
            emit_insn_after (insns, get_last_insn ());