[LLVMdev] Pointer Constant?

125 views
Skip to first unread message

Timothy Baldridge

unread,
Jul 1, 2011, 10:30:10 AM7/1/11
to llv...@cs.uiuc.edu
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
LLV...@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Reid Kleckner

unread,
Jul 1, 2011, 11:06:13 AM7/1/11
to Timothy Baldridge, llv...@cs.uiuc.edu
You'll want to use alloca to create the local variable x, and then use
a store instruction to store an inttoptr instruction.

Reid

Kenneth Uildriks

unread,
Jul 2, 2011, 10:19:50 AM7/2/11
to Timothy Baldridge, llv...@cs.uiuc.edu
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.

Jim Grosbach

unread,
Jul 3, 2011, 3:43:46 AM7/3/11
to Kenneth Uildriks, llv...@cs.uiuc.edu
I believe lldb does something similar to #2 for complex expression evaluation. It might be worth having a look there for some examples.

Jim

Reply all
Reply to author
Forward
0 new messages