From patchwork Fri Oct 1 10:41:27 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Clifton X-Patchwork-Id: 66334 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]) by ozlabs.org (Postfix) with SMTP id BC767B70AE for ; Fri, 1 Oct 2010 20:41:41 +1000 (EST) Received: (qmail 11177 invoked by alias); 1 Oct 2010 10:41:39 -0000 Received: (qmail 11162 invoked by uid 22791); 1 Oct 2010 10:41:37 -0000 X-SWARE-Spam-Status: No, hits=-5.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, SPF_HELO_PASS, TW_FC, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 01 Oct 2010 10:41:31 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o91AfTBA028812 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 1 Oct 2010 06:41:29 -0400 Received: from Gift.redhat.com (vpn2-10-196.ams2.redhat.com [10.36.10.196]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o91AfR7h021595 for ; Fri, 1 Oct 2010 06:41:28 -0400 From: Nick Clifton To: gcc-patches@gcc.gnu.org Subject: RFA; Add option to control combine-stack-adjustments pass Date: Fri, 01 Oct 2010 11:41:27 +0100 Message-ID: MIME-Version: 1.0 X-IsSubscribed: yes 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 Hi Guys, I recently ran into a problem with GCC's combine stack adjustment pass. (It is breaking the relationship between CC0-setter and CC0-user). I have not tracked down the exact cause of this problem yet, but I did find it odd that there was no way to control the use of the optimization from the command line. So I have created the patch below. This patch adds a new command line option: -fcombine-stack-adjustments which is enabled by default at -O1 and greater and which controls the operation of the combine stack adjustments pass. Tested without regressions on an i686-pc-linux-gnu target. OK to apply ? Cheers Nick gcc/ChangeLog 2010-10-01 Nick Clifton * common.opt: Add -fcombine-stack-adjustments. * opts.c (decode_options): Enable -fcombine-stack-adjustments at -O1. * combine-stack-adj.c (gate_handle_stack_adjustments): Check * flag_combine_stack_adjustments. * doc.invoke.texi: Document the new option. Index: gcc/doc/invoke.texi =================================================================== --- gcc/doc/invoke.texi (revision 164830) +++ gcc/doc/invoke.texi (working copy) @@ -334,7 +334,8 @@ -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol --fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol +-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol +-fcprop-registers -fcrossjumping @gol -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol -fcx-limited-range @gol -fdata-sections -fdce -fdce @gol @@ -6618,6 +6619,13 @@ Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. +@item -fcombine-stack-adjustments +@opindex fcombine-stack-adjustments +Tracks stack adjustments (pushes and pops) and stack memory references +and then tries to find ways to combine them. + +Enabled by default at @option{-O1} and higher. + @item -fconserve-stack @opindex fconserve-stack Attempt to minimize stack usage. The compiler will attempt to use less Index: gcc/opts.c =================================================================== --- gcc/opts.c (revision 164830) +++ gcc/opts.c (working copy) @@ -801,6 +801,7 @@ flag_tree_copy_prop = opt1; flag_tree_sink = opt1; flag_tree_ch = opt1; + flag_combine_stack_adjustments = opt1; /* -O2 optimizations. */ opt2 = (optimize >= 2); Index: gcc/common.opt =================================================================== --- gcc/common.opt (revision 164830) +++ gcc/common.opt (working copy) @@ -640,6 +640,10 @@ Common Report Var(flag_check_data_deps) Compare the results of several data dependence analyzers. +fcombine-stack-adjustments +Common Report Var(flag_combine_stack_adjustments) Optimization +Looks for opportunities to reduce stack adjustments and stack references. + fcommon Common Report Var(flag_no_common,0) Optimization Do not put uninitialized globals in the common section Index: gcc/combine-stack-adj.c =================================================================== --- gcc/combine-stack-adj.c (revision 164830) +++ gcc/combine-stack-adj.c (working copy) @@ -546,7 +546,7 @@ static bool gate_handle_stack_adjustments (void) { - return (optimize > 0); + return flag_combine_stack_adjustments; } static unsigned int