This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Turn on -fomit-frame-pointer by default for 32bit Linux/x86


On Thu, Aug 12, 2010 at 10:12 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> 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 ;)

As I said, it is complicated. We only changed the default setting
for 32bit Linux x86 targets.  All other x86 targets are unchanged.



-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]