MLIR  16.0.0git
Public Member Functions | Static Public Member Functions | Friends | List of all members
mlir::ConstantIntRanges Class Reference

A set of arbitrary-precision integers representing bounds on a given integer value. More...

#include "mlir/Interfaces/InferIntRangeInterface.h"

Public Member Functions

 ConstantIntRanges (const APInt &umin, const APInt &umax, const APInt &smin, const APInt &smax)
 Bound umin <= (unsigned)x <= umax and smin <= signed(x) <= smax. More...
 
bool operator== (const ConstantIntRanges &other) const
 
const APInt & umin () const
 The minimum value of an integer when it is interpreted as unsigned. More...
 
const APInt & umax () const
 The maximum value of an integer when it is interpreted as unsigned. More...
 
const APInt & smin () const
 The minimum value of an integer when it is interpreted as signed. More...
 
const APInt & smax () const
 The maximum value of an integer when it is interpreted as signed. More...
 
ConstantIntRanges rangeUnion (const ConstantIntRanges &other) const
 Returns the union (computed separately for signed and unsigned bounds) of this range and other. More...
 
ConstantIntRanges intersection (const ConstantIntRanges &other) const
 Returns the intersection (computed separately for signed and unsigned bounds) of this range and other. More...
 
Optional< APInt > getConstantValue () const
 If either the signed or unsigned interpretations of the range indicate that the value it bounds is a constant, return that constant value. More...
 

Static Public Member Functions

static unsigned getStorageBitwidth (Type type)
 Return the bitwidth that should be used for integer ranges describing type. More...
 
static ConstantIntRanges maxRange (unsigned bitwidth)
 Create a ConstantIntRanges with the maximum bounds for the width bitwidth, that is - [0, uint_max(width)]/[sint_min(width), sint_max(width)]. More...
 
static ConstantIntRanges constant (const APInt &value)
 Create a ConstantIntRanges with a constant value - that is, with the bounds [value, value] for both its signed interpretations. More...
 
static ConstantIntRanges range (const APInt &min, const APInt &max, bool isSigned)
 Create a ConstantIntRanges whose minimum is min and maximum is max with isSigned specifying if the min and max should be interpreted as signed or unsigned. More...
 
static ConstantIntRanges fromSigned (const APInt &smin, const APInt &smax)
 Create an ConstantIntRanges with the signed minimum and maximum equal to smin and smax, where the unsigned bounds are constructed from the signed ones if they correspond to a contigious range of bit patterns when viewed as unsigned values and are left at [0, int_max()] otherwise. More...
 
static ConstantIntRanges fromUnsigned (const APInt &umin, const APInt &umax)
 Create an ConstantIntRanges with the unsigned minimum and maximum equal to umin and umax and the signed part equal to umin and umax unless the sign bit changes between the minimum and maximum. More...
 

Friends

raw_ostream & operator<< (raw_ostream &os, const ConstantIntRanges &range)
 

Detailed Description

A set of arbitrary-precision integers representing bounds on a given integer value.

These bounds are inclusive on both ends, so bounds of [4, 5] mean 4 <= x <= 5. Separate bounds are tracked for the unsigned and signed interpretations of values in order to enable more precice inference of the interplay between operations with signed and unsigned semantics.

Definition at line 26 of file InferIntRangeInterface.h.

Constructor & Destructor Documentation

◆ ConstantIntRanges()

mlir::ConstantIntRanges::ConstantIntRanges ( const APInt &  umin,
const APInt &  umax,
const APInt &  smin,
const APInt &  smax 
)
inline

Bound umin <= (unsigned)x <= umax and smin <= signed(x) <= smax.

Non-integer values should be bounded by APInts of bitwidth 0.

Definition at line 30 of file InferIntRangeInterface.h.

Member Function Documentation

◆ constant()

ConstantIntRanges ConstantIntRanges::constant ( const APInt &  value)
static

Create a ConstantIntRanges with a constant value - that is, with the bounds [value, value] for both its signed interpretations.

Definition at line 42 of file InferIntRangeInterface.cpp.

References value.

◆ fromSigned()

ConstantIntRanges ConstantIntRanges::fromSigned ( const APInt &  smin,
const APInt &  smax 
)
static

Create an ConstantIntRanges with the signed minimum and maximum equal to smin and smax, where the unsigned bounds are constructed from the signed ones if they correspond to a contigious range of bit patterns when viewed as unsigned values and are left at [0, int_max()] otherwise.

Definition at line 53 of file InferIntRangeInterface.cpp.

References smax(), smin(), umax(), and umin().

Referenced by extSIRange(), extUIRange(), range(), and mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().

◆ fromUnsigned()

ConstantIntRanges ConstantIntRanges::fromUnsigned ( const APInt &  umin,
const APInt &  umax 
)
static

Create an ConstantIntRanges with the unsigned minimum and maximum equal to umin and umax and the signed part equal to umin and umax unless the sign bit changes between the minimum and maximum.

Definition at line 67 of file InferIntRangeInterface.cpp.

References smax(), smin(), umax(), and umin().

Referenced by getIndexRange(), maxRange(), and range().

◆ getConstantValue()

Optional< APInt > ConstantIntRanges::getConstantValue ( ) const

If either the signed or unsigned interpretations of the range indicate that the value it bounds is a constant, return that constant value.

Definition at line 115 of file InferIntRangeInterface.cpp.

References getBitWidth(), None, smax(), smin(), umax(), and umin().

Referenced by mlir::dataflow::IntegerValueRangeLattice::onUpdate().

◆ getStorageBitwidth()

unsigned ConstantIntRanges::getStorageBitwidth ( Type  type)
static

Return the bitwidth that should be used for integer ranges describing type.

For concrete integer types, this is their bitwidth, for index, this is the internal storage bitwidth of index attributes, and for non-integer types this is 0.

Definition at line 29 of file InferIntRangeInterface.cpp.

References mlir::Type::dyn_cast(), and mlir::Type::isIndex().

Referenced by extSIRange(), extUIRange(), mlir::dataflow::IntegerValueRange::getMaxRange(), truncIRange(), and mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().

◆ intersection()

ConstantIntRanges ConstantIntRanges::intersection ( const ConstantIntRanges other) const

Returns the intersection (computed separately for signed and unsigned bounds) of this range and other.

Definition at line 99 of file InferIntRangeInterface.cpp.

References getBitWidth(), smax(), smin(), umax(), and umin().

◆ maxRange()

ConstantIntRanges ConstantIntRanges::maxRange ( unsigned  bitwidth)
static

Create a ConstantIntRanges with the maximum bounds for the width bitwidth, that is - [0, uint_max(width)]/[sint_min(width), sint_max(width)].

Definition at line 38 of file InferIntRangeInterface.cpp.

References fromUnsigned(), and getZero().

Referenced by computeBoundsBy().

◆ operator==()

bool ConstantIntRanges::operator== ( const ConstantIntRanges other) const

Definition at line 15 of file InferIntRangeInterface.cpp.

References smax(), smin(), umax(), and umin().

◆ range()

ConstantIntRanges ConstantIntRanges::range ( const APInt &  min,
const APInt &  max,
bool  isSigned 
)
static

Create a ConstantIntRanges whose minimum is min and maximum is max with isSigned specifying if the min and max should be interpreted as signed or unsigned.

Definition at line 46 of file InferIntRangeInterface.cpp.

References fromSigned(), fromUnsigned(), max(), and min().

Referenced by computeBoundsBy().

◆ rangeUnion()

ConstantIntRanges ConstantIntRanges::rangeUnion ( const ConstantIntRanges other) const

Returns the union (computed separately for signed and unsigned bounds) of this range and other.

Definition at line 82 of file InferIntRangeInterface.cpp.

References getBitWidth(), smax(), smin(), umax(), and umin().

◆ smax()

const APInt & ConstantIntRanges::smax ( ) const

◆ smin()

const APInt & ConstantIntRanges::smin ( ) const

◆ umax()

const APInt & ConstantIntRanges::umax ( ) const

The maximum value of an integer when it is interpreted as unsigned.

Definition at line 23 of file InferIntRangeInterface.cpp.

Referenced by extUIRange(), fromSigned(), fromUnsigned(), getConstantValue(), intersection(), operator==(), rangeUnion(), truncIRange(), and widenBitwiseBounds().

◆ umin()

const APInt & ConstantIntRanges::umin ( ) const

The minimum value of an integer when it is interpreted as unsigned.

Definition at line 21 of file InferIntRangeInterface.cpp.

Referenced by extUIRange(), fromSigned(), fromUnsigned(), getConstantValue(), intersection(), operator==(), rangeUnion(), truncIRange(), and widenBitwiseBounds().

Friends And Related Function Documentation

◆ operator<<

raw_ostream& operator<< ( raw_ostream &  os,
const ConstantIntRanges range 
)
friend

The documentation for this class was generated from the following files: