[LLVMdev] getting identifier for alloca instruction and basic blocks

Marcelo Sousa dipython at gmail.com
Mon Jun 25 03:17:49 PDT 2012


Hi Duncan,

>Hi Marcelo,
>
>> 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? Does the llvm-dis generate the names for
the identifiers or obtains this information from somewhere else?

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

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

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