[LLVMdev] Loss of Type information
Santosh Nagarakatte
santosh.nagarakatte at gmail.com
Sun May 10 11:44:14 PDT 2009
I have a struct node with three fields {size_t, size_t, struct node *}. When
I allocate such a node, malloc allocates [3* i64] i.e allocates an array of
3 i64's but not a structure.
Thus any store to the pointer field in the structures involves a cast from a
pointer to an integer.
So a pointer is cast to a integer and then stored into the third field of
this structure.
This happens only when I use llvm-gcc -O3 to generate the bitcode? why does
llvm-gcc do this with -O3?
Sample bitcode illustrating the same is shown below.
%2 = malloc [3 x i64] ; <[3 x i64]*> [#uses=6]
%.sub = getelementptr [3 x i64]* %2, i64 0, i64 0 ;
<i64*> [#uses=\
1]
store i64 %i.0.reg2mem.0, i64* %.sub, align 8
%3 = getelementptr [3 x i64]* %2, i64 0, i64 1 ; <i64*>
[#uses=1]
%.c = add i64 %i.0.reg2mem.0, 1 ; <i64> [#uses=3]
store i64 %.c, i64* %3
%4 = getelementptr [3 x i64]* %2, i64 0, i64 2 ; <i64*>
[#uses=1]
%ptr.0.c = ptrtoint [3 x i64]* %ptr.0.in.in.reg2mem.0 to
i64 ; <i64> \
[#uses=1]
store i64 %ptr.0.c, i64* %4
Santosh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090510/784fb278/attachment.html>
More information about the llvm-dev
mailing list