[LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error

Ralf Karrenberg Chareos at gmx.de
Wed Aug 31 01:51:50 PDT 2011


Hi Matt, hi Bruno,

I am still struggling to use AVX via MCJIT on TOT... did you succeed yet?

I seem to be unable to even get lli to run some code with the
"use-mcjit" flag.
I attached a test case that works fine for "lli y.bc" but exits with an
error for "lli -use-mcjit y.bc":
"LLVM ERROR: Unknown object format"

If I call InitializeAllTargetMCs() before creating the execution engine,
I end up with linker errors for PPC, MIPS, and MSP430 like this one:

llvm-svn-install/lib/libLLVMPowerPCDesc.a(PPCMCTargetDesc.o): In
function `PPCInstPrinter':
llvm-svn/lib/Target/PowerPC/MCTargetDesc/../InstPrinter/PPCInstPrinter.h:28:
undefined reference to `vtable for llvm::PPCInstPrinter'

However, I noticed that lli does neither call InitializeAllTargetMCs(),
nor does it call LLVMLinkInMCJIT() and LLVMLinkInJIT(). Adapting my code
to lli yields the same problem as for lli (unknown object format).

Any more ideas?

Best,
Ralf

Matt Pharr wrote:
> Following along from lli code, if you add a call to InitializeNativeTargetAsmPrinter() during setup, it gets a bit farther and crashes rather than issuing that error.  (Rebuilding with debugging symbols now to dig into it further…)
> 
> -matt
> 
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
> 0x000000010000349e in llvm::MCJITMemoryManager::startFunctionBody ()
> (gdb) where
> #0  0x000000010000349e in llvm::MCJITMemoryManager::startFunctionBody ()
> #1  0x0000000100003ea0 in llvm::RuntimeDyldImpl::extractFunction ()
> #2  0x00000001000059a5 in llvm::RuntimeDyldMachO::loadSegment64 ()
> #3  0x000000010000493d in llvm::RuntimeDyldMachO::loadObject ()
> #4  0x0000000100003cf9 in llvm::RuntimeDyld::loadObject ()
> #5  0x00000001000032e5 in llvm::MCJIT::MCJIT ()
> #6  0x00000001000021c2 in llvm::MCJIT::createJIT ()
> #7  0x0000000100023274 in llvm::EngineBuilder::create ()
> #8  0x0000000100001417 in lRunTest (fn=0x7fff5fbffb3a "a.bc") at bug.cpp:44
> #9  0x000000010000175a in main (argc=2, argv=0x7fff5fbff9c8) at bug.cpp:61
> (gdb) quit
> 
> 
> On Aug 26, 2011, at 7:58 AM, Ralf Karrenberg wrote:
> 
>> Ah, now that makes sense. Guess I was a little over-eager with my
>> bugreport. Thanks! :)
>>
>> However, I am now running into the same Problem as Matt ("Target does
>> not support MC emission!").
>>
>> Best,
>> Ralf
>>
>> Am 25.08.2011 19:32, schrieb Bruno Cardoso Lopes:
>>> Hi Ralf,
>>>
>>> FYI, old JIT doesn't support AVX at all, no encoding info, etc... The
>>> only way to use AVX+JIT is using MCJIT, which contains the correct
>>> encoding, but unfortunately the framework isn't good yet as the old
>>> one is.
>>>
>>> On Thu, Aug 25, 2011 at 10:12 AM, Ralf Karrenberg<Chareos at gmx.de>  wrote:
>>>> Hi Matt,
>>>>
>>>> I am unsure about MCJIT, but I guess the problem is the same.
>>>> Just like when invoking llc, you need to pass the information to use AVX
>>>> (llc -mattr=+avx).
>>>> I guess the corresponding code should look like this:
>>>>
>>>>     llvm::EngineBuilder engineBuilder(module);
>>>>     engineBuilder.setErrorStr(&eeError);
>>>>     engineBuilder.setEngineKind(llvm::EngineKind::JIT);
>>>>     engineBuilder.setUseMCJIT(true);
>>>>     engineBuilder.setMCPU("corei7-avx");
>>>>     std::vector<std::string>  attrs;
>>>>     attrs.push_back("avx");
>>>>     engineBuilder.setMAttrs(attrs);
>>>>     llvm::ExecutionEngine *ee = engineBuilder.create();
>>>>
>>>> Note that I have just today filed a bug report also related to jitted
>>>> AVX: http://llvm.org/bugs/show_bug.cgi?id=10742
>>>> Thus, it might very well be the case that I am also mistaken and need to
>>>> do something different.
>>>>
>>>> Best,
>>>> Ralf
>>>>
>>>> Am 25.08.2011 13:16, schrieb Matt Pharr:
>>>>> I'm trying to wire up some code to use the MC-based JIT; my understanding is that it should be able to JIT AVX code (and that the regular JIT cannot).  However, I'm getting the error "Target does not support MC emission!" when I call EngineBuilder::create().  I assume that I'm just not doing something necessary for initialization, but I'm not sure what it would be--I am calling all of:
>>>>>
>>>>>      llvm::InitializeNativeTarget();
>>>>>      llvm::InitializeAllTargetMCs();
>>>>>      LLVMLinkInMCJIT();
>>>>>      LLVMLinkInJIT();
>>>>>
>>>>> and the module I'm trying to load does have a reasonable target:
>>>>>
>>>>> target triple = "x86_64-apple-darwin11.0.0"
>>>>>
>>>>> I've attached a short test case that has the sequence of calls that I'm making and one of the bitcode files I'm trying to use.  I'd be happy for any guidance or suggestions.
>>>>>
>>>>> Thanks,
>>>>> -matt
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>
>>>
>>>
> 
> 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: y.ll
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110831/d9d94ae2/attachment.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: y.bc
Type: application/octet-stream
Size: 776 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110831/d9d94ae2/attachment.obj>


More information about the llvm-dev mailing list