I just wrapped up some fairly major changes to the AliasAnalysis
infrastructure in LLVM, and thought LLVMdev should know about it.
In particular, here are the highlights:
1. AliasAnalysis can now take into consideration the size of a memory
access to determine whether or not something aliases. This is crucial
for a field-sensitive analysis to not cause bad transformations to
2. Mod/Ref information is now a first class part of the AliasAnalysis
interface. The IPModRef class does not yet implement the AliasAnalysis
interface, but it should probably be changed to at some point.
3. A new pair of classes (AliasSetTracker & AliasSet) can be used to build
alias sets for transformations that like to think of things that way.
The LICM pass, for example, is dramatically simplified due to these
4. There is a new document describing AliasAnalysis related stuff,
available here: http://llvm.cs.uiuc.edu/docs/AliasAnalysis.html
If you are planning on doing anything with Alias Analysis in LLVM, I
would recommend taking a look.
Also, the LICM pass has been enhanced to perform scalar promotion in
addition simple hoisting of load instructions. This is capable of
changing something like this:
T->data += ...
tmp = T->data; // tmp is an SSA register
tmp += ...
T->data = tmp;
... which stress tests the alias analyses a bit more.