[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
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...
More information about the llvm-dev