[LLVMdev] Tracing Value Dependency Chains

John Criswell criswell at illinois.edu
Thu Aug 4 12:57:06 PDT 2011


On 8/4/11 2:45 PM, Manish Gupta wrote:
> Hey John,
>
> 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).

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.

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

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.

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.

>  If you can release the code that would be a great help.

I'll ask my advisor.

-- John T.

>
> Thanks,
> Manish
>
> On Thu, Aug 4, 2011 at 12:14 PM, John Criswell <criswell at illinois.edu 
> <mailto:criswell at illinois.edu>> wrote:
>
>     On 8/4/11 1:53 PM, Manish Gupta wrote:
>>     It would be great help if someone can point me to similar code in
>>     Analysis or Transform, i.e. tracing value dependencies chains.
>
>     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?
>
>     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.
>
>     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.
>
>     -- John T.
>
>>
>>     Thanks,
>>     Manish
>>
>>     On Wed, Aug 3, 2011 at 10:47 AM, Manish Gupta
>>     <manishg at cs.ucsd.edu <mailto:manishg at cs.ucsd.edu>> wrote:
>>
>>         Hello All,
>>
>>         What would be the best way to trace Value Dependency Chains
>>         in LLVM. Can I use some API to perform this?
>>
>>         The use-def chain process mentioned at
>>         http://llvm.org/docs/ProgrammersManual.html#iterate_chains 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.
>>
>>         Thanks,
>>         Manish
>>
>>
>>
>>
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     LLVMdev at cs.uiuc.edu  <mailto:LLVMdev at cs.uiuc.edu>          http://llvm.cs.uiuc.edu
>>     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>

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


More information about the llvm-dev mailing list