<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 4/24/16 1:27 PM, Ammar Naqvi wrote:<br>
</div>
<blockquote
cite="mid:CABqf+JUiwPb7rwepaeAvYwbAf=FmwWN5-RRfaF3DCFD6j-scFw@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<p dir="ltr">hey john, </p>
<p dir="ltr">yes indeed, that's what I'm trying, retreiving the
values of %a and %b in an LLVM pass, sorry about the confusion.
</p>
</blockquote>
<br>
If you want to add an instruction that uses the values %a and %b,
then your solution is easy: in the LLVM IR, a value and the
instruction that creates it are one and the same, and they are both
represented by the same object. For example, in the following
instruction:<br>
<br>
%s = add %a, %b<br>
<br>
The "%s" and the "add %a, %b" are the same thing (because SSA only
allows one assignment to a virtual register). Therefore, in memory,
there is one object (a sub-class of the Value class) that has name
"%s" and represents the instruction "add %a, %b."<br>
<br>
So, let's say you have the following code to get an operand from an
object of class Instruction:<br>
<br>
Instruction * i = <whatever>;<br>
Value * Va = i->getOperand(0);<br>
<br>
The variable Va points to the object representing the first operand
of the instruction (in your case, %a). You can then create new
instructions that use this value as an operand:<br>
<br>
BinaryOperator * Sub = BinaryOperator::CreateNeg (Va, "name",
InsertPt);<br>
<br>
The above would create the following instruction (which is an
integer negation instruction):<br>
<br>
%name = sub 0, %a<br>
<br>
Regards,<br>
<br>
John Criswell<br>
<br>
<blockquote
cite="mid:CABqf+JUiwPb7rwepaeAvYwbAf=FmwWN5-RRfaF3DCFD6j-scFw@mail.gmail.com"
type="cite">
<div class="gmail_quote">On Apr 24, 2016 7:18 AM, "John Criswell"
<<a moz-do-not-send="true" href="mailto:jtcriswel@gmail.com">jtcriswel@gmail.com</a>>
wrote:<br type="attribution">
<blockquote class="gmail_quote">
<div>
<div>Dear Ammar,<br>
<br>
It is not clear what you are asking. %a and %b in your
code below are not constants; there is no way, at compile
time, to determine what numeric values they will hold at
run-time.<br>
<br>
Are you asking how to write an LLVM pass that will add
code to summ() to print out its result?<br>
<br>
Regards,<br>
<br>
John Criswell <br>
<br>
On 4/24/16 2:27 AM, Ammar Naqvi via llvm-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hello Everyone,<br>
<br>
I need some help in retrieving the numeric value of an
instruction operand from LLVM IR.
<div><br>
</div>
<div>this is what the IR looks like for a simple add
function that adds two i32 integers</div>
<div>
<div><br>
</div>
<div>define i32 @summ(i32 %a, i32 %b) #0 {</div>
<div>entry:</div>
<div> %add = add nsw i32 %b, %a</div>
<div> ret i32 %add</div>
<div>}</div>
</div>
<div><br>
</div>
<div>i would like to know the integer value of %a and
%b.<br>
<br>
I've tried </div>
<div><br>
</div>
<div>-i->getOpcodeName() which gives me the string
add</div>
<div><br>
</div>
<div>-i->getOperand(0) which gives me the string i32
%b<br>
</div>
<div><br>
</div>
-i->getOperand(0)->getName() which gives me the
string a
<div><br>
</div>
<div>what method exists to get the actual integer value
of the operands?</div>
<div>for example we called summ(1,2), how to retrieve
the values 1 and 2 held in the operands?<br>
<br>
Any help and guidance is greatly appreciated! :)<br>
<br>
Best,<br>
Ammar</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
LLVM Developers mailing list
<a moz-do-not-send="true" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<br>
<br>
<pre cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a moz-do-not-send="true" href="http://www.cs.rochester.edu/u/criswell" target="_blank">http://www.cs.rochester.edu/u/criswell</a></pre>
</div>
</blockquote>
</div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
</body>
</html>