<div dir="ltr"><div><br></div>Hi all,<div><br></div><div>This question may sound stupid, but every time I look at the IR, I take some time to convince myself the following:</div><div><br></div><div>The following C source code:</div><div><br>1 int x ;<br>2 int * p ;<br>3 p = & x ;</div><div><br></div><div>when compiled to LLVM IR using clang generates the following instructions:</div><div><br>1 % x = alloca i32 , align 4<br>2 % p = alloca i32 * , align 8<br>3 store i32 * %x , i32 ** %p , align 8</div><div><br></div><div>All the local variables in the C source code, i.e. 'x' and 'p' are pointers now, in fact they are pointers with one level deeper nesting level. What I mean is, 'x' is an 'int' in the C source, but '%x' is 'i32*'. 'p' is 'int*' in the C source, but '%p' is 'i32**'. Doesn't it make the IR naming convention a misnoer compared to their C counterpart? Shouldn't '%x.addr' or '%p.addr' a better naming convention? Is there anything that I am missing?<br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><br></div><div>JT<br></div></div></div></div></div></div></div>