[LLVMdev] How to analyze where the address comes from?
John Criswell
jtcriswel at gmail.com
Sun Nov 23 21:12:17 PST 2014
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 list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141124/e2d8fd2f/attachment.html>
More information about the llvm-dev
mailing list