On 5/14/2012 9:18 AM, Jim Grosbach wrote:> > On May 14, 2012, at 9:07 AM, Ashok Nalkund<ashoknn at qualcomm.com> wrote: > >> I was able to get past the error by calling InitializeNativeTargetAsmParser() in my code. Now I have a failure in resolving external libraries, so looking into that (recompiled with --enable-ffi but I now get an error LLVMgold.so not found). >> >> Then I hda to disable the following code in lib/Target/X86/X86CodeEmitter.cpp: >>> case TargetOpcode::INLINEASM: >>> // We allow inline assembler nodes with empty bodies - they can >>> // implicitly define registers, which is ok for JIT. >>> //if (MI.getOperand(0).getSymbolName()[0]) >>> // report_fatal_error("in X86CodeEmitter.cpp JIT does not support inline asm!"); >>> break; >> >> otherwise, when it sees a non-zero char in the inline asm (say load) and report failure and die. > > If you're hitting that code, you're running the old JIT (which does indeed not support inline assembly), not the MCJIT. >Do I need to enable anything at configure, my configure looks like this:> ../llvm/configure --enable-libffi --enable-targets=host-only --prefix=/local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/build/binI added the enable-libffi when trying to figure out resolving external libs. thanks, ashok
On May 14, 2012, at 9:42 AM, Ashok Nalkund <ashoknn at qualcomm.com> wrote:> > On 5/14/2012 9:18 AM, Jim Grosbach wrote: >> >> On May 14, 2012, at 9:07 AM, Ashok Nalkund<ashoknn at qualcomm.com> wrote: >> >>> I was able to get past the error by calling InitializeNativeTargetAsmParser() in my code. Now I have a failure in resolving external libraries, so looking into that (recompiled with --enable-ffi but I now get an error LLVMgold.so not found). >>> >>> Then I hda to disable the following code in lib/Target/X86/X86CodeEmitter.cpp: >>>> case TargetOpcode::INLINEASM: >>>> // We allow inline assembler nodes with empty bodies - they can >>>> // implicitly define registers, which is ok for JIT. >>>> //if (MI.getOperand(0).getSymbolName()[0]) >>>> // report_fatal_error("in X86CodeEmitter.cpp JIT does not support inline asm!"); >>>> break; >>> >>> otherwise, when it sees a non-zero char in the inline asm (say load) and report failure and die. >> >> If you're hitting that code, you're running the old JIT (which does indeed not support inline assembly), not the MCJIT. >> > > Do I need to enable anything at configure, my configure looks like this: >> ../llvm/configure --enable-libffi --enable-targets=host-only --prefix=/local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/build/bin > > I added the enable-libffi when trying to figure out resolving external libs. >No, selecting MCJIT vs. the old JIT is done in the EngineBuilder. If you're using lli, you can pass -use-mcjit on the command line. If you're using your own driver, you can use the lli.cpp for a reference. -Jim
On 5/14/2012 9:51 AM, Jim Grosbach wrote:> >>> >>> If you're hitting that code, you're running the old JIT (which does indeed not support inline assembly), not the MCJIT. >>> >> >> Do I need to enable anything at configure, my configure looks like this: >>> ../llvm/configure --enable-libffi --enable-targets=host-only --prefix=/local/mnt/workspace/ashoknn/crd/neo/llvm/proto/llvmsvn/build/bin >> >> I added the enable-libffi when trying to figure out resolving external libs. >> > > > No, selecting MCJIT vs. the old JIT is done in the EngineBuilder. If you're using lli, you can pass -use-mcjit on the command line. If you're using your own driver, you can use the lli.cpp for a reference. > > -JimThats what I was pointed to earlier, and following that I set the flag in EngineBuilder.setUseMCJIT(true). I looked at the code of EngineBuilder, it saves the flag but the flag doesnt seem to be used anywhere. Am I missing something? thanks, ashok