[LAA] Try to prove non-wrapping of pointers if SCEV cannot
authorAdam Nemet <anemet@apple.com>
Fri, 26 Jun 2015 17:25:43 +0000 (17:25 +0000)
committerAdam Nemet <anemet@apple.com>
Fri, 26 Jun 2015 17:25:43 +0000 (17:25 +0000)
commite11d1d2c31a2290b80a1df231db27372c87eadfd
treeb05209b851d98e9198bfea1fc5ceae77dfe264c8
parentcb2dc5bc1c9225a95d71a001e1ea26b7aeec1aca
[LAA] Try to prove non-wrapping of pointers if SCEV cannot

Summary:
Scalar evolution does not propagate the non-wrapping flags to values
that are derived from a non-wrapping induction variable because
the non-wrapping property could be flow-sensitive.

This change is a first attempt to establish the non-wrapping property in
some simple cases.  The main idea is to look through the operations
defining the pointer.  As long as we arrive to a non-wrapping AddRec via
a small chain of non-wrapping instruction, the pointer should not wrap
either.

I believe that this essentially is what Andy described in
http://article.gmane.org/gmane.comp.compilers.llvm.cvs/220731 as the way
forward.

Reviewers: aschwaighofer, nadav, sanjoy, atrick

Reviewed By: atrick

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D10472

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240798 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/LoopAccessAnalysis.cpp
test/Analysis/LoopAccessAnalysis/non-wrapping-pointer.ll [new file with mode: 0644]