[LLVMdev] "Best" alias analysis algorithm

Chris Lattner sabre at nondot.org
Tue Apr 26 07:55:01 PDT 2005

On Tue, 26 Apr 2005, Vladimir Prus wrote:
>> to be a very simple mod/ref analysis that does no "pointer analysis" at
>> all.  In particular, it only tracks globals that it knows "never have
>> their address taken".  If a global has non-internal linkage, the compiler
>> can't know that something outside of the program doesn't take its address
>> and pass around its address.
> Even if something outside of the current module has the address of the global,
> it cannot modify that global, because the control never leaves the current
> module, no?

In this case, yes, obviously.  ;)  The problem is that the pass does not 
track this possibility.  It is meant to be a very simple and quick pass 
that handles one thing well (non-address taken globals).  For example, in 
this function:

extern int P;
int test(int *Q) { *Q = 1; return P; }

It can't decide whether 'test' could modify P.  In practice, MANY 
trivial cases like this exist where globals mod/ref can't answer, so it 
does not even attempt to track external globals.

If you're interested in this, a more powerful algorithm like DSA should be 
used, or you could build a context-sensitive mod/ref follow-on pass that 
uses a non-context-sensitive alias analysis algorithm (like andersens or 
steensgaards) as its base.



More information about the llvm-dev mailing list