[LLVMdev] Runtime optimization of C++ code with virtual functions
Stéphane Letz
letz at grame.fr
Tue Jun 26 07:21:06 PDT 2007
>
> On Thursday 21 June 2007 13:57, St?phane Letz wrote:
>
>>>> I understand that the disassemblying portion need to be
>>>> rewritten. Is
>>>> there anything else that would prevent this approach from working?
>>>> Again, haven't looked into LLVM yet, so I can immagine there
>>>> might be
>>>> problems in describing physical registers in the IR and at some
>>>> point
>>>> stuff must be exactly where the pre-existing code expects it. I
>>>> don;t
>>>> want to take your time, but if you could elaborate a bit it might
>>>> prevent me from going down the wrong path.
>>>
>>> This should work, I don't expect you to run into any significant
>>> problems.
>>> When you're rewriting the LLVM IR for the indirect call, you can
>>> just
>>> replace it with a direct call to the native code.
>>
>> Compared to template based specialization this would have the
>> advantage of being dynamic.
>
> But templates have the advantage of being able to be inlined. This
> is a much
> more important transformation than simply converting an indirect
> call to a
> direct one, especially on modern implementations like Core or Opteron.
>
> You approach is going to make inlining very difficult, I think.
> Not that
> there's a whole lot that can be done about it, given the binary
> translation
> going on. For example, how would you inline calls to send() where
> transport()
> has been inlined (assuming send() wasn't already inlined)?
>
> Is there some other set of transformations you have in mind to
> generate more
> efficient code for transport() at run time? Partial evaluation
> might be
> interesting, but that's applicable whether or not transport() is
> virtual. In
> fact, virtual call resolution is a form of partial evaluation where
> the
> run-time constants are the "this" pointer and its most-derived
> subclass type.
>
> If you really want to generate fast code, it might be worth your
> while to
> implement more general partial evaluation and specialization. If
> you make it
> general enough, you'll get run-time virtual call resolution "for
> free."
>
> You might also have a look at the Self papers. The Self team did a
> lot of
> work on runtime optimization of dynamic dispatch. IIRC they also
> did some
> partial evaluation work.
>
> -Dave
>
>
Thanks. Basically this question about " virtual functions" came after
several other one I already posted on the list on "partial evaluation
and specialization", and I would be interested to do something more
general on that theme.
Stephane Letz
More information about the llvm-dev
mailing list