[LLVMdev] How to analyze where the address comes from?

Ruiling Song ruiling.song83 at gmail.com
Mon Nov 24 21:28:21 PST 2014


Hi John,

Thank you so much for the comments! I will do it as suggested.

Thanks!
Ruiling

2014-11-24 13:12 GMT+08:00 John Criswell <jtcriswel at gmail.com>:

>  On 11/19/14, 3:54 AM, Ruiling Song wrote:
>
>   Hi,
>
>  I want to get the information where the address of load/store comes
> from,
> like below load instruction, %152 may come from a getelementpr, or comes
> from some gep+ptrtoint+add+inttoptr... instructions. what's the recommended
> way to find the original memory pointer?
>
>   %153 = load <2 x i16> addrspace(1)* %152, align 2
>
>  going through the use-def chain seems not easy, because the 'add'
> operation contains two operands, one come from a pointer, the other is an
> integer offset. I could not know which is at operand 0 and which is at
> operand 1.
>
>
> To find the source of the pointer for the LoadInst, you'll need to climb
> up the def-use chain.  In the case of an add instruction, you will have to
> search back through both operands to figure out which one originates from a
> pointer.  You will also have to handle phi-nodes, so you'll probably need a
> list of processed phi-nodes to ensure that you don't iterate indefinitely.
>
> The only other way to do it is find all the definitions that you consider
> to be pointer "origins" (e.g., function arguments, the results of load
> instructions, etc.) and iterate through their uses until you find the load
> instruction that uses the pointer (in this case, %153).  In other words,
> instead of starting at a use and searching for the definition, you start at
> all possible definitions and look for the use.  If you're searching for a
> lot of pointers, this may end up being more efficient as you won't be
> traversing the same definitions over and over again.
>
> In short, you're attacking the problem in the right way, and I don't think
> there's really any better way of doing it.
>
> Regards,
>
> John Criswell
>
>
>
>
>  Thanks!
> Ruiling
>
>
>
> _______________________________________________
> LLVM Developers mailing listLLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
> --
> John Criswell
> Assistant Professor
> Department of Computer Science, University of Rochesterhttp://www.cs.rochester.edu/u/criswell
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141125/adc168df/attachment.html>


More information about the llvm-dev mailing list