This implements the semantic change to dereferenceability described in the llvm-dev thread "RFC: Decomposing deref(N) into deref(N) + nofree".
At the moment, it shows the (widespread) optimization impact of simply toggling the behavior. My plan is to examine each test change to see if a) we can generalize the transform slightly to not depend on global deref, or b) what appropriate test changes (e.g. adding attributes) make sense without destroying the intend of the test. My plan is to tackle each transform in it's own review, and rebase this one incrementally as we go.
In addition to the updated tests, there are currently 4 failing tests. These simply happen to be difficult to show updates in easily due to limitations of our auto-update tests. They will be included before final review of this patch.
LLVM :: Analysis/BasicAA/dereferenceable.ll LLVM :: Analysis/ValueTracking/memory-dereferenceable.ll LLVM :: Transforms/VectorCombine/X86/load-inseltpoison.ll LLVM :: Transforms/VectorCombine/X86/load.ll
clang-format: please reformat the code