[LLVMdev] How can i differentiate pointer type int 32* from int 32** ?

Daniel Berlin
Sat, 18 Jul 2015 02:48:09 -0000

Points-to level does not tell you much.

It is entirely possible for the relationship to go in the wrong direction.
LLVM does not say it is illegal :)

(IE it does not say that int *** can only point to int **)



On Fri, Jul 17, 2015 at 6:32 PM, Shen Liu <shl413 at lehigh.edu>
wrote:
> John, thanks for your helpful advice.
>
> My ultimate goal is to construct a full instruction-level program
dependence
> graph for a given IR file. The hard point is how to establish the correct
> data dependence edges when some function arguments are multi-level
pointers.
> To solve this problem I hope to check the point-to level for each pointer
> variable. I think the data dependence through pointers can be described
more
> accurately in this way. Unfortunately i didn't find any available
interface
> to finish this job, so i guess i have to write it by myself.
>
> Best regards,
>
> Shen
>
>
>
> On Fri, Jul 17, 2015 at 2:22 PM, John Criswell <jtcriswel at
gmail.com> wrote:
>>
>> On 7/17/15 1:06 PM, Shen Liu wrote:
>>
>>  John, thanks for you answer! But as far as I know LLVM doesn't
provide
>> any interface for finding the pointee of a pointer directly, so i have
to
>> process a multi-level pointer i need to write my own function to check
>> pointers level by level, is that right?
>>
>>
>> I'm not sure what you're trying to do.  If you're trying to
determine the
>> LLVM pointer type and the LLVM type to which it points, what I've
said will
>> work.
>>
>> If you're trying to do something more complicated, then you need to
>> explain more clearly what you want to do.  I think it would also help
if you
>> "jumped up a level" and explained what your end goal is so
that the
>> community can give you better advice.  Based on your previous emails,
it
>> seems like you're asking very specific questions instead of asking
how to
>> best achieve your overall goal.
>>
>> Regards,
>>
>> John Criswell
>>
>>
>>
>> On Fri, Jul 17, 2015 at 1:47 PM, John Criswell <jtcriswel at
gmail.com>
>> wrote:
>>>
>>> On 7/17/15 12:38 PM, Shen Liu wrote:
>>>
>>> Hi all, as a LLVM beginner I would like to know how can i check the
>>> pointer types with different levels like int 32* and int 32**, int
32***?
>>>
>>> By using value->getType()->isPointerTy() i can just know they
are
>>> pointers. But the dump results clearly show they are different. Is
there a
>>> good way to calculate their actual point to levels? Thanks!
>>>
>>>
>>> You will need to use dyn_cast<PointerType> to cast the Type *
into a
>>> PointerType *.  Once you do that, you can find the Type * that the
>>> PointerType points to.
>>>
>>> Regards,
>>>
>>> John Criswell
>>>
>>>
>>>
>>> Best regards,
>>>
>>> Shen
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>
>>
>>
>> --
>> John Criswell
>> Assistant Professor
>> Department of Computer Science, University of Rochester
>> http://www.cs.rochester.edu/u/criswell
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>