Re: [llvm-dev] Semantics of LLVM IR intermediate variables

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Re: [llvm-dev] Semantics of LLVM IR intermediate variables

Kristof Beyls via cfe-dev

On Fri, Oct 25, 2019 at 12:57 AM Jason Thomas via llvm-dev <[hidden email]> wrote:

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 missing?

You're right that the name isn't the most accurate from a clang point of view, redirecting to cfe-dev@ if anyone has an opinion from the clang side.

Note though that in LLVM the SSA value names are just for debugging, they are even stripped entirely by default in a Release clang "normal" path.


cfe-dev mailing list
[hidden email]