24 Commits

Author SHA1 Message Date
Tim Shen
e64a8288ae [ConstantRange] Add support of mul in makeGuaranteedNoWrapRegion.
Summary: This is trying to add support for r334428.

Reviewers: sanjoy

Subscribers: jlebar, hiraditya, bixia, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@335646 91177308-0d34-0410-b5e6-96231b3b80d8
2018-06-26 18:54:10 +00:00
Max Kazantsev
5cecfe96eb [ConstantRange] Support for ashr in ConstantRange computation
Extend the ConstantRange implementation to compute the range of possible values resulting from an arithmetic right shift operation.
There will be a follow up patch to leverage this constant range infrastructure in LazyValueInfo.

Patch by Surya Kumari Jangala!

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320976 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-18 13:01:32 +00:00
Joel Galenson
0e19a2ac5c [ConstantRange] Support subtraction in makeGuaranteedNoWrapRegion.
Previously ConstantRange::makeGuaranteedNoWrapRegion only handled addition.  This adds support for subtraction.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319806 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 18:14:23 +00:00
Craig Topper
843f0af293 [ConstantRange] Add another truncate unittest for wrapped set staying a wrapped set.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304695 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-04 23:07:53 +00:00
Craig Topper
014d3cb804 [ConstantRange] Add a few more truncate unittests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304694 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-04 23:03:54 +00:00
Craig Topper
e6cc2d00d9 [ConstantRange] Add missing result check to the ConstantRange::truncate test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304693 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-04 23:03:52 +00:00
Craig Topper
66563ce6a9 [ConstantRange] Fix what appear to be copy and paste mistakes in the unittest.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303033 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-15 04:40:19 +00:00
Craig Topper
b97a02c7d3 [ConstantRange] Fix the early out in ConstantRange::multiply for positive numbers to really do what the comment says
r271020 added an early out to skip the signed multiply portion of ConstantRange::multiply. The comment says we don't need to do signed multiply if the range is only positive numbers, but the implemented check only ensures that the start of the range is positive. It doesn't look at the end of the range.

This patch checks the end of the range instead. Because Upper is one more than the end we have to see if its positive or if its one past the last positive number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302717 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 20:01:48 +00:00
Craig Topper
21adc2deca [ConstantRange] Add test case showing a case where we pick too large of a range for multiply after r271020.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302700 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 18:15:06 +00:00
Craig Topper
119d936828 [APInt] Cast more calls to add/sub/mul overflow functions to void. I missed the unittests in r300758.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300773 91177308-0d34-0410-b5e6-96231b3b80d8
2017-04-19 22:11:05 +00:00
Artur Pilipenko
57ea7480ce Introduce ConstantRange.addWithNoSignedWrap
To be used by upcoming change to IndVarSimplify

Reviewed By: sanjoy

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284597 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-19 14:44:23 +00:00
Sanjoy Das
53936b83aa [ConstantRange] Make getEquivalentICmp smarter
This change teaches getEquivalentICmp to be smarter about generating
ICMP_NE and ICMP_EQ predicates.

An earlier version of this change was landed as rL283057 which had a
use-after-free bug.  This new version has a fix for that bug, and a (C++
unittests/) test case that would have triggered it rL283057.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283078 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-02 20:59:05 +00:00
Sanjoy Das
d3000982c5 Revert r283057 and r283058
They've broken the sanitizer-bootstrap bots.  Reverting while I investigate.

Original commit messages:

r283057: "[ConstantRange] Make getEquivalentICmp smarter"

r283058: "[SCEV] Rely on ConstantRange instead of custom logic; NFCI"

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283062 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-02 02:40:27 +00:00
Sanjoy Das
4e4cf39e46 [ConstantRange] Make getEquivalentICmp smarter
This change teaches getEquivalentICmp to be smarter about generating
ICMP_NE and ICMP_EQ predicates.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283057 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-02 00:09:49 +00:00
Sanjoy Das
15c62f945a [ConstantRange] Add an getEquivalentICmp helper
Currently only its unit test uses it, but this will be used in a later
change to simplify some logic in the GuardWidening pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270018 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-19 03:53:06 +00:00
Sanjoy Das
45385bf7d9 [ConstantRange] Rename test; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262640 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-03 18:31:33 +00:00
Sanjoy Das
1d754782e0 [ConstantRange] Generalize makeGuaranteedNoWrapRegion to work on ranges
This will be used in a later patch to ScalarEvolution.  Right now only
the unit tests exercise the newly added code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262637 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-03 18:31:16 +00:00
Philip Reames
fcd97ccb03 [ConstantRange] Add umin/smin operators
This was split off from http://reviews.llvm.org/D17184.

Reviewed by: Sanjoy



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262080 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-26 22:08:18 +00:00
Sanjoy Das
e9d736f57c [ConstantRange] Rename a method and add more doc
Rename makeNoWrapRegion to a more obvious makeGuaranteedNoWrapRegion,
and add a comment about the counter-intuitive aspects of the function.
This is to help prevent cases like PR26628.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261532 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-22 16:13:02 +00:00
Sanjoy Das
2779d5708c [IR] Add a makeNoWrapRegion method to ConstantRange
Summary: This will be used in a future change to ScalarEvolution.

Reviewers: hfinkel, reames, nlewycky

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250975 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-22 03:12:57 +00:00
Sanjoy Das
da5f3a3ca5 [ConstantRange] Split makeICmpRegion in two.
Summary:
This change splits `makeICmpRegion` into `makeAllowedICmpRegion` and
`makeSatisfyingICmpRegion` with slightly different contracts.  The first
one is useful for determining what values some expression //may// take,
given that a certain `icmp` evaluates to true.  The second one is useful
for determining what values are guaranteed to //satisfy// a given
`icmp`.

Reviewers: nlewycky

Reviewed By: nlewycky

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232575 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-18 00:41:24 +00:00
James Molloy
4e022da51e [ConstantRange] Teach multiply to be cleverer about signed ranges.
Multiplication is not dependent on signedness, so just treating
all input ranges as unsigned is not incorrect. However it will cause
overly pessimistic ranges (such as full-set) when used with signed
negative values.

Teach multiply to try to interpret its inputs as both signed and
unsigned, and then to take the most specific (smallest population)
as its result.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231483 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-06 15:50:47 +00:00
Craig Topper
b177041dfa [C++11] Use 'nullptr'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210442 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-08 22:29:17 +00:00
Chandler Carruth
19d764fb05 [Modules] Move the ConstantRange class into the IR library. This is
a bit surprising, as the class is almost entirely abstracted away from
any particular IR, however it encodes the comparsion predicates which
mutate ranges as ICmp predicate codes. This is reasonable as they're
used for both instructions and constants. Thus, it belongs in the IR
library with instructions and constants.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202838 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 12:24:34 +00:00