Alias Analysis Changes

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:
   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:

for (...)
  T->data += ...


tmp = T->data; // tmp is an SSA register
for (...)
  tmp += ...
T->data = tmp;

... which stress tests the alias analyses a bit more.