Add support to ValueTracking for determining that a pointer is non-null
authorChandler Carruth <chandlerc@gmail.com>
Fri, 7 Dec 2012 02:08:58 +0000 (02:08 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 7 Dec 2012 02:08:58 +0000 (02:08 +0000)
commit70d3bebc8bc857fcf3d7fac44bda884d5e2a7040
tree02d3047cbe28a3ed9cbca567a5e16a3222cfd0d3
parentb02ed5b8eafd11500bbefb7206ecbf5bc3fc324a
Add support to ValueTracking for determining that a pointer is non-null
by virtue of inbounds GEPs that preclude a null pointer.

This is a very common pattern in the code generated by std::vector and
other standard library routines which use allocators that test for null
pervasively. This is one step closer to teaching Clang+LLVM to be able
to produce an empty function for:

  void f() {
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
  }

Which is related to getting them to completely fold SmallVector
push_back sequences into constants when inlining and other optimizations
make that a possibility.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169573 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/ValueTracking.cpp
test/Transforms/InstSimplify/compare.ll