On Tuesday12/7/10 2:58 PM, Stéphane Letz wrote:
I'm quite dubious of any real optimization you
would achieve with this kind of approach, using LLVM.
AFAIKS LLVM link time optimization allows some kind of inter module
inlining or
possibly constant
propagation
Well, optimizations can be added :->.
Anyway, in my case (jMax, but it valid for other patch based langauges),
things like inlining and loop fusion and software pipelining would help
a lot for patches with simple objects like add and multiply.
Again staying in the imperative world makes things
much more complicated... go functional!
I was born as LISP programmer, so, nothing against, just tell me what to
do with existing code bases :->
PS: BTW LLVM is a really nice tool and very
interesting things can be done with it, like using LLVM bitcode format as an interchange
format for different architectures and using the JIT for dynamic compilation. We can
already do that with Faust LLVM backend where we can generate a bitcode binary, then load
it and JIT with a generic "LLVM faust plug-in" loader. This would allow the same
bitcode object to be produced by the Faust online compiler for instance and be executed on
any target machine.
Great: now image to use a common framework and standard to make Faust
generate bitcode interoperable with LLVM plugins generated with other
code, and to have an execution framework for these plugin that can be
shared between multiple applications.
That would solve quite a number of boring engineering problems, like
having wrapper for faust (for jMax, for Pd etc etc) objects for a dozen
or so of applications.
OK, may be it is just a dream, but LLVM seems to be an interesting
framework to use for this purpose.
Maurizio