[LLVMdev] appropriate for run-time compilation of DSL?

Reid Kleckner reid.kleckner at gmail.com
Mon Apr 11 09:24:03 PDT 2011


On Mon, Apr 11, 2011 at 11:50 AM, edA-qa mort-ora-y <eda-qa at disemia.com> wrote:
> I wish to know whether LLVM is an appropriate choice for a project I'm
> working on (excuse me if this is the wrong list for this question).
>
> I have a domain-specific-language (DSL) that is currently compiled to a
> custom byte-code and run in a VM. This is written in C++. The DSL can
> call high-level functions which are actually callbacks into the current
> non-DSL environment. That is, these functions /leave/ the VM and work in
> the the normal code and return results back into the VM loop.

That should work perfectly fine.  The LLVM JIT has support for
declaring and calling out to native functions in the application
through libffi.

One catch is that if you want to call into C++ you will need to deal
with a bit of the C++ ABI for any platforms you use.  For example, at
the LLVM IR level calls will use names mangled according to the ABI
rules.  You should be able to use clang as a library to help here.  If
you have straight C wrappers for your runtime functions, this
complexity goes away.

> For performance reasons I would now like to compile this code to native
> machine code. What I need is to be able to produce a binary block of
> data which can be distributed to other machines and run directly on
> them. That is, compilation would be on a central machine and worker
> machines would receive the code and execute it. From the docs and
> tutorial I'm unsure how I would go about doing this step.

There isn't great support for this in the LLVM JIT, but IIRC some
clients have managed this by subclassing the JITMemoryManager to copy
the code when the function has finished being emitted.  I don't know
if it's possible to ensure that the code will be position independent.

Reid



More information about the llvm-dev mailing list