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] Fix PR58944


On Thu, Nov 28, 2013 at 9:36 PM, Bernd Edlinger
<bernd.edlinger@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 <tmsriram@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.

Sri

> Note however that opts_set always points to global_options_set.
> so this logic combines the stat of global_options_set and the
> target_option_default_node.



>
>
> Bernd.
>
>
>> Thanks,
>> Uros


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