From patchwork Tue Apr 21 13:24:14 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: tbsaunde+gcc@tbsaunde.org X-Patchwork-Id: 463133 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 2E79514012C for ; Tue, 21 Apr 2015 23:27:30 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=VWAtjkcz; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; q=dns; s= default; b=KrAYLYKiIHoYeNBddMECRFbSXRvFfs8IgekMhZnJndEyD/WJiSg1x s4Wt5DA1T6ea3lR4GekAjC6kv0sFxSMyeg9N6hKT8p9Xyrgxssmoo/B6dq0yzjfO 4olGMbPFXc2xm72pOENyMohaJEWvqMN51O861oxigEJ8PGiq+YQQdE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; s= default; bh=4Gr/PN9CIg+rxuOkGPndTA1Jjj8=; b=VWAtjkczDrKG2rlw5JCJ NIvKtjs0MxRsuWHQTUiRALWBts/Ck22k5vXyt8NVu5bZwknRkjfWkYsGmy+R5QNV EWDxwiYscERno7EYQDurTIWqWUU5wjZTdapfVDxGxGcnnFJLYE2/g5Sac53Z30e8 uK9VqD09OmL9GzKTQL+h0Ao= Received: (qmail 59672 invoked by alias); 21 Apr 2015 13:25:27 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 59491 invoked by uid 89); 21 Apr 2015 13:25:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=AWL, BAYES_50, KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (208.118.235.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Tue, 21 Apr 2015 13:25:22 +0000 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YkYAv-00067Y-Or for gcc-patches@gcc.gnu.org; Tue, 21 Apr 2015 09:25:20 -0400 Received: from tbsaunde.org ([66.228.47.254]:51377 helo=paperclip.tbsaunde.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YkYAv-00067T-KP for gcc-patches@gcc.gnu.org; Tue, 21 Apr 2015 09:25:17 -0400 Received: from iceball.corp.tor1.mozilla.com (unknown [23.233.68.71]) by paperclip.tbsaunde.org (Postfix) with ESMTPSA id 8EC1CC0B3; Tue, 21 Apr 2015 13:25:16 +0000 (UTC) From: tbsaunde+gcc@tbsaunde.org To: gcc-patches@gcc.gnu.org Cc: Trevor Saunders Subject: [PATCH 08/12] reduce conditional compilation for HARD_FRAME_POINTER_IS_FRAME_POINTER Date: Tue, 21 Apr 2015 09:24:14 -0400 Message-Id: <1429622658-9034-9-git-send-email-tbsaunde+gcc@tbsaunde.org> In-Reply-To: <1429622658-9034-1-git-send-email-tbsaunde+gcc@tbsaunde.org> References: <1429622658-9034-1-git-send-email-tbsaunde+gcc@tbsaunde.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.228.47.254 X-IsSubscribed: yes From: Trevor Saunders gcc/ChangeLog: 2015-04-21 Trevor Saunders * alias.c (init_alias_target): Remove ifdef * HARD_FRAME_POINTER_IS_FRAME_POINTER. * df-scan.c (df_insn_refs_collect): Likewise. (df_get_regular_block_artificial_uses): Likewise. (df_get_eh_block_artificial_uses): Likewise. (df_get_entry_block_def_set): Likewise. (df_get_exit_block_use_set): Likewise. * emit-rtl.c (gen_rtx_REG): Likewise. * ira.c (ira_setup_eliminable_regset): Likewise. * reginfo.c (init_reg_sets_1): Likewise. * regrename.c (rename_chains): Likewise. * reload1.c (reload): Likewise. (eliminate_regs_in_insn): Likewise. * resource.c (mark_referenced_resources): Likewise. (init_resource_info): Likewise. --- gcc/alias.c | 7 +++---- gcc/df-scan.c | 35 +++++++++++++++++------------------ gcc/emit-rtl.c | 6 +++--- gcc/ira.c | 23 ++++++++++++----------- gcc/reginfo.c | 5 ++--- gcc/regrename.c | 5 ++--- gcc/reload1.c | 10 ++++------ gcc/resource.c | 11 +++++------ 8 files changed, 48 insertions(+), 54 deletions(-) diff --git a/gcc/alias.c b/gcc/alias.c index a7160f3..8f48660 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2765,10 +2765,9 @@ init_alias_target (void) = unique_base_value (UNIQUE_BASE_VALUE_ARGP); static_reg_base_value[FRAME_POINTER_REGNUM] = unique_base_value (UNIQUE_BASE_VALUE_FP); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - static_reg_base_value[HARD_FRAME_POINTER_REGNUM] - = unique_base_value (UNIQUE_BASE_VALUE_HFP); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + static_reg_base_value[HARD_FRAME_POINTER_REGNUM] + = unique_base_value (UNIQUE_BASE_VALUE_HFP); } /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed diff --git a/gcc/df-scan.c b/gcc/df-scan.c index b2e2e5d..69332a8 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -3247,12 +3247,11 @@ df_insn_refs_collect (struct df_collection_rec *collection_rec, regno_reg_rtx[FRAME_POINTER_REGNUM], NULL, bb, insn_info, DF_REF_REG_USE, 0); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - df_ref_record (DF_REF_BASE, collection_rec, - regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], - NULL, bb, insn_info, - DF_REF_REG_USE, 0); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + df_ref_record (DF_REF_BASE, collection_rec, + regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], + NULL, bb, insn_info, + DF_REF_REG_USE, 0); break; default: break; @@ -3442,9 +3441,9 @@ df_get_regular_block_artificial_uses (bitmap regular_block_artificial_uses) reference of the frame pointer. */ bitmap_set_bit (regular_block_artificial_uses, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - bitmap_set_bit (regular_block_artificial_uses, HARD_FRAME_POINTER_REGNUM); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + bitmap_set_bit (regular_block_artificial_uses, + HARD_FRAME_POINTER_REGNUM); #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM /* Pseudos with argument area equivalences may require @@ -3494,9 +3493,9 @@ df_get_eh_block_artificial_uses (bitmap eh_block_artificial_uses) if (frame_pointer_needed) { bitmap_set_bit (eh_block_artificial_uses, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - bitmap_set_bit (eh_block_artificial_uses, HARD_FRAME_POINTER_REGNUM); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + bitmap_set_bit (eh_block_artificial_uses, + HARD_FRAME_POINTER_REGNUM); } #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM if (fixed_regs[ARG_POINTER_REGNUM]) @@ -3580,11 +3579,11 @@ df_get_entry_block_def_set (bitmap entry_block_defs) /* Any reference to any pseudo before reload is a potential reference of the frame pointer. */ bitmap_set_bit (entry_block_defs, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER + /* If they are different, also mark the hard frame pointer as live. */ - if (!LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM)) + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER + && !LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM)) bitmap_set_bit (entry_block_defs, HARD_FRAME_POINTER_REGNUM); -#endif } /* These registers are live everywhere. */ @@ -3718,11 +3717,11 @@ df_get_exit_block_use_set (bitmap exit_block_uses) if ((!reload_completed) || frame_pointer_needed) { bitmap_set_bit (exit_block_uses, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER + /* If they are different, also mark the hard frame pointer as live. */ - if (!LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM)) + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER + && !LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM)) bitmap_set_bit (exit_block_uses, HARD_FRAME_POINTER_REGNUM); -#endif } /* Many architectures have a GP register even without flag_pic. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index c1974bb..9b2c4ec 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -715,11 +715,11 @@ gen_rtx_REG (machine_mode mode, unsigned int regno) if (regno == FRAME_POINTER_REGNUM && (!reload_completed || frame_pointer_needed)) return frame_pointer_rtx; -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - if (regno == HARD_FRAME_POINTER_REGNUM + + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER + && regno == HARD_FRAME_POINTER_REGNUM && (!reload_completed || frame_pointer_needed)) return hard_frame_pointer_rtx; -#endif #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && !HARD_FRAME_POINTER_IS_ARG_POINTER if (regno == ARG_POINTER_REGNUM) return arg_pointer_rtx; diff --git a/gcc/ira.c b/gcc/ira.c index 0750d11..9dcbc62 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -2341,19 +2341,20 @@ ira_setup_eliminable_regset (void) else df_set_regs_ever_live (eliminables[i].from, true); } -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM)) + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) { - SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM); - if (frame_pointer_needed) - SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM); + if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM)) + { + SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM); + if (frame_pointer_needed) + SET_HARD_REG_BIT (ira_no_alloc_regs, HARD_FRAME_POINTER_REGNUM); + } + else if (frame_pointer_needed) + error ("%s cannot be used in asm here", + reg_names[HARD_FRAME_POINTER_REGNUM]); + else + df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true); } - else if (frame_pointer_needed) - error ("%s cannot be used in asm here", - reg_names[HARD_FRAME_POINTER_REGNUM]); - else - df_set_regs_ever_live (HARD_FRAME_POINTER_REGNUM, true); -#endif #else if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM)) diff --git a/gcc/reginfo.c b/gcc/reginfo.c index 9015eeb..bc528e9 100644 --- a/gcc/reginfo.c +++ b/gcc/reginfo.c @@ -470,10 +470,9 @@ init_reg_sets_1 (void) } else if (i == FRAME_POINTER_REGNUM) ; -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - else if (i == HARD_FRAME_POINTER_REGNUM) + else if (!HARD_FRAME_POINTER_IS_FRAME_POINTER + && i == HARD_FRAME_POINTER_REGNUM) ; -#endif #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM else if (i == ARG_POINTER_REGNUM && fixed_regs[i]) ; diff --git a/gcc/regrename.c b/gcc/regrename.c index f995ffa..147aaa8 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -438,9 +438,8 @@ rename_chains (void) if (frame_pointer_needed) { add_to_hard_reg_set (&unavailable, Pmode, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - add_to_hard_reg_set (&unavailable, Pmode, HARD_FRAME_POINTER_REGNUM); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + add_to_hard_reg_set (&unavailable, Pmode, HARD_FRAME_POINTER_REGNUM); } FOR_EACH_VEC_ELT (id_to_chain, i, this_head) diff --git a/gcc/reload1.c b/gcc/reload1.c index 5a01045..82b106e 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -914,10 +914,9 @@ reload (rtx_insn *first, int global) spill_hard_reg (from, 1); } -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - if (frame_pointer_needed) + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER && frame_pointer_needed) spill_hard_reg (HARD_FRAME_POINTER_REGNUM, 1); -#endif + finish_spills (global); /* From now on, we may need to generate moves differently. We may also @@ -3281,13 +3280,13 @@ eliminate_regs_in_insn (rtx_insn *insn, int replace) for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) if (ep->from_rtx == SET_DEST (old_set) && ep->can_eliminate) { -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER /* If this is setting the frame pointer register to the hardware frame pointer register and this is an elimination that will be done (tested above), this insn is really adjusting the frame pointer downward to compensate for the adjustment done before a nonlocal goto. */ - if (ep->from == FRAME_POINTER_REGNUM + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER + && ep->from == FRAME_POINTER_REGNUM && ep->to == HARD_FRAME_POINTER_REGNUM) { rtx base = SET_SRC (old_set); @@ -3347,7 +3346,6 @@ eliminate_regs_in_insn (rtx_insn *insn, int replace) goto done; } } -#endif /* In this case this insn isn't serving a useful purpose. We will delete it in reload_as_needed once we know that this diff --git a/gcc/resource.c b/gcc/resource.c index 4f71aac..9a013b3 100644 --- a/gcc/resource.c +++ b/gcc/resource.c @@ -335,9 +335,8 @@ mark_referenced_resources (rtx x, struct resources *res, if (frame_pointer_needed) { SET_HARD_REG_BIT (res->regs, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - SET_HARD_REG_BIT (res->regs, HARD_FRAME_POINTER_REGNUM); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + SET_HARD_REG_BIT (res->regs, HARD_FRAME_POINTER_REGNUM); } for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) @@ -1190,9 +1189,9 @@ init_resource_info (rtx_insn *epilogue_insn) if (frame_pointer_needed) { SET_HARD_REG_BIT (end_of_function_needs.regs, FRAME_POINTER_REGNUM); -#if !HARD_FRAME_POINTER_IS_FRAME_POINTER - SET_HARD_REG_BIT (end_of_function_needs.regs, HARD_FRAME_POINTER_REGNUM); -#endif + if (!HARD_FRAME_POINTER_IS_FRAME_POINTER) + SET_HARD_REG_BIT (end_of_function_needs.regs, + HARD_FRAME_POINTER_REGNUM); } if (!(frame_pointer_needed && EXIT_IGNORE_STACK