diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-28 07:30:06 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-28 07:30:06 +0000 |
| commit | 6094f30da2e717cdf159743c0140590994862244 (patch) | |
| tree | 49191fd3f994d81c7c764f06253026dfabfcd2a1 /clang/runtime/compiler-rt | |
| parent | a67c9c32aa87ad774c6555256d6f09a26d52cc88 (diff) | |
| download | bcm5719-llvm-6094f30da2e717cdf159743c0140590994862244.tar.gz bcm5719-llvm-6094f30da2e717cdf159743c0140590994862244.zip | |
SCEV: Make the final add of an inbounds GEP nuw if we know that the index is positive.
We can't do this for the general case as saying a GEP with a negative index
doesn't have unsigned wrap isn't valid for negative indices.
%gep = getelementptr inbounds i32* %p, i64 -1
But an inbounds GEP cannot run past the end of address space. So we check for
the very common case of a positive index and make GEPs derived from that NUW.
Together with Andy's recent non-unit stride work this lets us analyze loops
like
void foo3(int *a, int *b) {
for (; a < b; a++) {}
}
PR12375, PR12376.
Differential Revision: http://llvm-reviews.chandlerc.com/D2033
llvm-svn: 193514
Diffstat (limited to 'clang/runtime/compiler-rt')
0 files changed, 0 insertions, 0 deletions

