<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>