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