Commit 891aa2ec by Olivier Hainque Committed by Olivier Hainque

sparc.c (sparc_asm_function_epilogue): Don't output an extra nop past a sibling…

sparc.c (sparc_asm_function_epilogue): Don't output an extra nop past a sibling call at the very end.

        * config/sparc/sparc.c (sparc_asm_function_epilogue): Don't output
        an extra nop past a sibling call at the very end.

        testsuite/
        * gcc.target/sparc/sibcall-dslot.c: New testcase.

From-SVN: r163395
parent 07d5b925
2010-08-20 Olivier Hainque <hainque@adacore.com>
* config/sparc/sparc.c (sparc_asm_function_epilogue): Don't output
an extra nop past a sibling call at the very end.
2010-08-19 Bernd Schmidt <bernds@codesourcery.com>
PR bootstrap/45350
......
......@@ -4527,11 +4527,11 @@ sparc_can_use_return_insn_p (void)
static void
sparc_asm_function_epilogue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
{
/* If code does not drop into the epilogue, we have to still output
a dummy nop for the sake of sane backtraces. Otherwise, if the
last two instructions of a function were "call foo; dslot;" this
can make the return PC of foo (i.e. address of call instruction
plus 8) point to the first instruction in the next function. */
/* If the last two instructions of a function are "call foo; dslot;"
the return address might point to the first instruction in the next
function and we have to output a dummy nop for the sake of sane
backtraces in such cases. This is pointless for sibling calls since
the return address is explicitly adjusted. */
rtx insn, last_real_insn;
......@@ -4543,7 +4543,9 @@ sparc_asm_function_epilogue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
&& GET_CODE (PATTERN (last_real_insn)) == SEQUENCE)
last_real_insn = XVECEXP (PATTERN (last_real_insn), 0, 0);
if (last_real_insn && GET_CODE (last_real_insn) == CALL_INSN)
if (last_real_insn
&& CALL_P (last_real_insn)
&& !SIBLING_CALL_P (last_real_insn))
fputs("\tnop\n", file);
sparc_output_deferred_case_vectors ();
......
2010-10-19 Olivier Hainque <hainque@adacore.com>
* gcc.target/sparc/sibcall-dslot.c: New testcase.
2010-08-19 Jason Merrill <jason@redhat.com>
* g++.dg/init/synth3.C: New.
......
/* { dg-do compile } */
/* { dg-options "-O2" } */
extern int one ();
int some_n ()
{
return one ();
}
/* { dg-final { scan-assembler-not "nop" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment