Hello,<div><br></div><div>I was facing some difficulty in implementing a transform and I was wondering if I could get some help please.</div><div><br></div><div>The transform needs to operate on the operands of certain instructions. For example, given an instruction, say "%10 = load i32* %9, align 4", I have to record the value of %9 and process it. Of course, this is only possible at runtime and so I am instrumenting the code such that a particular function is invoked just before the instruction of interest is executed.</div>
<div><br></div><div>The problem that I am facing is in getting the value of the operands. As I understand, the operands could either be program variables (e.g. in "%6 = load i32* %old, align 4") or one of the virtual registers (as in the first load instruction). For both cases, is it possible to extract the value/address of the operand (%9 or %old)? If yes, what should be the best function type to use so that I can pass this value as an argument to my function? For now, I am only concerned with load and store instructions and so (I suppose) I have to deal with pointers only.</div>
<div><br></div><div>An easy way that I can think of is to directly insert the LLVM IR (e.g. call void @my_function(%old)) but because I am using Module::getOrInsertFunction(), I have to have a function type. So alternatively, is there a way to insert direct LLVM instructions (without going through the type hierarchy)?</div>
<div><br></div><div>Thanks,</div><div>Ashay</div><div><br></div><br clear="all">---<br><br>Ashay Rane<br>Research Associate<br>The University of Texas at Austin<br><a href="http://www.public.asu.edu/~asrane/" target="_blank">http://www.public.asu.edu/~asrane/</a><br>