This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: On inlining in C++
> > There are tons of messages in this (or related thread) so it might be
> > possible that I missed a message that disagreed with the
> > interpretation of the documentation I quoted. Can you give reference
> > to such a message?
On Tue, Aug 05, 2003 at 11:16:56AM -0700, Geoff Keating wrote:
> I would point out that the documentation says "as fast as a macro",
> but it should really say "as fast or faster than a macro".
Ah, but even if we fix the inlining issues, we still aren't keeping the
promise: inline functions are still slower in many cases if struct/class
objects with more than one member are passed by reference.
Compile the following code with "gcc -O2 -S il.C" using the trunk on x86,
and take a look. The problem is that we prematurely commit the tmp object
to the stack, even though after inlining its address is not taken.
--------------------------------------
struct bar { int i; int j;};
#define MACRO(foo) (foo).i + (foo).j
inline int func(const bar& foo) {
return foo.i + foo.j;
}
int call_macro()
{
bar tmp;
tmp.i = 1;
tmp.j = 2;
return MACRO(tmp);
}
int call_func()
{
bar tmp;
tmp.i = 1;
tmp.j = 2;
return func(tmp);
}
--------------------------------------