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

Ruiling Song ruiling.song83 at gmail.com
Wed Nov 26 17:50:41 PST 2014


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.

I tried the above idea, but I find it is easy find out whether a operand
comes from a pointer. But for the other operand, which comes from a
integer, it is hard to determine it does not come from a pointer, as
integer may come from various kinds of instructions, the stop-condition to
prevent further search is not obvious. As for the two operands of 'Add', i
don't know which comes from pointer, obviously I have to go through both of
them. I am not sure whether I understand your idea fully.


>
> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141127/c7f48fdb/attachment.html>


More information about the llvm-dev mailing list