Missing ExecutionEngine EngineKind::MCJIT ?

Greetings, I have a simple C++ EDSL working using the JIT execution engine.
When I upgraded to LLVM 3.2 (effortless upgrade, awesome stuff!) I thought I
would try taking the MCJIT for a spin after having read that the JIT is
considered to be "legacy".

So the changes I made to my code were:
+ #include <llvm/ExecutionEngine/MCJIT.h>
- #include <llvm/ExecutionEngine/JIT.h>
+ llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES mcjit native)
- llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)

However the following call now returns NULL:
EngineBuilder(TheModule).setEngineKind(EngineKind::JIT).setErrorStr(&error).create();

There doesn't appear to be an EngineKind::MCJIT option. Am I missing
something? Should EDSL authors stick to the old JIT for now? Is this a patch
a relative LLVM novice like myself could contribute?

Thanks!
-Josh

Josh Klontz <josh.klontz@gmail.com> writes:

Greetings, I have a simple C++ EDSL working using the JIT execution engine.
When I upgraded to LLVM 3.2 (effortless upgrade, awesome stuff!) I thought I
would try taking the MCJIT for a spin after having read that the JIT is
considered to be "legacy".

The JIT is not legacy yet.

So the changes I made to my code were:
+ #include <llvm/ExecutionEngine/MCJIT.h>
- #include <llvm/ExecutionEngine/JIT.h>
+ llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES mcjit native)
- llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)

However the following call now returns NULL:
EngineBuilder(TheModule).setEngineKind(EngineKind::JIT).setErrorStr(&error).create();

Don't remove `jit' from your LLVM component list above, even if you
plant to use MCJIT alone.

There doesn't appear to be an EngineKind::MCJIT option. Am I missing
something?

Use setUseMCJIT :

  [...] .setEngineKind(EngineKind::JIT).setUseMCJIT(true). [...]

Should EDSL authors stick to the old JIT for now?

MCJIT is not on a par with the JIT yet, featurewise. And probably it
will never be. The most glaring difference is that MCJIT is not a
Just-In-Time compiler, it is more like an traditional compiler that
outputs the resulting code to RAM instead of the HD.

[snip]