On Thu, Jul 1, 2010 at 10:29 PM, Taras Glek <tg...@mozilla.com> wrote:
> On 06/30/2010 03:06 PM, Jan Hubicka wrote:
>>
>> If you can find actual simple examples where -Os is losing size and speed
>> we can try
>> to do something about them.
>>
>
> According to our code size reports, inlining is completely screwed for C++
> wrapper classes like ones often used for smart pointers, arrays, etc. See
> http://people.mozilla.com/~tglek/codesize45.txt
>
> Would be really nice if this could be fixed in 4.5. It's tricky for us to
> switch to 4.5 otherwise.
>
> The following code inlines as expected under -Os in 4.4. It also inlines
> properly with -O1+ in 4.5. But it generates giant bloated code under -Os in
> 4.5.
>
> class Container {
> public:
>  Container() {
>    member = new int;
>  }
>
>  void cleanup() {
>    delete member;
>    member = 0;
>  }
>
>  int value() {
>    return *member;
>  }
>
>  ~Container() {
>    cleanup();
>  }
> private:
>  int *member;
> };
>
>
>
> int gimme() {
>  Container m;
>  return m.value();
> }

Without looking I bet the issue here is call_cost at -Os (which is 1).
In the above example we are only not inlining the constructor, which
is estimated as size 2 (a function call with one (constant) parameter).
Inlining that enlarges the caller as we'd replace a call without an
argument with one with an argument.

So the inlining decision isn't too bad for -Os here (which means
your testcase isn't a good representative of what is the issue).

Richard.

Reply via email to