summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-03-17 20:24:02 +0000
committerNikita Popov <nikita.ppv@gmail.com>2019-03-17 20:24:02 +0000
commitef2d9799435807d0b4143ff4975336842c7eab0b (patch)
treeca26a9c8d46b4b7d2f42c9dda8dc4513cad445c8 /llvm/lib/Analysis/ValueTracking.cpp
parentb3bcd95771810f75736c1be0088618a03c9f0fe3 (diff)
downloadbcm5719-llvm-ef2d9799435807d0b4143ff4975336842c7eab0b.tar.gz
bcm5719-llvm-ef2d9799435807d0b4143ff4975336842c7eab0b.zip
[ConstantRange] Add fromKnownBits() method
Following the suggestion in D59450, I'm moving the code for constructing a ConstantRange from KnownBits out of ValueTracking, which also allows us to test this code independently. I'm adding this method to ConstantRange rather than KnownBits (which would have been a bit nicer API wise) to avoid creating a dependency from Support to IR, where ConstantRange lives. Differential Revision: https://reviews.llvm.org/D59475 llvm-svn: 356339
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 9a87667827a..f0c02eec4e2 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4077,13 +4077,6 @@ static OverflowResult mapOverflowResult(ConstantRange::OverflowResult OR) {
llvm_unreachable("Unknown OverflowResult");
}
-static ConstantRange constantRangeFromKnownBits(const KnownBits &Known) {
- if (Known.isUnknown())
- return ConstantRange(Known.getBitWidth(), /* full */ true);
-
- return ConstantRange(Known.One, ~Known.Zero + 1);
-}
-
OverflowResult llvm::computeOverflowForUnsignedAdd(
const Value *LHS, const Value *RHS, const DataLayout &DL,
AssumptionCache *AC, const Instruction *CxtI, const DominatorTree *DT,
@@ -4092,8 +4085,10 @@ OverflowResult llvm::computeOverflowForUnsignedAdd(
nullptr, UseInstrInfo);
KnownBits RHSKnown = computeKnownBits(RHS, DL, /*Depth=*/0, AC, CxtI, DT,
nullptr, UseInstrInfo);
- ConstantRange LHSRange = constantRangeFromKnownBits(LHSKnown);
- ConstantRange RHSRange = constantRangeFromKnownBits(RHSKnown);
+ ConstantRange LHSRange =
+ ConstantRange::fromKnownBits(LHSKnown, /*signed*/ false);
+ ConstantRange RHSRange =
+ ConstantRange::fromKnownBits(RHSKnown, /*signed*/ false);
return mapOverflowResult(LHSRange.unsignedAddMayOverflow(RHSRange));
}
@@ -4208,8 +4203,10 @@ OverflowResult llvm::computeOverflowForUnsignedSub(const Value *LHS,
const DominatorTree *DT) {
KnownBits LHSKnown = computeKnownBits(LHS, DL, /*Depth=*/0, AC, CxtI, DT);
KnownBits RHSKnown = computeKnownBits(RHS, DL, /*Depth=*/0, AC, CxtI, DT);
- ConstantRange LHSRange = constantRangeFromKnownBits(LHSKnown);
- ConstantRange RHSRange = constantRangeFromKnownBits(RHSKnown);
+ ConstantRange LHSRange =
+ ConstantRange::fromKnownBits(LHSKnown, /*signed*/ false);
+ ConstantRange RHSRange =
+ ConstantRange::fromKnownBits(RHSKnown, /*signed*/ false);
return mapOverflowResult(LHSRange.unsignedSubMayOverflow(RHSRange));
}
OpenPOWER on IntegriCloud