On 25/07/12 17:30, Richard Guenther wrote:
On Wed, Jul 25, 2012 at 4:07 PM, Selvaraj, Senthil_Kumar <[email protected]> wrote:Declaring a function with __attribute__((optimize("O0")) turns off inlining for the translation unit (atleast) containing the function (see output at the end). Is this expected behavior?Not really. The optimize attribute processing should only affect flags it saves. -f[no-]inline is not meaningful per function and we have the noinline attribute for more proper handling. That said, I consider the optimize attribute code seriously broken and unmaintained (but sometimes useful for debugging - and only that).
That's a pity. It's understandable - changing optimisation levels on different functions is always going to be problematic, since inter-function optimisations (like inlining) are going to be difficult to define. But sometimes it could be nice to use specific optimisations in specific places, such as loop unrolling in a critical function while other code is to be optimised for code size. Does "#pragma Gcc optimize" work more reliably?
