That makes it more mysterious then since I am indeed only calling a main function. Perhaps I have to invoke it a different way. Here's my call I have now: auto main = linker->getModule()->getFunction( "main" ); std::vector<llvm::GenericValue> args(2); args[0].IntVal = llvm::APInt( platform::abi_int_size, 0 ); args[1].PointerVal = nullptr; llvm::GenericValue gv = ee->runFunction( main, args ); On 08/11/13 11:14, Yaron Keren wrote:> MCJIT::runFunction supports only main-style argument passing but not > other cases like the JIT. > These types of arguments will work: > > (int, char**, char**) > (int, char**) > (int) > (void) > > The general case is not supported since it requires creating a small > stub function, compiling and running it on the fly, supported by JIT but > not MCJIT. > > However, with the supported calling sequences, you can probably replace > the char** with a void* to a structure so that practically anything can > be passed to your function inside the structure. > > Yaron > > > > 2013/11/8 edA-qa mort-ora-y <eda-qa at disemia.com <mailto:eda-qa at disemia.com>> > > I'm trying to get MCJIT working but I get the following errors: > Full-featured argument passing not supported yet! > UNREACHABLE executed at MCJIT.cpp:322! > I'm sure the first one will be a problem, but the second one prevents me > from testing anything. I don't know how to fix the problem. > > My code works when using the non-MC JIT, and I added to my > EngineBuilder: > .setUseMCJIT(true) > > Reading from a tutorial* I also tried finalizing the engine object: > ee->finalizeObject() > > I'd like to get this working since in the release notes for 3.4 it > indicates exception handling has been removed from the old JIT. I need > exception handling support and would like to get MCJIT working prior to > upgrading to 3.4 later. > > > *http://blog.llvm.org/2013/07/using-mcjit-with-kaleidoscope-tutorial.html > > -- > edA-qa mort-ora-y > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > Sign: Please digitally sign your emails. > Encrypt: I'm also happy to receive encrypted mail. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> > http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- edA-qa mort-ora-y -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Sign: Please digitally sign your emails. Encrypt: I'm also happy to receive encrypted mail.
Something must be wrong with the Function Type. Try to debug into runFunction to see which if condition fails. Just a guess, if this is on 64 bit system the first argument type may be int64 but needs to be int32. Yaron 2013/11/8 edA-qa mort-ora-y <eda-qa at disemia.com>> That makes it more mysterious then since I am indeed only calling a main > function. Perhaps I have to invoke it a different way. Here's my call I > have now: > > auto main = linker->getModule()->getFunction( "main" ); > > std::vector<llvm::GenericValue> args(2); > args[0].IntVal = llvm::APInt( platform::abi_int_size, 0 ); > args[1].PointerVal = nullptr; > llvm::GenericValue gv = ee->runFunction( main, args ); > > > > On 08/11/13 11:14, Yaron Keren wrote: > > MCJIT::runFunction supports only main-style argument passing but not > > other cases like the JIT. > > These types of arguments will work: > > > > (int, char**, char**) > > (int, char**) > > (int) > > (void) > > > > The general case is not supported since it requires creating a small > > stub function, compiling and running it on the fly, supported by JIT but > > not MCJIT. > > > > However, with the supported calling sequences, you can probably replace > > the char** with a void* to a structure so that practically anything can > > be passed to your function inside the structure. > > > > Yaron > > > > > > > > 2013/11/8 edA-qa mort-ora-y <eda-qa at disemia.com <mailto: > eda-qa at disemia.com>> > > > > I'm trying to get MCJIT working but I get the following errors: > > Full-featured argument passing not supported yet! > > UNREACHABLE executed at MCJIT.cpp:322! > > I'm sure the first one will be a problem, but the second one > prevents me > > from testing anything. I don't know how to fix the problem. > > > > My code works when using the non-MC JIT, and I added to my > > EngineBuilder: > > .setUseMCJIT(true) > > > > Reading from a tutorial* I also tried finalizing the engine object: > > ee->finalizeObject() > > > > I'd like to get this working since in the release notes for 3.4 it > > indicates exception handling has been removed from the old JIT. I > need > > exception handling support and would like to get MCJIT working prior > to > > upgrading to 3.4 later. > > > > > > * > http://blog.llvm.org/2013/07/using-mcjit-with-kaleidoscope-tutorial.html > > > > -- > > edA-qa mort-ora-y > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- > > Sign: Please digitally sign your emails. > > Encrypt: I'm also happy to receive encrypted mail. > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> > > http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > > > -- > edA-qa mort-ora-y > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > Sign: Please digitally sign your emails. > Encrypt: I'm also happy to receive encrypted mail. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131108/272ad662/attachment.html>
It was the return type which was i64. I changed it also to my abi_int_size and it works now. I have to take care of a few other type translations, but it looks like MCJIT is working now. Thank you. On 08/11/13 18:12, Yaron Keren wrote:> Something must be wrong with the Function Type. Try to debug into > runFunction to see which if condition fails. > Just a guess, if this is on 64 bit system the first argument type may be > int64 but needs to be int32. > > Yaron > > > > 2013/11/8 edA-qa mort-ora-y <eda-qa at disemia.com <mailto:eda-qa at disemia.com>> > > That makes it more mysterious then since I am indeed only calling a main > function. Perhaps I have to invoke it a different way. Here's my call I > have now: > > auto main = linker->getModule()->getFunction( "main" ); > > std::vector<llvm::GenericValue> args(2); > args[0].IntVal = llvm::APInt( platform::abi_int_size, 0 ); > args[1].PointerVal = nullptr; > llvm::GenericValue gv = ee->runFunction( main, args ); > > > > On 08/11/13 11:14, Yaron Keren wrote: > > MCJIT::runFunction supports only main-style argument passing but not > > other cases like the JIT. > > These types of arguments will work: > > > > (int, char**, char**) > > (int, char**) > > (int) > > (void) > > > > The general case is not supported since it requires creating a small > > stub function, compiling and running it on the fly, supported by > JIT but > > not MCJIT. > > > > However, with the supported calling sequences, you can probably > replace > > the char** with a void* to a structure so that practically > anything can > > be passed to your function inside the structure. > > > > Yaron > > > > > > > > 2013/11/8 edA-qa mort-ora-y <eda-qa at disemia.com > <mailto:eda-qa at disemia.com> <mailto:eda-qa at disemia.com > <mailto:eda-qa at disemia.com>>> > > > > I'm trying to get MCJIT working but I get the following errors: > > Full-featured argument passing not supported yet! > > UNREACHABLE executed at MCJIT.cpp:322! > > I'm sure the first one will be a problem, but the second one > prevents me > > from testing anything. I don't know how to fix the problem. > > > > My code works when using the non-MC JIT, and I added to my > > EngineBuilder: > > .setUseMCJIT(true) > > > > Reading from a tutorial* I also tried finalizing the engine > object: > > ee->finalizeObject() > > > > I'd like to get this working since in the release notes for 3.4 it > > indicates exception handling has been removed from the old > JIT. I need > > exception handling support and would like to get MCJIT working > prior to > > upgrading to 3.4 later. > > > > > > > *http://blog.llvm.org/2013/07/using-mcjit-with-kaleidoscope-tutorial.html > > > > -- > > edA-qa mort-ora-y > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- -- -- > > Sign: Please digitally sign your emails. > > Encrypt: I'm also happy to receive encrypted mail. > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> > <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>> > > http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > > > -- > edA-qa mort-ora-y > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > Sign: Please digitally sign your emails. > Encrypt: I'm also happy to receive encrypted mail. > >-- edA-qa mort-ora-y -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Sign: Please digitally sign your emails. Encrypt: I'm also happy to receive encrypted mail.