[LLVMdev] Trying to use patchpoint in MCJIT

Filip Pizlo fpizlo at apple.com
Tue Dec 17 17:17:24 PST 2013


patchpoint is intended to be used in VMs that do their own linking, and so you wouldn't expect the function parameter to be resolved by LLVM.

Presumably, in VMKit, you could just plant a pointer constant to the function you wish to call initially?

-Filip


On Dec 17, 2013, at 2:42 PM, Gaël Thomas <gael.thomas00 at gmail.com> wrote:

> Hi all,
> 
> I'm trying to play with patchoint (with MCJIT and VMKit) and I don't
> understand something. I generate this call for my first patch point.
> Basically, I want to call f(0).
> 
> %5 = call i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(
>  i64 42, ;; patch point id is 42
>  i32 0,   ;; 0 bytes for the padding
>  i8* bitcast (i32 (i32)* @f to i8*), ;; my function f
>  i32 1,   ;; 1 argument
>  i32 0)   ;; the argument
> 
> I think that the types are correct (at least, the compiler seems happy
> with that:)). But when I'm trying to compile the code (that I generate
> from C++, it's not a bitcode file), I have this message:
> 
> Assertion failed: (isa<X>(Val) && "cast<Ty>() argument of incompatible
> type!"), function cast, file
> /Users/gthomas/research/vmkit4/llvm-src/include/llvm/Support/Casting.h,
> line 232.
> 
> With this stack (I only give the relevant part):
> 
>    frame #5: 0x000000010092ed44
> libjvm.dylib`llvm::SelectionDAGBuilder::visitPatchpoint() + 3780 at
> SelectionDAGNodes.h:610
>    frame #6: 0x000000010091f511
> libjvm.dylib`llvm::SelectionDAGBuilder::visitIntrinsicCall(this=0x0000000106ff4d20,
> I=0x0000000106fea460) + 10961 at SelectionDAGBuilder.cpp:5349
>    frame #7: 0x0000000100904c4a
> libjvm.dylib`llvm::SelectionDAGBuilder::visitCall(this=0x0000000106ff4d20,
> I=0x0000000106fea460) + 234 at SelectionDAGBuilder.cpp:5870
>    frame #8: 0x00000001008fc9ea
> libjvm.dylib`llvm::SelectionDAGBuilder::visit(this=0x0000000106ff4d20,
> I=0x0000000106fea460) + 74 at SelectionDAGBuilder.cpp:971
>    frame #9: 0x0000000100947e98
> libjvm.dylib`llvm::SelectionDAGISel::SelectBasicBlock(this=0x0000000106ff40d0,
> HadTailCall=0x00007fff5fbfe31e) + 40 at SelectionDAGISel.cpp:579
>    frame #10: 0x0000000100947aee
> libjvm.dylib`llvm::SelectionDAGISel::SelectAllBasicBlocks(this=0x0000000106ff40d0,
> Fn=0x0000000106fe7020) + 8174 at SelectionDAGISel.cpp:1192
>    frame #11: 0x0000000100944b94
> libjvm.dylib`llvm::SelectionDAGISel::runOnMachineFunction(this=0x0000000106ff40d0)
> + 1588 at SelectionDAGISel.cpp:434
>    frame #12: 0x0000000100afefc0
> libjvm.dylib`llvm::MachineFunctionPass::runOnFunction() + 128 at
> MachineFunctionPass.cpp:33
>    frame #13: 0x00000001010837fb
> libjvm.dylib`llvm::FPPassManager::runOnFunction(this=0x0000000106fedf20,
> F=0x0000000106fe7020) + 331 at LegacyPassManager.cpp:1538
>    frame #14: 0x0000000101083abb
> libjvm.dylib`llvm::FPPassManager::runOnModule(this=0x0000000106fedf20)
> + 59 at LegacyPassManager.cpp:1558
>    frame #15: 0x000000010108402d
> libjvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&)
> [inlined] llvm::legacy::PassManagerImpl::getContainedManager(N=0,
> this=0x0000000106feb9f0) + 429 at LegacyPassManager.cpp:1616
>    frame #16: 0x0000000101083e80
> libjvm.dylib`llvm::legacy::PassManagerImpl::run(this=0x0000000106feb9f0,
> M=0x0000000106fe6f30) + 544 at LegacyPassManager.cpp:1711
>    frame #17: 0x000000010108466d
> libjvm.dylib`llvm::legacy::PassManager::run() + 13 at
> LegacyPassManager.cpp:1746
>    frame #18: 0x0000000100eeaf8c
> libjvm.dylib`llvm::MCJIT::emitObject(this=0x0000000106fa69a0,
> M=0x0000000106fe6f30) + 236 at MCJIT.cpp:131
>    frame #19: 0x0000000100eeb2d3
> libjvm.dylib`llvm::MCJIT::generateCodeForModule(this=0x0000000106fa69a0,
> M=0x0000000106fe6f30) + 323 at MCJIT.cpp:169
>    frame #20: 0x0000000100eec022
> libjvm.dylib`llvm::MCJIT::getFunctionAddress(std::string const&)
> [inlined] llvm::MCJIT::getSymbolAddress(this=0x0000000106fa69a0,
> CheckFunctionsOnly=true) + 58 at MCJIT.cpp:279
>    frame #21: 0x0000000100eebfe8
> libjvm.dylib`llvm::MCJIT::getFunctionAddress(this=0x0000000106fa69a0,
> Name=0x00007fff5fbfe7b0) + 40 at MCJIT.cpp:295
> ...
> 
> So, I don't understand where could be my mistake?
> 
> Thank you in advance,
> Gaël
> 
> 
> 
> -- 
> -------------------------------------------------------------------
> Gaël Thomas, Associate Professor, UPMC
> http://pagesperso-systeme.lip6.fr/Gael.Thomas/
> -------------------------------------------------------------------
> 
> _______________________________________________
> 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 HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131217/cdefd8a7/attachment.html>


More information about the llvm-dev mailing list