on 2021/12/9 上午9:43, Jeff Law wrote:
> 
> 
> On 12/6/2021 7:15 PM, Kewen.Lin via Gcc-patches 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.
> OK
> jeff
> 

Thanks for the review, Jeff!  Committed as r12-5920.

BR,
Kewen

Reply via email to