Hi all,
I'm in a very preliminary phase of a language project which requires some specific optimizations to be reasonably efficient.
LLVM already looks very good; I'd just like to know whether I can push these optimizations through LLVM to the JIT phase (which, as far as I understand the docs, is a pretty powerful part of LLVM).
The optimizations that I need to get to work are:
* Tail call elimination.
* Constant evaluation. To implement this, the JIT phase would have to
evaluate the constant and somehow store it so that future runs don't
need to reevaluate it.
* Dead code elimination, enabled by constant evaluation.
* Monomorphisation, i.e. constant evaluation may establish that some
data structures aren't polymorphic, so it would be worth generating
code that keeps integers in registers instead of generating boxed
representations on the heap. Again, constant evaluation can enable
this optimization.
I'll be happy to know the answer for each optimization, whether it's "yes", "not yet", or a flat "no".
The answers probably won't affect whether I use LLVM. They will, however, tell me how much work I can shove off to LLVM
Regards,
Jo