[LLVMdev] Inter-module calls

Sean Gies sean.gies at caustic.com
Fri Jul 8 13:42:12 PDT 2011

Is there a preferred approach for an LLVM-based JIT-compiler to make 
calls from run-time generated functions in module A to bitcode-loaded 
functions in module B?

A naive CallInst across the boundary fails verification. Calling it as 
an external function fails to resolve, even if both ModuleA and ModuleB 
are in the same ExecutionEngine. I can think of two ways around this:

1. Create a constant function pointer in ModuleA using the value from 
EE.getPointerToFunction(FunctionB). This seems trivial, but I am 
concerned it will prevent many optimizations.

2. Copy functions from ModuleB into ModuleA. This appears to be a 
non-trivial operation. I could use Linker::LinkModules(ModuleA, 
ModuleB), but it seems rather inefficient to clone an entire module just 
to get at one function. Furthermore, since we maintain many separate 
run-time-generated modules, it would be especially wasteful to clone 
many copies of ModuleB into each of them.

Any suggestions?


More information about the llvm-dev mailing list