diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-17 20:24:02 +0000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-17 20:24:02 +0000 |
commit | ef2d9799435807d0b4143ff4975336842c7eab0b (patch) | |
tree | ca26a9c8d46b4b7d2f42c9dda8dc4513cad445c8 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | b3bcd95771810f75736c1be0088618a03c9f0fe3 (diff) | |
download | bcm5719-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.cpp | 19 |
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)); } |