Feature Request: nontrivial functions and vtable optimizations

downs default_357-line at yahoo.de
Tue Aug 12 01:45:08 PDT 2008


The overhead of vtable calls is well known.

For this reason, it may be worthwhile to include an optimization that essentially checks if a certain class is only inherited from a few times, like, <= three, in the visible program, and if so, replace vtable calls with a tree of classinfo pointer comparisons and direct function calls.

When I did this manually in some hobbyist path tracing code, I gained significant speed-ups, even though I didn't collect any hard numbers.

So, for instance, the equivalent D code would look like so:

class A { ... } class B : A { ... } class C : A { ... }

A a = genSomeObj();
// a.test();
if (a.classinfo == typeid(B)) (cast(B)cast(void*) a).test(); // call as if final
else if (a.classinfo == typeid(C)) (cast(C)cast(void*) a).test(); // dito
else a.test(); // fallback

Ideas?



More information about the Digitalmars-d mailing list