re PR target/43920 (Choosing conditional execution over conditional branches for code size in some cases.)
2011-04-05 Tom de Vries <tom@codesourcery.com> PR target/43920 * function.c (emit_use_return_register_into_block): New function. (thread_prologue_and_epilogue_insns): Use emit_use_return_register_into_block. From-SVN: r171977
This commit is contained in:
parent
2a562b0ab3
commit
4c029f40bd
@ -1,3 +1,10 @@
|
||||
2011-04-05 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR target/43920
|
||||
* function.c (emit_use_return_register_into_block): New function.
|
||||
(thread_prologue_and_epilogue_insns): Use
|
||||
emit_use_return_register_into_block.
|
||||
|
||||
2011-04-05 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR target/43920
|
||||
|
@ -5262,6 +5262,19 @@ prologue_epilogue_contains (const_rtx insn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Insert use of return register before the end of BB. */
|
||||
|
||||
static void
|
||||
emit_use_return_register_into_block (basic_block bb)
|
||||
{
|
||||
rtx seq;
|
||||
start_sequence ();
|
||||
use_return_register ();
|
||||
seq = get_insns ();
|
||||
end_sequence ();
|
||||
emit_insn_before (seq, BB_END (bb));
|
||||
}
|
||||
|
||||
#ifdef HAVE_return
|
||||
/* Insert gen_return at the end of block BB. This also means updating
|
||||
block_for_insn appropriately. */
|
||||
@ -5416,6 +5429,15 @@ thread_prologue_and_epilogue_insns (void)
|
||||
with a simple return instruction. */
|
||||
if (simplejump_p (jump))
|
||||
{
|
||||
/* The use of the return register might be present in the exit
|
||||
fallthru block. Either:
|
||||
- removing the use is safe, and we should remove the use in
|
||||
the exit fallthru block, or
|
||||
- removing the use is not safe, and we should add it here.
|
||||
For now, we conservatively choose the latter. Either of the
|
||||
2 helps in crossjumping. */
|
||||
emit_use_return_register_into_block (bb);
|
||||
|
||||
emit_return_into_block (bb);
|
||||
delete_insn (jump);
|
||||
}
|
||||
@ -5430,6 +5452,9 @@ thread_prologue_and_epilogue_insns (void)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* See comment in simple_jump_p case above. */
|
||||
emit_use_return_register_into_block (bb);
|
||||
|
||||
/* If this block has only one successor, it both jumps
|
||||
and falls through to the fallthru block, so we can't
|
||||
delete the edge. */
|
||||
|
Loading…
Reference in New Issue
Block a user