[LLVMdev] Deep JIT specialization

Nicolas Capens nicolas.capens at gmail.com
Thu May 27 15:05:42 PDT 2010


Hi Chris,

Thanks for pointing me to that presentation! It helped me come up with a
strategy that I believe might work:

1) Use CloneFunction() to make a copy of the original unspecialized (but
optimized) function.
2) Specialize it using a custom function pass which identifies the
specialization parameters and substitutes them with given run-time
constants.
3) Run the function through a FunctionPassManager with some
post-specialization optimization passes (dead code, etc).
4) Use getPointerToFunction() to generate the machine code.
5) Call freeMachineCodeForFunction() when I no longer need a specific
specialization.

I'm not entirely sure yet how to implement some of these steps in practice,
but does this sound like the right approach or would you suggest something
else? Can I call eraseFromParent() on the specialized function after step 4
or only at 5?

Thank you!

Nicolas


On Thu, May 27, 2010 at 6:44 PM, Chris Lattner <clattner at apple.com> wrote:

>
> On May 27, 2010, at 6:08 AM, Nicolas Capens wrote:
>
> > Hi all,
> >
> > I'm attempting to use LLVM for run-time code specialization, but I'm
> facing a performance hurdle. I'm currently performing the specialization
> during the AST to LLVM IR translation, but unfortunately this leads to
> relatively slow recompiles as LLVM has to perform all the heavy
> (optimization) passes over and over again.
> >
> > So I was hoping that by first creating unspecialized LLVM IR, optimizing
> that as much as possible, and then performing the specializations starting
> from this optimized IR, the recompiles would be significantly faster.
> Currently the mem2reg and instcombine passes take the majority of
> compilation time, which could be avoided using "deep" JIT specialization.
> >
> > So my question is how do I get started with this? Currently tracking the
> specialization parameters and caching the generated specialized functions is
> done outside of LLVM. So I imagine I'll have to somehow inform LLVM of the
> semi-constant values of the specialization parameters, without losing the
> original (optimized) IR. Can I add and remove specialized function instances
> at run-time?
> >
>
> Hi Nicolas,
>
> Nate Begeman's "building an efficient JIT" talk about the llvm developer
> meeting last year (or the year before) is a great place to start looking for
> this sort of thing.
>
> -Chris
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100528/73ffe3b4/attachment.html>


More information about the llvm-dev mailing list