[LLVMdev] I want to do something moderately insane, please help!
Sarah Thompson
thompson at email.arc.nasa.gov
Wed Nov 29 14:57:19 PST 2006
Sarah Thompson wrote:
> Hi,
>
> As some of you may remember, I'm implementing an LLVM-based model
> checker. I'm doing something a little odd, in that mostly I'm using the
> interpreter (currently a hacked version of lli with threads) for most
> things because I need to hook into lots of stuff that would be difficult
> to manage otherwise, but I'm also using the jitter for some things that
> need to be fast and/or link with external code. I currently expose some
> functions from the code being checked that allow you to slot in your own
> thread management, but I need this to be as fast as possible because it
> gets called a *lot*. I have managed OK with simply exposing a function
> and jitting it, then calling it through the runFunction member of the
> Jitter class, which works fine but seems a little slow. How feasible
> would it be to get at the underlying function pointer directly, seeing
> as the type signature is well-known in advance, then just calling it
> with a normal C-style call to a function pointer, e.g. (*compfn)(a,b).
>
> Yes, this is all a bit nuts, and yes, it's not really how either the
> interpreter or the jitter was meant to be used, but if I can make this
> particular trick work, it will significantly speed up the model checker,
> particularly since I'll be able to use it for a few other things too.
>
>
OK, I've answered my own question. What you need to do is export an
initialisation function that returns a function pointer. You jit the
initialisation function (by calling it), which also causes the
address-taken function to be jitted. When you get the pointer back,
*that* pointer can be called directly from C++, with no performance
penalty. I think I'll be using this trick quite a bit.
Sarah
More information about the llvm-dev
mailing list