From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 7F3A1385AC19 for ; Tue, 5 May 2020 08:20:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 7F3A1385AC19 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rguenther@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 5917EAFF0; Tue, 5 May 2020 08:20:54 +0000 (UTC) Date: Tue, 5 May 2020 10:20:51 +0200 (CEST) From: Richard Biener To: Uros Bizjak cc: "H.J. Lu" , "gcc-patches@gcc.gnu.org" , Jeff Law , Jakub Jelinek , Qing Zhao , keescook@chromium.org, victor.rodriguez.bahena@intel.com Subject: Re: [PATCH 2/4] x86: Add -mzero-caller-saved-regs=[skip|used-gpr|all-gpr|used|all] In-Reply-To: Message-ID: References: <20200504190118.1889086-1-hjl.tools@gmail.com> <20200504190118.1889086-2-hjl.tools@gmail.com> User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 May 2020 08:21:04 -0000 On Tue, 5 May 2020, Uros Bizjak wrote: > On Mon, May 4, 2020 at 9:01 PM H.J. Lu 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 SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)