[Patch,AVR]: Support -maccumulate-args option

Denis Chertykov chertykov@gmail.com
Sat Oct 29 12:22:00 GMT 2011


2011/10/27 Georg-Johann Lay <avr@gjlay.de>:
> This is support of a new option -maccumulate-args that implements
> ACCUMULATE_OUTGOING_ARGS as proposed by Richard.
>
> As 4.7 will be released very soon, I'd like to supply the documentation part
> later and use the remaining stage I time for extension/improvements.
>
> The tests ran 4 times with either combination of
>  -m[no-]call-prologues
>  -m[no-]accumulate-args
>
> The results for the C testsuite are:
>
> -maccumulate-args
>    PASS -> FAIL
>    gcc.dg/compat/struct-by-value-16a
>    gcc.dg/compat/struct-by-value-17a
>    gcc.dg/compat/struct-by-value-18a
>
> -maccumulate-args
> -mcall-prologues
>    PASS -> FAIL
>    gcc.dg/compat/struct-by-value-16a
>    gcc.dg/compat/struct-by-value-17a
>    gcc.dg/compat/struct-by-value-18a
>    gcc.dg/sibcall-3.c
>    gcc.dg/sibcall-4.c
>
>    FAIL -> PASS
>    gcc.dg/torture/pta-ptrarith-3.c
>
> -mcall-prologues
>    PASS -> FAIL
>    gcc.dg/sibcall-3.c
>    gcc.dg/sibcall-4.c
>
>    FAIL -> PASS
>    gcc.dg/torture/pta-ptrarith-3.c
>
> All FAILs runtime fails.
>  - struct-by-value-* use extrem RAM (overflow)
>  - sibcall-* fail because that optimization is off
>   with -mcall-prologues
>  - the FAILs of pta-ptrarith-3 are PR50063.
>
> There are no changes in the C++ testsuite.
>
> Ok for trunk?
>
> Johann
>
>        * config/avr/avr.opt (-maccumulate-args): New option.
>        * config/avr/avr.h (STARTING_FRAME_OFFSET): Redefine to
>        avr_starting_frame_offset.
>        (ACCUMULATE_OUTGOING_ARGS): Define to avr_accumulate_outgoing_args.
>        * config/avr/avr.md (UNSPECV_WRITE_SP_IRQ_ON): Remove.
>        (UNSPECV_WRITE_SP_IRQ_OFF): Remove.
>        (UNSPECV_WRITE_SP): New constant.
>        (*addhi3_sp_R): Rewrite to...
>        (*addhi3_sp): ...this new insn.
>        (movhi_sp_r_irq_off, movhi_sp_r_irq_on): Combine to...
>        (movhi_sp_r): ...this new insn.
>        * config/avr/avr-protos.h (avr_accumulate_outgoing_args): New.
>        (avr_starting_frame_offset): New.
>        * config/avr/avr.c (avr_accumulate_outgoing_args): New function.
>        (avr_starting_frame_offset): New function.
>        (avr_outgoing_args_size): New static function.
>        (avr_initial_elimination_offset): Use it.
>        (avr_simple_epilogue): Use it.
>        (avr_asm_function_end_prologue): Use it.
>        (expand_epilogue): Use it.
>        (expand_prologue): Use it.  Break out code to...
>        (avr_prologue_setup_frame): ...this new static function.
>        (avr_can_eliminate): Allow eliminating to frame pointer if there
>        is one.
>        (avr_frame_pointer_required_p): Use frame pointer if target has a
>        nonlocal label.
>        * config/avr/constraints.md (Csp): New constraint.
>        * config/avr/predicates.md (avr_sp_immediate_operand): Use it.
>


Please commit.

Denis.



More information about the Gcc-patches mailing list