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][i386]Fix PR 57756


Forgot to add the test case. Patch updated.

Sri

On Fri, Sep 20, 2013 at 7:06 PM, Sriraman Tallam <tmsriram@google.com> wrote:
> On Wed, Aug 14, 2013 at 3:38 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Wed, Aug 14, 2013 at 2:02 AM, Sriraman Tallam <tmsriram@google.com>
>> wrote:
>>>
>>> Hi,
>>>
>>>     I have attached a patch to fix PR57756.  Description:  The
>>> following program,
>>>
>>> __attribute__((always_inline,target("sse4.2")))
>>> __inline int callee ()
>>> {
>>>   return 0;
>>> }
>>>
>>> __attribute__((target("sse")))
>>> __inline int caller ()
>>> {
>>>   return callee();
>>> }
>>>
>>> does not generate an error and callee is inlined into caller. This is
>>> because callee has a higher target ISA.  Interchanging the position of
>>> caller and callee will generate the correct error. Also, removing the
>>> target attribute from caller will generate the error.
>>>
>>> The reason for the bug is that when the caller's target options are
>>> processed, global_options contain the ISA flags of the callee
>>> (previously processed) and doing this in i386-common.c, where opts is
>>> global_options:
>>>
>>> opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
>>>
>>> is not changing global options.  The fix is to reset global_options to
>>> the default each time a new target option needs to be processed.
>>
>>
>> Shouldn't  ix86_valid_target_attribute_tree be refactored to work on a
>> selected
>> opt structure rather than global_options?
>
> I have attached a patch that does the refactoring of
> ix86_valid_target_attribute_tree. In that process I had to refactor
> ix86_valid_target_attribute_inner_p and ix86_option_override_internal.
> This made it a large patch because global_options structure is touched
> by these functions in multiple places and through vvarious aliases
> like ix86_arch_string for instance. In effect, this frees these
> functions from depending on global_options and the code in
> ix86_alid_target_attribute_p shows how the original bug can be fixed
> by just using a different gcc_options structure.
>
> Please review.
>
> Thanks
> Sri
>
>
>
>> Richard.
>>
>>>
>>> Patch ok?
>>>
>>> Thanks
>>> Sri
>>
>>

Attachment: pr57756.txt
Description: Text document


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