llvm/test/Analysis/LoopAccessAnalysis
Dorit Nuzman 7078fa3567 [LV/LoopAccess] Check statically if an unknown dependence distance can be
proven larger than the loop-count

This fixes PR31098: Try to resolve statically data-dependences whose
compile-time-unknown distance can be proven larger than the loop-count, 
instead of resorting to runtime dependence checking (which are not always 
possible).

For vectorization it is sufficient to prove that the dependence distance 
is >= VF; But in some cases we can prune unknown dependence distances early,
and even before selecting the VF, and without a runtime test, by comparing 
the distance against the loop iteration count. Since the vectorized code 
will be executed only if LoopCount >= VF, proving distance >= LoopCount 
also guarantees that distance >= VF. This check is also equivalent to the 
Strong SIV Test.

Reviewers: mkuper, anemet, sanjoy

Differential Revision: https://reviews.llvm.org/D28044



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294892 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-12 09:32:53 +00:00
..
backward-dep-different-types.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
forward-loop-carried.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
forward-loop-independent.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
independent-interleaved.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +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 [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
memcheck-off-by-one-error.ll [Loop Vectorizer] Fixed memory confilict checks. 2016-08-28 08:53:53 +00:00
multiple-strides-rt-memory-checks.ll [LV/LoopAccess] Check statically if an unknown dependence distance can be 2017-02-12 09:32:53 +00:00
non-wrapping-pointer.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
nullptr.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
number-of-memchecks.ll [Loop Vectorizer] Fixed memory confilict checks. 2016-08-28 08:53:53 +00:00
pointer-with-unknown-bounds.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
pr31098.ll [LV/LoopAccess] Check statically if an unknown dependence distance can be 2017-02-12 09:32:53 +00:00
resort-to-memchecks-only.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
reverse-memcheck-bounds.ll [Loop Vectorizer] Fixed memory confilict checks. 2016-08-28 08:53:53 +00:00
safe-no-checks.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
safe-with-dep-distance.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
store-to-invariant-check1.ll [LAA] Port test to the new PM 2016-07-08 21:24:06 +00:00
store-to-invariant-check2.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
store-to-invariant-check3.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
stride-access-dependence.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
underlying-objects-1.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
underlying-objects-2.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
unsafe-and-rt-checks.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00
wrapping-pointer-versioning.ll [PM] Avoid getResult on a higher level in LoopAccessAnalysis 2016-07-07 01:01:53 +00:00