Questions regarding the LLVM IR and the Instruction class

I have two questions that I need answers to . Hope somebody can help me

  1. The LLVM IR has three forms of representation - In memory, bitcode representation and the human readable form. I would like to know the differences between the two representations if any.

  2. I will explain my situation and then get to the second question:

I needed the operands of instructions represented in strings and hence I used
“curr_Ins->getOperand(0)->getname()”, where curr_Ins was a variable of type Instruction*
If there is an instruction that has a direct integer as an operand, I was unable to do this. I had to cast that operand to a ConstInt and then obtain its value (by the getValue() function) and then convert it to a string.
If getOperand always returned Value* then why is it that if there was a Numerical operand I was unable to invoke the getName() function with it. Is it because getOperand(1) returned an object of different type when there was a numerical operand. If so, what are the possible types that can come as operands to instructions.

Thanks in advance.

Anirudh

I have two questions that I need answers to . Hope somebody can help me

1) The LLVM IR has three forms of representation - In memory, bitcode
representation and the human readable form. I would like to know the
differences between the two representations if any.

2) I will explain my situation and then get to the second question:

I needed the operands of instructions represented in strings and hence I
used
"curr_Ins->getOperand(0)->getname()", where curr_Ins was a variable of
type Instruction*
If there is an instruction that has a direct integer as an operand, I was
unable to do this. I had to cast that operand to a ConstInt and then obtain
its value (by the getValue() function) and then convert it to a string.
If getOperand always returned Value* then why is it that if there was a
Numerical operand I was unable to invoke the getName() function with it. Is
it because getOperand(1) returned an object of different type when there
was a numerical operand. If so, what are the possible types that can come
as operands to instructions.

Lots of things are values, not all of them have names. Here's he full
taxonomy of Values:
http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html

I have two questions that I need answers to . Hope somebody can help me

1) The LLVM IR has three forms of representation

By design, the legal IR should be equivalent between the three forms.
In practice, there are probably some bugs (I've fixed some in the past).

- In memory,

This can be manipulated via the C++ API (and, to some extent, the C API).

bitcode representation

This can be efficiently serialized to/from disk, and has upgrade support
from old (archived) files.

and the human readable form.

This is human readable/writable.

I would like to know the differences between the two representations if any.

HTH.