sparc.c (output_return): Output the source location of the insn in the delay slot...
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 12 Sep 2017 20:24:35 +0000 (20:24 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 12 Sep 2017 20:24:35 +0000 (20:24 +0000)
* config/sparc/sparc.c (output_return): Output the source location of
the insn in the delay slot, if any.
(output_sibcall): Likewise.

From-SVN: r252041

gcc/ChangeLog
gcc/config/sparc/sparc.c

index 766dd64403107f462fc826ed78c5a124d891f7f8..aaf639461c04f420660867415e651e1129ec55f6 100644 (file)
@@ -1,3 +1,9 @@
+2017-09-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/sparc/sparc.c (output_return): Output the source location of
+       the insn in the delay slot, if any.
+       (output_sibcall): Likewise.
+
 2017-09-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR driver/81498
index 1a750ec8093709cb7a39dfb19144c271ea318fd0..9a7e46794b289e4c0d01415f35435c9fe48616fe 100644 (file)
@@ -6182,7 +6182,9 @@ output_return (rtx_insn *insn)
 
       if (final_sequence)
        {
-         rtx delay, pat;
+         rtx_insn *delay;
+         rtx pat;
+         int seen;
 
          delay = NEXT_INSN (insn);
          gcc_assert (delay);
@@ -6197,9 +6199,15 @@ output_return (rtx_insn *insn)
          else
            {
              output_asm_insn ("jmp\t%%i7+%)", NULL);
-             output_restore (pat);
+
+             /* We're going to output the insn in the delay slot manually.
+                Make sure to output its source location first.  */
              PATTERN (delay) = gen_blockage ();
              INSN_CODE (delay) = -1;
+             final_scan_insn (delay, asm_out_file, optimize, 0, &seen);
+             INSN_LOCATION (delay) = UNKNOWN_LOCATION;
+
+             output_restore (pat);
            }
        }
       else
@@ -6255,13 +6263,23 @@ output_sibcall (rtx_insn *insn, rtx call_operand)
 
       if (final_sequence)
        {
-         rtx_insn *delay = NEXT_INSN (insn);
+         rtx_insn *delay;
+         rtx pat;
+         int seen;
+
+         delay = NEXT_INSN (insn);
          gcc_assert (delay);
 
-         output_restore (PATTERN (delay));
+         pat = PATTERN (delay);
 
+         /* We're going to output the insn in the delay slot manually.
+            Make sure to output its source location first.  */
          PATTERN (delay) = gen_blockage ();
          INSN_CODE (delay) = -1;
+         final_scan_insn (delay, asm_out_file, optimize, 0, &seen);
+         INSN_LOCATION (delay) = UNKNOWN_LOCATION;
+
+         output_restore (pat);
        }
       else
        output_restore (NULL_RTX);