emit-rtl.c (set_insn_locations): New function moved from...
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 8 Jul 2019 21:37:33 +0000 (21:37 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 8 Jul 2019 21:37:33 +0000 (21:37 +0000)
* emit-rtl.c (set_insn_locations): New function moved from...
* function.c (set_insn_locations): ...here.
* ira-emit.c (emit_moves): Propagate location of the first instruction
to the inserted move instructions.
* reg-stack.c (compensate_edge): Set the location if the sequence is
inserted on the edge.
* rtl.h (set_insn_locations): Declare.

From-SVN: r273247

gcc/ChangeLog
gcc/emit-rtl.c
gcc/function.c
gcc/ira-emit.c
gcc/reg-stack.c
gcc/rtl.h

index db0cf7e0508b67f25ebe3f7372485ea61297bd5c..d0d34948d1ba4b34f7c321ba6690278133c17d98 100644 (file)
@@ -1,3 +1,13 @@
+2019-07-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * emit-rtl.c (set_insn_locations): New function moved from...
+       * function.c (set_insn_locations): ...here.
+       * ira-emit.c (emit_moves): Propagate location of the first instruction
+       to the inserted move instructions.
+       * reg-stack.c (compensate_edge): Set the location if the sequence is
+       inserted on the edge.
+       * rtl.h (set_insn_locations): Declare.
+
 2019-07-08  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.c (rs6000_machine_from_flags): Ignore
index e265fa68bce43959f4b020081bd0364f70db1366..f60f2e218379f768c73546ab8b17ce3bd40d87da 100644 (file)
@@ -6582,6 +6582,18 @@ curr_insn_location (void)
   return curr_location;
 }
 
+/* Set the location of the insn chain starting at INSN to LOC.  */
+void
+set_insn_locations (rtx_insn *insn, location_t loc)
+{
+  while (insn)
+    {
+      if (INSN_P (insn))
+       INSN_LOCATION (insn) = loc;
+      insn = NEXT_INSN (insn);
+    }
+}
+
 /* Return lexical scope block insn belongs to.  */
 tree
 insn_scope (const rtx_insn *insn)
index a9576797701992a3b580cf519dca5fd7567db443..0bce4ec68395f43c2192d5c65a54b2cc5c5a11bd 100644 (file)
@@ -5244,19 +5244,6 @@ use_return_register (void)
   diddle_return_value (do_use_return_reg, NULL);
 }
 
-/* Set the location of the insn chain starting at INSN to LOC.  */
-
-static void
-set_insn_locations (rtx_insn *insn, int loc)
-{
-  while (insn != NULL)
-    {
-      if (INSN_P (insn))
-       INSN_LOCATION (insn) = loc;
-      insn = NEXT_INSN (insn);
-    }
-}
-
 /* Generate RTL for the end of the current function.  */
 
 void
index 51bf9c8bcfb064eac044739786833c74f4f4d7c9..c42acad29a53e98504407d7ba625d731eb5495a1 100644 (file)
@@ -1011,6 +1011,10 @@ emit_moves (void)
            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));
          if (tmp == BB_HEAD (bb))
            emit_insn_before (insns, tmp);
          else if (tmp != NULL_RTX)
index 5576630c8f25f96dc83fa2a5bd19cbe3ce51c75e..710f14a954443a79785b44d7382590cffea0e1a6 100644 (file)
@@ -2929,6 +2929,7 @@ compensate_edge (edge e)
       seq = get_insns ();
       end_sequence ();
 
+      set_insn_locations (seq, e->goto_locus);
       insert_insn_on_edge (seq, e);
       return true;
     }
index 31fba823435ea76102568da4e0090047c2050144..a4fde4ed8e5b3b5b2426a27b8e7023d6676b607b 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -4338,6 +4338,7 @@ extern void insn_locations_init (void);
 extern void insn_locations_finalize (void);
 extern void set_curr_insn_location (location_t);
 extern location_t curr_insn_location (void);
+extern void set_insn_locations (rtx_insn *, location_t);
 
 /* rtl-error.c */
 extern void _fatal_insn_not_found (const_rtx, const char *, int, const char *)