[LLVMdev] Pointer Constant?

Kenneth Uildriks kennethuil at gmail.com
Sat Jul 2 07:19:50 PDT 2011

1. Create an extern global variable of the type being pointed to.  Use
ExecutionEngine::addGlobalMapping to map that extern global variable
to the pointer.  Then your IR code can refer to the extern global
variable and get the pointer.
2. Convert the pointer to an int.  Create an int constant in IR.  Then
add an inttoptr instruction, and your IR has the pointer constant.
Last I checked, though, the generated X86 code doesn't treat the
resulting pointer as a constant... for instance, if you use it as a
function pointer, the X86 code ends up being an indirect call through
a function pointer in a register, rather than a direct call.

On Fri, Jul 1, 2011 at 9:30 AM, Timothy Baldridge <tbaldridge at gmail.com> wrote:
> I'm writing a JIT for my toy language, and I'm confused by one thing.
> How do I, with IR Builder, Insert a pointer constant? For the first
> version of my jit, I really only need LLVM to pass around opaque types
> and then pass those variables to C functions that return other opaque
> types. So for instance, I have a Int object that wraps the GNU GMP
> routines. A want to be able to tell IRBuilder "create a pointer named
> x and set it's value to this memory location".
> I know I'd have to re-compile everytime I reload my project, but for
> now, and considering it is a JIT, I don't really care.
> Timothy
> --
> “One of the main causes of the fall of the Roman Empire was
> that–lacking zero–they had no way to indicate successful termination
> of their C programs.”
> (Robert Firth)
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list