]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* ira-emit.c (emit_moves): Skip DEBUG_INSNs when setting the location.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jul 2019 09:58:51 +0000 (09:58 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jul 2019 09:58:51 +0000 (09:58 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@273297 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ira-emit.c

index 21d7c1c8498fd9d82265ced71f9ea38ee3c2ec59..5a6a7f432b460a2524b534baf7734d1477d60b4e 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 c42acad29a53e98504407d7ba625d731eb5495a1..255af307b3c83ba3d7173598928ccb836e65643c 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 ());