forked from OSchip/llvm-project
795c629ec9
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 |
||
---|---|---|
.. | ||
backward-dep-different-types.ll | ||
forward-loop-carried.ll | ||
forward-loop-independent.ll | ||
interleave-innermost.ll | ||
memcheck-for-loop-invariant.ll | ||
non-wrapping-pointer.ll | ||
nullptr.ll | ||
number-of-memchecks.ll | ||
pointer-with-unknown-bounds.ll | ||
resort-to-memchecks-only.ll | ||
reverse-memcheck-bounds.ll | ||
safe-no-checks.ll | ||
store-to-invariant-check1.ll | ||
store-to-invariant-check2.ll | ||
store-to-invariant-check3.ll | ||
stride-access-dependence.ll | ||
underlying-objects-1.ll | ||
underlying-objects-2.ll | ||
unsafe-and-rt-checks.ll | ||
wrapping-pointer-versioning.ll |