llvm-project/llvm/test/Analysis/LoopAccessAnalysis
Silviu Baranga 795c629ec9 [SCEV] Improve the run-time checking of the NoWrap predicate
Summary:
This implements a new method of run-time checking the NoWrap
SCEV predicates, which should be easier to optimize and nicer
for targets that don't correctly handle multiplication/addition
of large integer types (like i128).

If the AddRec is {a,+,b} and the backedge taken count is c,
the idea is to check that |b| * c doesn't have unsigned overflow,
and depending on the sign of b, that:

   a + |b| * c >= a (b >= 0) or
   a - |b| * c <= a (b <= 0)

where the comparisons above are signed or unsigned, depending on
the flag that we're checking.

The advantage of doing this is that we avoid extending to a larger
type and we avoid the multiplication of large types (multiplying
i128 can be expensive).

Reviewers: sanjoy

Subscribers: llvm-commits, mzolotukhin

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

llvm-svn: 267389
2016-04-25 09:27:16 +00:00
..
backward-dep-different-types.ll [LoopAccesses] Remove unused global variables in tests 2015-04-02 04:42:51 +00:00
forward-loop-carried.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
forward-loop-independent.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
interleave-innermost.ll [Vectorization] Actually return from error case in isStridedPtr 2016-01-08 01:55:13 +00:00
memcheck-for-loop-invariant.ll [LAA] Support memchecks involving loop-invariant addresses 2016-03-24 04:28:47 +00:00
non-wrapping-pointer.ll [LAA] Try to prove non-wrapping of pointers if SCEV cannot 2015-06-26 17:25:43 +00:00
nullptr.ll Fix LoopAccessAnalysis when potentially nullptr check are involved 2015-11-05 05:49:43 +00:00
number-of-memchecks.ll [LAA] Add clarifying comments for the checking pointer grouping algorithm. NFC 2015-07-28 13:44:08 +00:00
pointer-with-unknown-bounds.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
resort-to-memchecks-only.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
reverse-memcheck-bounds.ll Fix memcheck interval ends for pointers with negative strides 2015-07-16 14:02:58 +00:00
safe-no-checks.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
store-to-invariant-check1.ll [LoopAccesses] Allow analysis to complete in the presence of uniform stores 2015-04-08 17:48:40 +00:00
store-to-invariant-check2.ll [LoopAccesses] Allow analysis to complete in the presence of uniform stores 2015-04-08 17:48:40 +00:00
store-to-invariant-check3.ll [LoopAccesses] Allow analysis to complete in the presence of uniform stores 2015-04-08 17:48:40 +00:00
stride-access-dependence.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
underlying-objects-1.ll [getUnderlyingOjbects] Analyze loop PHIs further to remove false positives 2015-04-23 20:09:20 +00:00
underlying-objects-2.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
unsafe-and-rt-checks.ll [LAA] LLE 3/6: Rename InterestingDependence to Dependences, NFC 2015-11-03 21:39:52 +00:00
wrapping-pointer-versioning.ll [SCEV] Improve the run-time checking of the NoWrap predicate 2016-04-25 09:27:16 +00:00