[LLVMdev] How can I get the destination operand of an instruction?

Cheng Liu st.liucheng at gmail.com
Wed May 9 06:55:03 PDT 2012


Sorry, I have typo in my question.
I will be careful next time.

This is how I obtain the source operands of an instruction.
// -----------------------------------------------------------------
BasicBlock::iterator it;
...
for(int k=0; k<OpNum; k++){
    errs()<<it->getOperand(k)<<" ";
}
...
// --------------------------------------------------------------------

Also I try
it->getVaueID(), and it->InstructionVal
to get destination operand.
They don't work and I know what they return now ).

<ofv at wanadoo.es>(My computer can't display your name correctly, and I am 
sorry for this.) is right,
getOperand() actually returns Value*. The reason that I see string like 
'0x9063489' is that I print it using
'errs()<<'.  I notice that all the variables with different names have 
different strings like '0x9063489' and
I think I can use it to identify different variables as well as 
instruction instances (I need this to extract data
dependence graph/data flow graph from each basicblcok).  I guess there 
may be operator<< overload
in value.h and I looked into the source code value.h, but I didn't find 
it. I still do not know how to get
  strings/number like '0x9063489' without using errs()<<.

As for destination operand or instruction, I need similar numbers or 
strings to identify all the variables
and instruction instances. John gave a suggestion, but I am not sure 
whether I got it right.
//----------------------------------------------------------------------------------------------
--In LLVM, the instruction *is* the same as it's result.  Let us say 
that instruction pointer I1 points to an add instruction and I2 points 
to a subtract instruction.  Then:

--I2->setOperand (I1, 1);

--will make instruction I1 the first operand of instruction I2 (note 
that I didn't check the exact arguments of the setOperand() method, so 
they may be off, but I think you get the --idea).
//----------------------------------------------------------------------------------------
Since I can get the representation (I mean the strings like 0x9063489 ) 
of all source operands, and I can trace back to get the instruction's 
representation.
It seems a little bit wired for me because I am finding unique 
representations for variables and instruction instances to determine the 
instruction dependence.
In this case, now finding dependence turns to be a preliminary issue ).

--------------------------------------------------------------------

I think people may get confused about what I am talking. Just make it 
short and clear.

For example, I have a few instructions in the same basic block.
instruction1: add %a %b %c
...
instruction10: add %e %d %a

Now I use this code to identify the source operands.

for(int k=0; k<OpNum; k++){
    errs()<<it->getOperand(k)<<" ";
}

I find that
%b->0x90
%c->0x91
%d->0x92
%a->0x93
but I do not know
%a->?
%e->?
Actually I am expecting that %a->0x93, and then I can declare that 
instruction10 depends instruction1.


On 5/9/2012 11:14 AM, =?utf-8?Q?=C3=93scar_Fuentes?= wrote:
> ::getValueID, don't you?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120509/19879381/attachment.html>


More information about the llvm-dev mailing list