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>