summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2007-03-10 15:54:12 +0000
committerNick Lewycky <nicholas@mxc.ca>2007-03-10 15:54:12 +0000
commit3400e6af6b10acea219c02ac262637220f84218f (patch)
tree090875112f02363816a052d2cec508b0d4960c8a /lib/Support
parentc1fb0473ed415824bf6ffdbd8d6e3c4a31db3d62 (diff)
downloadllvm-3400e6af6b10acea219c02ac262637220f84218f.tar.gz
llvm-3400e6af6b10acea219c02ac262637220f84218f.tar.bz2
llvm-3400e6af6b10acea219c02ac262637220f84218f.tar.xz
Add getter methods for the extremes of a ConstantRange.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35056 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/ConstantRange.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/Support/ConstantRange.cpp b/lib/Support/ConstantRange.cpp
index 410c351890..becb8b61f7 100644
--- a/lib/Support/ConstantRange.cpp
+++ b/lib/Support/ConstantRange.cpp
@@ -84,6 +84,70 @@ APInt ConstantRange::getSetSize() const {
return Upper - Lower;
}
+/// getUnsignedMax - Return the largest unsigned value contained in the
+/// ConstantRange.
+///
+APInt ConstantRange::getUnsignedMax() const {
+ if (isFullSet() || isWrappedSet())
+ return APInt::getMaxValue(getBitWidth());
+ else
+ return getUpper() - 1;
+}
+
+/// getUnsignedMin - Return the smallest unsigned value contained in the
+/// ConstantRange.
+///
+APInt ConstantRange::getUnsignedMin() const {
+ if (isFullSet() || (isWrappedSet() && getUpper() != 0))
+ return APInt::getMinValue(getBitWidth());
+ else
+ return getLower();
+}
+
+/// getSignedMax - Return the largest signed value contained in the
+/// ConstantRange.
+///
+APInt ConstantRange::getSignedMax() const {
+ APInt SignedMax = APInt::getSignedMaxValue(getBitWidth());
+ if (!isWrappedSet()) {
+ if (getLower().slt(getUpper() - 1))
+ return getUpper() - 1;
+ else
+ return SignedMax;
+ } else {
+ if ((getUpper() - 1).slt(getLower())) {
+ if (getLower() != SignedMax)
+ return SignedMax;
+ else
+ return getUpper() - 1;
+ } else {
+ return getUpper() - 1;
+ }
+ }
+}
+
+/// getSignedMin - Return the smallest signed value contained in the
+/// ConstantRange.
+///
+APInt ConstantRange::getSignedMin() const {
+ APInt SignedMin = APInt::getSignedMinValue(getBitWidth());
+ if (!isWrappedSet()) {
+ if (getLower().slt(getUpper() - 1))
+ return getLower();
+ else
+ return SignedMin;
+ } else {
+ if ((getUpper() - 1).slt(getLower())) {
+ if (getUpper() != SignedMin)
+ return SignedMin;
+ else
+ return getLower();
+ } else {
+ return getLower();
+ }
+ }
+}
+
/// contains - Return true if the specified value is in the set.
///
bool ConstantRange::contains(const APInt &V) const {