diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 26 |
2 files changed, 28 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 766dd64..aaf6394 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 1a750ec..9a7e467 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -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); |