on 2021/12/9 下午11:21, Martin Liška wrote:
> On 12/7/21 03:15, Kewen.Lin wrote:
>> Hi,
>>
>> For a function with optimize pragma, it's possible that the target
>> options change as optimization options change. Now we create one
>> optimization option node when parsing pragma optimize, but don't
>> create target option node for possible target option changes. It
>> makes later processing not detect the target options have actually
>> changed and doesn't update the target options accordingly.
>>
>> This patch is to check whether target options have changed when
>> creating one optimization option node for pragma optimize, and
>> make one target option node if needed. The associated test case
>> shows the difference. Without this patch, the function foo1 will
>> perform unrolling which is unexpected. The reason is that flag
>> unroll_only_small_loops isn't correctly set for it. The value
>> is updated after parsing function foo2, but doesn't get restored
>> later since both decls don't have DECL_FUNCTION_SPECIFIC_TARGET
>> set and the hook think we don't need to switch. With this patch,
>> there is no unrolling for foo1, which is also consistent with the
>> behavior by replacing pragma by attribute whether w/ and w/o this
>> patch.
>>
>> Bootstrapped and regtested on x86_64-redhat-linux, aarch64-linux-gnu
>> and powerpc64{,le}-linux-gnu.
>>
>> Is it ok for trunk?
>>
>> BR,
>> Kewen
>> ---
>> gcc/ChangeLog:
>>
>> PR target/103515
>> * attribs.c (decl_attributes): Check if target options change and
>> create one node if so.
>>
>> gcc/testsuite/ChangeLog:
>>
>> PR target/103515
>> * gcc.target/powerpc/pr103515.c: New test.
>>
>> -----
>>
>
> Hello.
>
> I do support the patch as it does pretty similar thing to what I did in
> g:ebd5e86c0f41dc1d692f9b2b68a510b1f6835a3e.
> The revision was about pragmas.
>
> I can confirm the patch can bootstrap on x86_64-linux-gnu and survives
> regression tests.
>
> Martin
Hi Martin,
Thanks for the feedback and the pointer to your previous commit for the similar
issue,
I've added it in the commit log as one reference.
BR,
Kewen