Name of Virtual Registers

How can I get the name of the virtual Registers present on an instruction.
eg. %add18 = add nsw i32 %mul17, %37

in this case I want to extract the name of the virutal registers as "add18",
"mul17","37".

This can easily be done in the case of store Instruction
eg. store i32 %add20, i32* %t, align 4

in this case functions like instr->getOperand(0)->getName() and
instr->getOperand(1)->getName() will fetch me "add20" and "t" respectively.

But I want this for every Instruction, So How can I achieve this??

How can I get the name of the virtual Registers present on an instruction.
eg. %add18 = add nsw i32 %mul17, %37

in this case I want to extract the name of the virutal registers as "add18",
"mul17","37".

This can easily be done in the case of store Instruction
eg. store i32 %add20, i32* %t, align 4

in this case functions like instr->getOperand(0)->getName() and
instr->getOperand(1)->getName() will fetch me "add20" and "t" respectively.

But I want this for every Instruction, So How can I achieve this??

First, be aware that an Instruction and the virtual register to which it is assigned are one and the same. So, for example, the add instruction and the %add18 register are, in fact, the same entity represented in memory as a single object of class Instruction.

Second, to answer your question, you're wanting the name of the instruction and of every value that it uses. To get the name of the instruction, call its getName() method. For the instruction's operands, just iterate through the operands and call their getName() methods:

for (unsigned index = 0; index < I->getNumOperands(); ++index) {
     I->getOperand(index)->getName();
}

-- John T.

How can I get the name of the virtual Registers present on an instruction.
eg. %add18 = add nsw i32 %mul17, %37

in this case I want to extract the name of the virutal registers as
"add18",
"mul17","37".

This can easily be done in the case of store Instruction
eg. store i32 %add20, i32* %t, align 4

in this case functions like instr->getOperand(0)->getName() and
instr->getOperand(1)->getName() will fetch me "add20" and "t" respectively.

But I want this for every Instruction, So How can I achieve this??

The number is not stored with the instruction. Only the name (see
getName()). The number is computed when the module/function is printed and
requires global information (since it depends on all the previous values in
the function). See the class SlotTracker in lib/IR/AsmWriter.cpp.

Also, see this:
http://llvm.org/docs/FAQ.html#what-api-do-i-use-to-store-a-value-to-one-of-the-virtual-registers-in-llvm-ir-s-ssa-representation

-- Sean Silva