On Tue, 5 May 2020, Uros Bizjak wrote:

> On Mon, May 4, 2020 at 9:01 PM H.J. Lu <hjl.to...@gmail.com> wrote:
> >
> > Add -mzero-caller-saved-regs=[skip|used-gpr|all-gpr|used|all] command-line
> > option and zero_caller_saved_regs("skip|used|all") function attribue:
> >
> > 1. -mzero-caller-saved-regs=skip and zero_caller_saved_regs("skip")
> >
> > Don't zero caller-saved registers upon function return.
> >
> > 2. -mzero-caller-saved-regs=used-gpr and zero_caller_saved_regs("used-gpr")
> >
> > Zero used caller-saved integer registers upon function return.
> >
> > 3. -mzero-caller-saved-regs=all-gpr and zero_caller_saved_regs("all-gpr")
> >
> > 2. -mzero-caller-saved-regs=used and zero_caller_saved_regs("used")
> >
> > Zero used caller-saved integer and vector registers upon function return.
> >
> > 3. -mzero-caller-saved-regs=all and zero_caller_saved_regs("all")
> >
> > Zero all caller-saved integer and vector registers upon function return.
> >
> > Tested on i686 and x86-64 with bootstrapping GCC trunk, making
> > -mzero-caller-saved-regs=used-gpr, -mzero-caller-saved-regs=all-gpr
> > -mzero-caller-saved-regs=used, and -mzero-caller-saved-regs=all enabled
> > by default.
> 
> This patch should be completely rewritten to use regsets infrastructure.
> 
> Please note accessible_reg_set global variable that nowadays holds all
> ABI-dependent active registers.
> 
> To ease the review, the patch should be split to at least options
> part, attribute part, infrastructure part and insn pattern change
> part, not to mention separate testsuite part.
> 
> Please also get global reviewer on board. This *IS* a new
> functionality, even if for some reason lives in i386 directory, so it
> requires global functionality review, community consensus, etc...
> *BEFORE* target maintainer reviews the patch from the implementation
> point of view. Asking for a target review at this time is just putting
> the cart before the horse and will get you nowhere.

Agreed.  I also wonder whether the functionality can live in the 
middle-end where possibly global info can be taken into
account, the RA (LRA for the actual transform I guess).

Richard.

> Uros.
> 
> > gcc/
> >
> >         * i386-expand.c (ix86_find_live_outgoing_regs): New function.
> >         (ix86_split_simple_return_pop_internal): Removed.
> >         (ix86_split_simple_return_internal): New function.
> >         * config/i386/i386-options.c (ix86_set_zero_caller_saved_regs_type):
> >         New function.
> >         (ix86_set_current_function): Call 
> > ix86_set_zero_caller_saved_regs_type.
> >         (ix86_handle_fndecl_attribute): Support zero_caller_saved_regs
> >         attribute.
> >         (ix86_attribute_table): Add zero_caller_saved_regs.
> >         * config/i386/i386-opts.h (zero_caller_saved_regs): New enum.
> >         * config/i386/i386-protos.h (ix86_split_simple_return_pop_internal):
> >         Renamed to ...
> >         (ix86_split_simple_return_internal): This.
> >         * config/i386/i386.c (ix86_expand_prologue): Replace
> >         gen_prologue_use with gen_pro_epilogue_use.
> >         (ix86_expand_epilogue): Replace gen_simple_return_pop_internal
> >         with ix86_split_simple_return_internal.  Replace
> >         gen_simple_return_internal with ix86_split_simple_return_internal.
> >         * config/i386/i386.h (machine_function): Add
> >         zero_caller_saved_regs_type, live_outgoing_int_regs and
> >         live_outgoing_vector_regs.
> >         (TARGET_POP_SCRATCH_REGISTER): New.
> >         * config/i386/i386.md (UNSPEC_SIMPLE_RETURN): New UNSPEC.
> >         (UNSPECV_PROLOGUE_USE): Renamed to ...
> >         (UNSPECV_PRO_EPILOGUE_USE): This.
> >         (prologue_use): Renamed to ...
> >         (pro_epilogue_use): This.
> >         (simple_return_internal): Changed to define_insn_and_split.
> >         (simple_return_internal_1): New pattern.
> >         (simple_return_pop_internal): Replace
> >         ix86_split_simple_return_pop_internal with
> >         ix86_split_simple_return_internal.  Always call
> >         ix86_split_simple_return_internal if epilogue_completed is
> >         true.
> >         (simple_return_pop_internal_1): New pattern.
> >         (Epilogue deallocator to pop peepholes): Enabled only if
> >         TARGET_POP_SCRATCH_REGISTER is true.
> >         * config/i386/i386.opt (mzero-caller-saved-regs=): New option.
> >         * doc/extend.texi: Document zero_caller_saved_regs attribute.
> >         * doc/invoke.texi: Document -mzero-caller-saved-regs=.
> >
> > gcc/testsuite/
> >
> >         * gcc.target/i386/zero-scratch-regs-1.c: New test.
> >         * gcc.target/i386/zero-scratch-regs-2.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-3.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-4.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-5.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-6.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-7.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-8.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-9.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-10.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-11.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-12.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-13.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-14.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-15.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-16.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-17.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-18.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-19.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-20.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-21.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-22.c: Likewise.
> >         * gcc.target/i386/zero-scratch-regs-23.c: Likewise.
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to