Add getter methods for the extremes of a ConstantRange.
authorNick Lewycky <nicholas@mxc.ca>
Sat, 10 Mar 2007 15:54:12 +0000 (15:54 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 10 Mar 2007 15:54:12 +0000 (15:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35056 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/ConstantRange.h
lib/Support/ConstantRange.cpp

index 9da41ec354598ae1b437abd1232d708cda8232a6..05859b41116e1034a187248f6b7be553f1ac780a 100644 (file)
@@ -102,6 +102,26 @@ class ConstantRange {
   ///
   APInt getSetSize() const;
 
+  /// getUnsignedMax - Return the largest unsigned value contained in the
+  /// ConstantRange.
+  ///
+  APInt getUnsignedMax() const;
+
+  /// getUnsignedMin - Return the smallest unsigned value contained in the
+  /// ConstantRange.
+  ///
+  APInt getUnsignedMin() const;
+
+  /// getSignedMax - Return the largest signed value contained in the
+  /// ConstantRange.
+  ///
+  APInt getSignedMax() const;
+
+  /// getSignedMin - Return the smallest signed value contained in the
+  /// ConstantRange.
+  ///
+  APInt getSignedMin() const;
+
   /// operator== - Return true if this range is equal to another range.
   ///
   bool operator==(const ConstantRange &CR) const {
index 410c351890c79f060e0121c169f6ecdf4a87f14e..becb8b61f78322b8535bb5b9bdc6357017419c42 100644 (file)
@@ -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 {