On Tue, Dec 17, 2013 at 10:29 AM, Sriraman Tallam <tmsri...@google.com> wrote:
> On Fri, Dec 13, 2013 at 5:06 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
>> On Mon, Dec 2, 2013 at 6:46 PM, Sriraman Tallam <tmsri...@google.com> wrote:
>>> On Thu, Nov 28, 2013 at 9:36 PM, Bernd Edlinger
>>> <bernd.edlin...@hotmail.de> wrote:
>>>> Hi,
>>>>
>>>> On Wed, 27 Nov 2013 19:49:39, Uros Bizjak wrote:
>>>>>
>>>>> On Mon, Nov 25, 2013 at 10:08 PM, Sriraman Tallam <tmsri...@google.com> 
>>>>> wrote:
>>>>>
>>>>>> I have attached a patch to fix this bug :
>>>>>>
>>>>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58944
>>>>>>
>>>>>> A similar problem was also reported here:
>>>>>> http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01050.html
>>>>>>
>>>>>>
>>>>>> Recently, ix86_valid_target_attribute_tree in config/i386/i386.c was
>>>>>> refactored to not depend on global_options structure and to be able to
>>>>>> use any gcc_options structure. One clean way to fix this is by having
>>>>>> target_option_default_node save all the default target options which
>>>>>> can be restored to any gcc_options structure. The root cause of the
>>>>>> above bugs was that ix86_arch_string and ix86_tune_string was not
>>>>>> saved in target_option_deault_node in PR58944 and
>>>>>> ix86_preferred_stack_boundary_arg was not saved in the latter case.
>>>>>>
>>>>>> This patch saves all the target options used in i386.opt which are
>>>>>> either obtained from the command-line or set to some default. Is this
>>>>>> patch alright?
>>>>>
>>>>> Things looks rather complicated, but I see no other solution that save
>>>>> and restore the way you propose.
>>>>>
>>>>> Please wait 24h if somebody has a different idea, otherwise please go
>>>>> ahead and commit the patch to mainline.
>>>>>
>>>>
>>>> Maybe you should also look at the handling or preferred_stack_boundary_arg
>>>> versus incoming_stack_boundary_arg in ix86_option_override_internal:
>>>>
>>>> Remember ix86_incoming_stack_boundary_arg is defined to
>>>> global_options.x_ix86_incoming_stack_boundary_arg.
>>>>
>>>> like this?
>>>>
>>>>   if (opts_set->x_ix86_incoming_stack_boundary_arg)
>>>>     {
>>>> -      if (ix86_incoming_stack_boundary_arg
>>>> +      if (opts->x_ix86_incoming_stack_boundary_arg
>>>>           < (TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2)
>>>> -          || ix86_incoming_stack_boundary_arg> 12)
>>>> +         || opts->x_ix86_incoming_stack_boundary_arg> 12)
>>>>         error ("-mincoming-stack-boundary=%d is not between %d and 12",
>>>> -               ix86_incoming_stack_boundary_arg,
>>>> +              opts->x_ix86_incoming_stack_boundary_arg,
>>>>                TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2);
>>>>       else
>>>>         {
>>>>           ix86_user_incoming_stack_boundary
>>>> -            = (1 << ix86_incoming_stack_boundary_arg) * BITS_PER_UNIT;
>>>> +           = (1 << opts->x_ix86_incoming_stack_boundary_arg) * 
>>>> BITS_PER_UNIT;
>>>>           ix86_incoming_stack_boundary
>>>>             = ix86_user_incoming_stack_boundary;
>>>>         }
>>>>
>>>
>>> Thanks for catching this. I will make this change in the same patch.
>>>
>>
>> Your change caused:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59492
>
> Thanks for fixing this. This is making me wonder if I am missing some

-g?

> other important flags. Is there a way to detect this? I originally
> looked at everything in i386.opt to form my list.
>

You should check all options in

./ada/gcc-interface/lang.opt
./c-family/c.opt
./common.opt
./lto/lang.opt
./go/lang.opt
./fortran/lang.opt
./java/lang.opt

to see if any options in them are relevant and should be preserved.

-- 
H.J.

Reply via email to