Initial shrink-wrapping patch

Richard Henderson rth@redhat.com
Tue Oct 4 22:43:00 GMT 2011


On 10/04/2011 03:10 PM, Bernd Schmidt wrote:
> 	* doc/invoke.texi (-fshrink-wrap): Document.
> 	* opts.c (default_options_table): Add it.
> 	* common.opt (fshrink-wrap): Add.
> 	* function.c (emit_return_into_block): Remove useless declaration.
> 	(record_hard_reg_uses_1, record_hard_reg_uses, frame_required_for_rtx,
> 	requires_stack_frame_p, gen_return_pattern): New static functions.
> 	(emit_return_into_block): New arg simple_p.  All callers changed.
> 	Use gen_return_pattern.
> 	(thread_prologue_and_epilogue_insns): Implement shrink-wrapping.
> 	* config/i386/i386.md (return): Expand into a simple_return.
> 	(simple_return): New expander):
> 	(simple_return_internal, simple_return_internal_long,
> 	simple_return_pop_internal_long, simple_return_indirect_internal):
> 	Renamed from return_internal, return_internal_long,
> 	return_pop_internal_long and return_indirect_internal; changed to use
> 	simple_return.
> 	* config/i386/i386.c (ix86_expand_epilogue): Adjust to expand
> 	simple returns.
> 	(ix86_pad_returns): Likewise.
> 	* function.h (struct rtl_data): Add member shrink_wrapped.
> 	* cfgcleanup.c (outgoing_edges_match): If shrink-wrapped, edges that
> 	are not jumps or sibcalls can't be compared.
> 
> 	* gcc.target/i386/sw-1.c: New test.

Ok.

As a followup, I think this option needs to be disabled for profiling
and profile_after_prologue.  Should be a mere matter of frobbing the
options at startup.


r~



More information about the Gcc-patches mailing list