Michael Matz <[EMAIL PROTECTED]> writes:

> If you were to implement something like virtual functions into the middle 
> end, it should be expressed in a fairly low level way IMHO.  E.g. a 
> virtual table simply being a vector of pointers to function decls (which 
> we can express already just fine).  That way they could also be written 
> out for LTO and read back in, and the question what function decl is 
> connected to what slot can also be answered trivially.  Then definite 
> class type merely has the characteristic that they can point to such a 
> function table, whereas indefinite class types (i.e. those whose runtime 
> type can be any derived one) can not.  E.g. I wouldn't try to model the 
> inheritance relationship.

There is some advantage to knowing class heirarchy relationships in
LTO.  Some C++ programs implement different virtual subclasses in
different files.  LTO can put those together.  When the compiler can
then determine that a variable definitely has a particular subclass,
it can devirtualize the virtual calls, turning an indirect function
call into a direct function calls, also exposing inlining
opportunities.

I don't know how important an optimization this is, but it seems like
a real one, and one which is only available if the LTO middle-end
knows something about class relationships.

Ian

Reply via email to