<br><br><div class="gmail_quote">On Thu, Aug 4, 2011 at 12:57 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu">criswell@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    On 8/4/11 2:45 PM, Manish Gupta wrote:
    <blockquote type="cite">
      
      Hey John,
      <div><br>
        <div>Yes this is what I am looking for. I wrote a code as I
          described in my first mail and I am getting desired result
          except when the chain encounters load instruction (you have
          also mentioned the that u skip loads). <br>
        </div>
      </div>
    </blockquote>
    <br></div>
    Okay.  Just out of curiosity, is your static slice local (stopping
    at function arguments) or inter-procedural?  Do you need an
    inter-procedural slice?  I have code that does both.</div></blockquote><div><br></div><div>Manish: My code is currently tracing local dependencies and I am running a basic Function Pass. My first aim to trace local dependencies later I will work on inter-procedural static slice. So if your advisor allows to share, for now static slice local would be enough.   </div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div bgcolor="#FFFFFF" text="#000000"><div class="im"><br>
    <br>
    <blockquote type="cite">
      <div>
        <div><br>
        </div>
        <div>I think the recursive trace back for a Value V depending on
          Operands (o1,...oN) should terminate at the nearest definition
          of the oN (i.e. it is not an instruction but a LLVM Type).
          Right?</div>
      </div>
    </blockquote>
    <br></div>
    No.  The operands are not types.  They are LLVM values (llvm::Value
    *'s) and could be instructions (Instruction *), Constants (Constant
    *), function arguments (Argument *), or any other object whose class
    derives from llvm::Value.<br>
    <br>
    Regarding the idea of nearest definition, remember that the LLVM IR
    is in SSA form.  Each value (remember that all operands are Value
    *'s) has a single definition.  There is no nearest definition of a
    value because each value is only defined once.</div></blockquote><div><br></div><div>Manish: I described my method incorrectly. My aim of getting all the Values that effect a particular instruction I is to see which Type of program variables effect a particular Instruction. Say an Instruction <b>I </b>is effected by Operands (o1,...,oN).</div>

<div><b>I <- (o1,...,oN)</b> . All these o's are LLVM Values, but some of them might be Instructions again. So for those Values which are Instructions get the operands it is effected by, keep doing it until operand is not an instruction. Now from the list of effecting operands I can get the list Value Types and TypeIDs effecting this particular instruction <b>I</b> . Please let me know if you get the idea of what i am trying to do?  </div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div bgcolor="#FFFFFF" text="#000000"><div class="im"><br>
    <br>
    <blockquote type="cite">
      <div>
        <div>  If you can release the code that would be a great help.</div>
      </div>
    </blockquote>
    <br></div>
    I'll ask my advisor. </div></blockquote><div> </div><div>Manish: Great!! Thanks </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div bgcolor="#FFFFFF" text="#000000">

<div class="im"><br>
    <br>
    -- John T.<br>
    <br>
    <blockquote type="cite">
      <div>
        <div>    </div>
        <div><br>
        </div>
        <div>Thanks,</div>
        <div>Manish <br>
          <br>
          <div class="gmail_quote">On Thu, Aug 4, 2011 at 12:14 PM, John
            Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000">
                <div> On 8/4/11 1:53 PM, Manish Gupta wrote:
                  <blockquote type="cite"> It would be great help if
                    someone can point me to similar code in Analysis or
                    Transform, i.e. tracing value dependencies chains. <br>
                  </blockquote>
                  <br>
                </div>
                If I understand correctly, given an instruction I, you
                want to find its operands o1 through oN, and then find
                the instructions (or LLVM values) that generate the
                values o1 through oN, and then find the instructions
                generating those values, etc, etc.  In other words, you
                want to take a static backwards slice of an
                instruction.  Is this correct?<br>
                <br>
                I don't know of code within LLVM that does this, but
                I've written code to take an inter-procedural static
                backwards slice (only through SSA values; loads are not
                matched up to potential stores).  If that's what you
                need, I can ask my advisor if we can release that code
                to you.<br>
                <br>
                Also, would others find it useful to have this code?  I
                think this is the second or third time someone's asked
                for backwards static slicing code.<br>
                <br>
                -- John T.<br>
                <br>
                <blockquote type="cite">
                  <div>
                    <div><br>
                    </div>
                    <div>Thanks,</div>
                    <div>Manish<br>
                      <br>
                      <div class="gmail_quote">On Wed, Aug 3, 2011 at
                        10:47 AM, Manish Gupta <span dir="ltr"><<a href="mailto:manishg@cs.ucsd.edu" target="_blank">manishg@cs.ucsd.edu</a>></span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello All,
                          <div><br>
                          </div>
                          <div>What would be the best way to trace Value
                            Dependency Chains in LLVM. Can I use some
                            API to perform this?</div>
                          <div><br>
                          </div>
                          <div>The use-def chain process mentioned at <a href="http://llvm.org/docs/ProgrammersManual.html#iterate_chains" target="_blank">http://llvm.org/docs/ProgrammersManual.html#iterate_chains</a> will

                            just get the values (Operands) being used in
                            the current Instruction. For getting the
                            values operands in the particular
                            instruction are influenced from I have
                            to recursively call the use-def on these
                            operands. I was wondering if there is
                            already available better way of doing this
                            in LLVM. </div>
                          <div><br>
                          </div>
                          <div>Thanks,</div>
                          <div>Manish</div>
                        </blockquote>
                      </div>
                      <br>
                    </div>
                    <br>
                    <fieldset></fieldset>
                    <br>
                  </div>
                  <pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
                </blockquote>
                <br>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </div></div>

</blockquote></div><br>