[LLVMdev] MCJIT
Ashok Nalkund
ashoknn at qualcomm.com
Mon May 14 11:12:00 PDT 2012
On 5/14/2012 10:40 AM, Ashok Nalkund wrote:
>>
>> Hm. OK, that's odd. It should change which constructor gets called in EngineBuilder::create() (which is in lib/ExecutionEngine/ExecutionEngine.cpp). Are you perhaps calling setUseMCJIT(true) after having already called create()? Can you step through EngineBuilder::create() and see what's happening there?
>>
>> -Jim
>
> lli.cpp instantiates the builder, sets options/flags etc and then calls
> create(). In my driver, I have:
>> llvm::EngineBuilder(m_LLVMMod).setErrorStr(&engErr).setUseMCJIT(true).create();
>
> which is what you mentioned. I'll step through create() and check whats
> happening.
My bad about MCJIT flag not being used (must have the code before I
switched to trunk). It *IS* used and the MCJIT constructor is being invoked.
So I reverted my changes, and recompiled and ran lli, but it gives the
error:
> LLVM ERROR: Inline asm not supported by this streamer because we don't have an asm parser for this target
I add back the call to InitializeNativeTargetAsmParser() in lli.cpp, but
compilation fails:
> make[4]: Leaving directory `/local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/build/tools/clang/tools/arcmt-test'
> /local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/build/tools/lli/Debug+Asserts/lli.o: In function `llvm::InitializeNativeTargetAsmParser()':
> /local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/llvm/include/llvm/Support/TargetSelect.h:149: undefined reference to `LLVMInitializeX86AsmParser'
> collect2: ld returned 1 exit status
So I add back to lli/CMakeLists.txt:
< set(LLVM_LINK_COMPONENTS mcjit jit interpreter nativecodegen bitreader
asmparser selectiondag)
> set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD} mcjit jit interpreter nativecodegen bitreader asmparser selectiondag)
lli/Makefile (a simple make invocation didnt seem to regenerate the
Makefile):
<LINK_COMPONENTS := mcjit jit interpreter nativecodegen bitreader
asmparser selectiondag
>LINK_COMPONENTS := all-targets mcjit jit interpreter nativecodegen bitreader asmparser selectiondag
Compiles and runs till lli is unable to resolve an external symbol.
In short, tools/lli/[lli.cpp,CMakeLists.txt] will need to be modified
for MCJIT to be used in lli. No need to comment out the code in
lib/Target/X86/X86CodeEmitter.cpp.
Thanks for correcting me. Any hints on the external symbol resolution:
> LLVM ERROR: Could not resolve external global address: _ZNSt3__14coutE
which seems to be cout from the std lib.
tia,
ashok
More information about the llvm-dev
mailing list