[LLVMdev] getting identifier for alloca instruction and basic blocks

Duncan Sands baldrick at free.fr
Mon Jun 25 03:24:40 PDT 2012


Hi Marcel,

>>> How can I retrieve the identifier in a alloca instruction?
>>
>> except for globals, identifier names in LLVM IR are only there to make the IR
>> easier to read: they are optional and can't be relied upon to exist, or to mean
>> anything or be "correct" if they exist.  Use debug info to map things back to
>> variable names in the original code.
>
> I understand that these identifiers are only there to make the IR
> easier to read, but anyhow I want to retrieve them. Is there any way I
> can do this through the api?

V->getName()

  Does the llvm-dis generate the names for
> the identifiers or obtains this information from somewhere else?

See below.

> The reason is that I want to create an Haskell model out of the llvm
> ir code so for instance given:
>
> data Identifier = Local String | Global String
> data Label = Label String
> data Value = IConstant Int | Ident Identifier
> data Instruction = ICmp Identifier IPred Value Value
>                          |  Br Value Label Label
>
> And the LLVM IR instructions
>    %2 = icmp eq i32 %argc, 3
>    br i1 %2, label %3, label %40

Here %2 is not a name, this is a nameless value.  However it has to be labelled
somehow in the human readable IR, so that llvm-as can understand that the branch
is referring to the icmp instruction, so it numbers them like this.

> I'm extending the llvm c bindings and haskell bindings to generate:
>
> [ICmp (Local "%2") IEq (Ident (Local "%argc")) (IConstant 3),
>   Br (Ident (Local "%2")) (Label "%3") (Label "%40")]
>
> If getting those identifiers is not possible through the api,

They aren't identifiers in the API sense of a name, %1, %2 etc are created by
llvm-dis for the benefit of llvm-as.  They aren't accessible through the API.
Notice that you can't modify them freely, eg if you swap %2 and %3 everywhere
llvm-as will reject the file.  This is not the case when using names.

  I
> believe I have to add extra effort to generate nameless identifiers
> and use equality of LLVM Values to see that first value of the branch
> instruction is the equal to the result of the icmp instruction. I
> would get the icmp instruction from the use_iterator.
>
> Would that be the proper way of doing this?

I didn't really understand what you are trying to do, but you can always name
everything using the instnamer pass.

Ciao, Duncan.

>
> Regards,
> Marcelo
>
>> Ciao, Duncan.
>>
>>>
>>> In the AllocaInst class there is no method to get this info so I
>>> assumed that the actual value name for the instruction is the
>>> identifier but when I have something like:
>>>
>>> %1 = alloca %"mystruct", align 8
>>>
>>> When calling the function Value::getName() I get the empty string.
>>> What should I do to retrieve the "%1"?
>>>
>>> Also, in the basic blocks how can I retrieve the label identifier?
>>>
>>>
>>> Thanks,
>>> Marcelo
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>





More information about the llvm-dev mailing list