Fix memcheck interval ends for pointers with negative strides
authorSilviu Baranga <silviu.baranga@arm.com>
Thu, 16 Jul 2015 14:02:58 +0000 (14:02 +0000)
committerSilviu Baranga <silviu.baranga@arm.com>
Thu, 16 Jul 2015 14:02:58 +0000 (14:02 +0000)
commit0e5804a6af2fff8ceaee748a31fdb42fe3cd186d
treed45887b2ceaea4fba1a6ac199c1a0dec3e0770cf
parent9d17a2816436fc7f9eb2d5604927ad16d2e51b3e
Fix memcheck interval ends for pointers with negative strides

Summary:
The checking pointer grouping algorithm assumes that the
starts/ends of the pointers are well formed (start <= end).

The runtime memory checking algorithm also assumes this by doing:

 start0 < end1 && start1 < end0

to detect conflicts. This check only works if start0 <= end0 and
start1 <= end1.

This change correctly orders the interval ends by either checking
the stride (if it is constant) or by using min/max SCEV expressions.

Reviewers: anemet, rengolin

Subscribers: rengolin, llvm-commits

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

llvm-svn: 242400
llvm/lib/Analysis/LoopAccessAnalysis.cpp
llvm/test/Analysis/LoopAccessAnalysis/reverse-memcheck-bounds.ll [new file with mode: 0644]