X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FConstantRange.h;h=2e477cf899842677cacc417a4fbb1a4a2681c471;hb=fc82fabe00b0b820e3c0d7fc9e289bace0295f11;hp=ae36f42e12c9d32027ba40e7c7b725d0f6f75aa5;hpb=581b0d453a63f7f657248f80317976995262be11;p=oota-llvm.git diff --git a/include/llvm/Support/ConstantRange.h b/include/llvm/Support/ConstantRange.h index ae36f42e12c..2e477cf8998 100644 --- a/include/llvm/Support/ConstantRange.h +++ b/include/llvm/Support/ConstantRange.h @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -36,17 +36,15 @@ #include namespace llvm { -class Constant; -class Type; class ConstantRange { APInt Lower, Upper; static ConstantRange intersect1Wrapped(const ConstantRange &LHS, - const ConstantRange &RHS, bool sign); + const ConstantRange &RHS); public: - /// Initialize a full (the default) or empty set for the specified type. + /// Initialize a full (the default) or empty set for the specified bit width. /// - ConstantRange(const Type *Ty, bool isFullSet = true); + explicit ConstantRange(uint32_t BitWidth, bool isFullSet = true); /// Initialize a range to hold the single specified value. /// @@ -57,12 +55,6 @@ class ConstantRange { /// assert out if the two APInt's are not the same bit width. ConstantRange(const APInt& Lower, const APInt& Upper); - /// Initialize a set of values that all satisfy the predicate with C. The - /// predicate should be either an ICmpInst::Predicate or FCmpInst::Predicate - /// value. - /// @brief Get a range for a relation with a constant integral. - ConstantRange(unsigned short predicate, const APInt &C); - /// getLower - Return the lower value for this range... /// const APInt &getLower() const { return Lower; } @@ -71,9 +63,9 @@ class ConstantRange { /// const APInt &getUpper() const { return Upper; } - /// getType - Return the LLVM data type of this range. + /// getBitWidth - get the bit width of this ConstantRange /// - const Type *getType() const; + uint32_t getBitWidth() const { return Lower.getBitWidth(); } /// isFullSet - Return true if this set contains all of the elements possible /// for this data-type @@ -87,13 +79,11 @@ class ConstantRange { /// isWrappedSet - Return true if this set wraps around the top of the range, /// for example: [100, 8) /// - bool isWrappedSet(bool isSigned) const; + bool isWrappedSet() const; /// contains - Return true if the specified value is in the set. - /// The isSigned parameter indicates whether the comparisons should be - /// performed as if the values are signed or not. /// - bool contains(const APInt &Val, bool isSigned) const; + bool contains(const APInt &Val) const; /// getSingleElement - If this set contains a single element, return it, /// otherwise return null. @@ -112,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 { @@ -131,7 +141,16 @@ class ConstantRange { /// one of the sets but not the other. For example: [100, 8) intersect [3, /// 120) yields [3, 120) /// - ConstantRange intersectWith(const ConstantRange &CR, bool isSigned) const; + ConstantRange intersectWith(const ConstantRange &CR) const; + + /// maximalIntersectWith - Return the range that results from the intersection + /// of this range with another range. The resultant range is guaranteed to + /// include all elements contained in both input ranges, and to have the + /// smallest possible set size that does so. Because there may be two + /// intersections with the same set size, A.maximalIntersectWith(B) might not + /// be equal to B.maximalIntersectWith(A). + /// + ConstantRange maximalIntersectWith(const ConstantRange &CR) const; /// unionWith - Return the range that results from the union of this range /// with another range. The resultant range is guaranteed to include the @@ -139,19 +158,25 @@ class ConstantRange { /// [12,15) is [3, 15), which includes 9, 10, and 11, which were not included /// in either set before. /// - ConstantRange unionWith(const ConstantRange &CR, bool isSigned) const; + ConstantRange unionWith(const ConstantRange &CR) const; /// zeroExtend - Return a new range in the specified integer type, which must /// be strictly larger than the current type. The returned range will /// correspond to the possible range of values if the source range had been - /// zero extended. - ConstantRange zeroExtend(const Type *Ty) const; + /// zero extended to BitWidth. + ConstantRange zeroExtend(uint32_t BitWidth) const; + + /// signExtend - Return a new range in the specified integer type, which must + /// be strictly larger than the current type. The returned range will + /// correspond to the possible range of values if the source range had been + /// sign extended to BitWidth. + ConstantRange signExtend(uint32_t BitWidth) const; /// truncate - Return a new range in the specified integer type, which must be /// strictly smaller than the current type. The returned range will /// correspond to the possible range of values if the source range had been /// truncated to the specified type. - ConstantRange truncate(const Type *Ty) const; + ConstantRange truncate(uint32_t BitWidth) const; /// print - Print out the bounds to a stream... ///