Steven Su
2013-Mar-13 09:06 UTC
[LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
Hello, could any one point me following question.
e.g:
void foo(int * p)
{
*p = 0;
}
Here 'p' may point to all memory location.
Could you tell me how to represent the POINT TO set of 'p'?
Here is my solution:
Introduce a memory-class named: Global_Mem, then p pointed to
global_mem.
And the MOD set of '*p=0' is Global_Mem.
But how to present the overlapping alias set:
e.g2:
extern A[100];
void foo(int * p, int i)
{
*p = 0;
A[i] = 10;
}
'p' may point to anywhere. So p may point to A. How to describe the
relation?
John Criswell
2013-Mar-13 16:14 UTC
[LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
On 3/13/13 4:06 AM, Steven Su wrote:> Hello, could any one point me following question.Without any context, your question is difficult to answer. Are you building a points-to analysis and wanting to know how an alias analysis might encode the fact that a pointer could alias any other pointer? -- John T.> > e.g: > void foo(int * p) > { > *p = 0; > } > Here 'p' may point to all memory location. > Could you tell me how to represent the POINT TO set of 'p'? > > Here is my solution: > Introduce a memory-class named: Global_Mem, then p pointed to global_mem. > And the MOD set of '*p=0' is Global_Mem. > > But how to present the overlapping alias set: > e.g2: > extern A[100]; > void foo(int * p, int i) > { > *p = 0; > A[i] = 10; > } > > 'p' may point to anywhere. So p may point to A. How to describe the relation? > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Steven Su
2013-Mar-21 02:33 UTC
[LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
Hi, John
I am building a flow sensitive intra-procedural alias analysis(without
interprocedural info).
So, the first thing I have to consider is where a parameter-pointer or a
global-pointer might point to.
Then I defined several special Virtual Memory Locations: ALL_MEMORY,
GLOBAL_MEMORY, STACK_MEMORY, HEAP_MEMORY. ALL_MEMORY contains GLOBAL_MEMORY,
STACK_MEMORY, HEAP_MEMORY.
e.g1:
extern int * q;
void f(int * p)
{
int a;
*p = 0; //STMT1
*q = a; //STMT2
}
For above case, both p and q pointed to ALL_MEMORY: p->ALL_MEMORY,
q->ALL_MEMORY.
And each STMT has two BitVectors to describe MayDef, MayUse.
(I think the BitVector must be sparse, otherwise the alias-analysis module need
too much memory to allocate for all BitVectors.)
For STMT1, the MayDef={ALL_MEMORY}, MayUse={}
For STMT2, the MayDef={ALL_MEMORY}, MayUse={'a'}
---------------------
e.g2:
extern int A[100];
int * q;
void f2(int * p)
{
*p = 0; //STMT1
p = &A; //STMT2
p[0] = *q; //STMT3
bar(); //STMT4
}
In e.g2,
for STMT1, the MayDef={ALL_MEMORY}, MayUse={}
for STMT2, p->A, so the MayDef={'p'}, MayUse={}
for STMT3, the MayDef={'A'}, MayUse={ALL_MEMORY}
for STMT4, the MayDef={ALL_MEMORY}, MayUse={ALL_MEMORY}
Is that right? Or there are another better methods. :)
--- 13年3月14日,周四, John Criswell <criswell at illinois.edu> 写道:
> 发件人: John Criswell <criswell at illinois.edu>
> 主题: Re: [LLVMdev] How to describe a pointer that points to All
memory(include global memory, heap, stack)?
> 收件人: "Steven Su" <steven_known at yahoo.com.cn>
> 抄送: llvmdev at cs.uiuc.edu
> 日期: 2013年3月14日,周四,上午12:14
> On 3/13/13 4:06 AM, Steven Su wrote:
> > Hello, could any one point me following question.
>
> Without any context, your question is difficult to
> answer. Are you
> building a points-to analysis and wanting to know how an
> alias analysis
> might encode the fact that a pointer could alias any other
> pointer?
>
> -- John T.
>
> >
> > e.g:
> > void foo(int * p)
> > {
> > *p > 0;
> > }
> > Here 'p' may point to
> all memory location.
> > Could you tell me how
> to represent the POINT TO set of 'p'?
> >
>
> > Here is my solution:
> > Introduce a
> memory-class named: Global_Mem, then p pointed to
> global_mem.
> > And the MOD set of
> '*p=0' is Global_Mem.
> >
> > But how to present the overlapping alias set:
> > e.g2:
> > extern A[100];
> > void foo(int * p, int i)
> > {
> > *p
> = 0;
> >
> A[i] = 10;
> > }
> >
> > 'p' may point to anywhere. So p may point to A. How to
> describe the relation?
> >
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu
> http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
Apparently Analagous Threads
- [LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
- [LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
- [LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
- [LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?
- [LLVMdev] How to describe a pointer that points to All memory(include global memory, heap, stack)?