[llvm-dev] Semantics of LLVM IR intermediate variables

Jason Thomas via llvm-dev llvm-dev at lists.llvm.org
Fri Oct 25 00:56:43 PDT 2019

Hi all,

This question may sound stupid, but every time I look at the IR, I take
some time to convince myself the following:

The following C source code:

1 int x ;
2 int * p ;
3 p = & x ;

when compiled to LLVM IR using clang generates the following instructions:

1 % x = alloca i32 , align 4
2 % p = alloca i32 * , align 8
3 store i32 * %x , i32 ** %p , align 8

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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191025/7436c334/attachment.html>

More information about the llvm-dev mailing list