[LLVMdev] Target independency using "opaque"? How to do it else?

Duncan Sands baldrick at free.fr
Wed Apr 6 06:51:42 PDT 2011

Hi Johannes,

> I'm writing a backend for our scriptlanguage compiler and I'm currently
> writing an IR module for the runtime library that contains some support
> routines called by generated code.
> The IR module contains calls to "malloc", which depend on the size of
> "size_t". Since I don't know the target when writing the IR module for the
> runtime library, I thought about using an "opaque" type instance in place of
> "size_t". When loading the IR module, I would refine the "opaque" to either
> i64 or i32, depending on which target I'm using.

you can inject a declaration for your own malloc function that always takes a
64 bit argument into the bitcode:
   declare i8 *@litb_malloc(i64)
When you know how big a pointer is on the target you can provide an appropriate
body.  For example on a 32 bit machine you could inject:

   define i8 *@litb_malloc(i64 %s) {
     %t = trunc i64 %s to i32
     %m = call i8 *@malloc(i32 %t)
     ret i8 *%m

Ciao, Duncan.

More information about the llvm-dev mailing list