[LLVMdev] Trying to use patchpoint in MCJIT

Gaël Thomas gael.thomas00 at gmail.com
Tue Dec 17 14:42:00 PST 2013


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/
-------------------------------------------------------------------




More information about the llvm-dev mailing list