[LLVMdev] For clarifying the "<Result>" in Instructions

Reid Kleckner rnk at mit.edu
Thu Jun 10 09:33:59 PDT 2010


On Thu, Jun 10, 2010 at 9:00 AM, Xiaolong Tang <xiaolong.snake at gmail.com> wrote:
>
> Hello Reid,
>
> Thanks.
>
>> Yes, it's an integral part of the Instruction.  You can change it by
>> providing a name when you create the instruction.
>
> Following your hint, can I understand in this following way?
>
> The name (denoted by "<result>") is actually a referrer to the instruction .
> Consider this instruction:
>  %this_addr = alloca %struct.String*             ; <%struct.String**> [#uses=4]
> Here "%this_addr" (which is not a argument) is actually a string.
> Am I right?

More or less.  %this_addr is a pointer to a stack slot which contains
a pointer to something of type struct.String.  The typical pattern for
frontends modelling local variables is to create an alloca for every
local, and store and load from it on assignment.

> And this name is recorded in the symbol table of a module.  In case that an
> instruction does not have a name, what then happens? I mean, will the
> symbol table contains an entry for it?

The name is local to the function in which it's defined, not the
module.  If you don't give it a name, instructions are given numeric
names starting from 0, ie %0, %1, %2...

Reid




More information about the llvm-dev mailing list