Bruno Cardoso Lopes
2011-Aug-25 17:32 UTC
[LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
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 >-- Bruno Cardoso Lopes http://www.brunocardoso.cc
Ralf Karrenberg
2011-Aug-26 06:58 UTC
[LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
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 >> > > >
Matt Pharr
2011-Aug-26 07:04 UTC
[LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
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 >>> >> >> >>
Possibly Parallel Threads
- [LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
- [LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
- [LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
- [LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error
- [LLVMdev] Trouble using the MCJIT: "Target does not support MC emission" error