This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH: Turn on -fomit-frame-pointer by default for 32bit Linux/x86
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Richard Guenther <rguenther at suse dot de>, Jakub Jelinek <jakub at redhat dot com>, Mark Mitchell <mark at codesourcery dot com>, Richard Henderson <rth at redhat dot com>, jh at suse dot cz, Andi Kleen <andi at firstfloor dot org>, Andrew Haley <aph at redhat dot com>, David Daney <ddaney at caviumnetworks dot com>, Xinliang David Li <davidxl at google dot com>, Chris Lattner <clattner at apple dot com>, Gerald Pfeifer <gerald at pfeifer dot com>
- Date: Thu, 12 Aug 2010 19:12:08 +0200
- Subject: Re: PATCH: Turn on -fomit-frame-pointer by default for 32bit Linux/x86
- References: <AANLkTinbviPWO-hDfgL=31x=st_LA2frCPPYXtscEAhX@mail.gmail.com> <AANLkTim1L=eJGVO92S8_g+VP1ZUF4-O2O8KBUMB1UcwB@mail.gmail.com> <AANLkTi=7pqkdQjtDbqTSh-TAEa1L3TjBXgzXX2=znS4M@mail.gmail.com> <AANLkTi=FxbGb=sqr-+L0_tHwunFQS+0AqabarkEG10n7@mail.gmail.com> <AANLkTikUX0WLkiBFF+1eE8X44PsKyVNL6GNShPapoGo-@mail.gmail.com> <AANLkTi==ByATdy=JQrZJ05LwwcvoC0x+opVApWAEiMyr@mail.gmail.com>
On Thu, Aug 12, 2010 at 7:06 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>>>>> 2010-08-12 ?H.J. Lu ?<hongjiu.lu@intel.com>
>>>>>> ? ? ? ? ? ?Uros Bizjak ?<ubizjak@gmail.com>
>>>>>>
>>>>>> ? ? ? ?* config.gcc: Handle --enable-frame-pointer.
>>>>>>
>>>>>> ? ? ? ?* configure.ac: Add --enable-frame-pointer.
>>>>>> ? ? ? ?* configure: Regenerated.
>>>>>>
>>>>>> ? ? ? ?* config/i386/i386.c (USE_IX86_FRAME_POINTER): Default to 0.
>>>>>> ? ? ? ?(override_options): Enable -fomit-frame-pointer for 32bit code
>>>>>> ? ? ? ?if compiling for TARGET_MACHO and not optimizing for size
>>>>>> ? ? ? ?unless configured with --enable-frame-pointer. ?Enable
>>>>>> ? ? ? ?-fasynchronous-unwind-tables unless configured with
>>>>>> ? ? ? ?--enable-frame-pointer. ?Enable -maccumulate-outgoing-args
>>>>>> ? ? ? ?by default unless configured with --enable-frame-pointer.
>>>>>>
>>>>>
>>>>> Please change the ChangeLog text to something like:
>>>>>
>>>>> If not configured with --enable-frame-pointer, enable
>>>>> -fomit-frame-pointer (but not for TARGET_MACHO or when optimizing for
>>>>> size), enable -fasynchronous-unwind-tables and
>>>>> -maccumulate-outgoing-args by default.
>>>>>
>>>>
>>>> I checked it in with updated ChangeLog.
>>>>
>>>> How should we document it? We currently have
>>>>
>>>> --
>>>> @item -fomit-frame-pointer
>>>> @opindex fomit-frame-pointer
>>>> Don't keep the frame pointer in a register for functions that
>>>> don't need one. ?This avoids the instructions to save, set up and
>>>> restore frame pointers; it also makes an extra register available
>>>> in many functions. ?@strong{It also makes debugging impossible on
>>>> some machines.}
>>>>
>>>> On some machines, such as the VAX, this flag has no effect, because
>>>> the standard calling sequence automatically handles the frame pointer
>>>> and nothing is saved by pretending it doesn't exist. ?The
>>>> machine-description macro @code{FRAME_POINTER_REQUIRED} controls
>>>> whether a target machine supports this flag. ?@xref{Registers,,Register
>>>> Usage, gccint, GNU Compiler Collection (GCC) Internals}.
>>>>
>>>> Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
>>>> --
>>>>
>>>> It was never correct for x86 and is wrong today.
>>>
>>> Perhaps something like:
>>>
>>> Index: invoke.texi
>>> ===================================================================
>>> --- invoke.texi (revision 163191)
>>> +++ invoke.texi (working copy)
>>> @@ -5993,6 +5993,11 @@
>>> ?whether a target machine supports this flag. ?@xref{Registers,,Register
>>> ?Usage, gccint, GNU Compiler Collection (GCC) Internals}.
>>>
>>> +Starting from GCC version 4.6, the default setting for 32-bit x86 targets
>>> +has been changed to @option{-fomit-frame-pointer}. New behavior can be
>>> +reverted back to @option{-fno-omit-frame-pointer} by configuring GCC with
>>> +the @option{--enable-frame-pointer} configure option.
>>> +
>>> ?Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
>>>
>>> ?@item -foptimize-sibling-calls
>>>
>>
>> We default to --disable-frame-pointer only for 32bit x86 Linux and
>> MACHO target always has -fno-omit-frame-pointer as default.
>>
>>
>
> How about this patch?
>
>
> --
> H.J.
> 2010-08-12 ?Uros Bizjak ?<ubizjak@gmail.com>
>
> ? ? ? ?* doc/invoke.texi: Update -fomit-frame-pointer for 32-bit Linux
> ? ? ? ?x86 targets.
>
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index edce703..dbcc212 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -5993,6 +5993,11 @@ machine-description macro
> @code{FRAME_POINTER_REQUIRED} controls
> ?whether a target machine supports this flag. ?@xref{Registers,,Register
> ?Usage, gccint, GNU Compiler Collection (GCC) Internals}.
>
> +Starting from GCC version 4.6, the default setting for 32-bit Linux x86
> +targets has been changed to @option{-fomit-frame-pointer}. ?New behavior
> +can be reverted back to @option{-fno-omit-frame-pointer} by configuring
> +GCC with the @option{--enable-frame-pointer} configure option.
> +
> ?Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
>
> ?@item -foptimize-sibling-calls
"... the default setting for 32-bit non-Darwin x86 targets has been
changed to @option{-fomit-frame-pointer} when not optimizing for
size." is what the source says ;)
Uros.