MLIR: mlir::ConstantIntRanges Class Reference (original) (raw)
A set of arbitrary-precision integers representing bounds on a given integer value. More...
#include "[mlir/Interfaces/InferIntRangeInterface.h](InferIntRangeInterface%5F8h%5Fsource.html)"
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... | |
std::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... | |
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 27 of file InferIntRangeInterface.h.
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 31 of file InferIntRangeInterface.h.
◆ constant()
◆ fromSigned()
ConstantIntRanges ConstantIntRanges::fromSigned ( const APInt & smin, const APInt & smax ) | static |
---|
Create an [ConstantIntRanges](classmlir%5F1%5F1ConstantIntRanges.html "A set of arbitrary-precision integers representing bounds on a given integer value.")
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 56 of file InferIntRangeInterface.cpp.
References smax(), smin(), umax(), and umin().
Referenced by mlir::intrange::extSIRange(), mlir::intrange::inferCeilDivS(), mlir::intrange::inferMaxS(), mlir::intrange::inferMinS(), mlir::intrange::inferRemS(), mlir::intrange::inferShapedDimOpInterface(), range(), and mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().
◆ fromUnsigned()
ConstantIntRanges ConstantIntRanges::fromUnsigned ( const APInt & umin, const APInt & umax ) | static |
---|
Create an [ConstantIntRanges](classmlir%5F1%5F1ConstantIntRanges.html "A set of arbitrary-precision integers representing bounds on a given integer value.")
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 70 of file InferIntRangeInterface.cpp.
References smax(), smin(), umax(), and umin().
Referenced by mlir::intrange::extUIRange(), getIndexRange(), inferDivURange(), mlir::intrange::inferMaxU(), mlir::intrange::inferMinU(), mlir::intrange::inferRemU(), mlir::intrange::inferXor(), maxRange(), and range().
◆ getConstantValue()
std::optional< APInt > ConstantIntRanges::getConstantValue | ( | ) | const |
---|
◆ getStorageBitwidth()
unsigned ConstantIntRanges::getStorageBitwidth ( Type type) | static |
---|
◆ intersection()
◆ maxRange()
◆ operator==()
◆ range()
ConstantIntRanges ConstantIntRanges::range ( const APInt & min, const APInt & max, bool isSigned ) | static |
---|
◆ rangeUnion()
◆ smax()
const APInt & ConstantIntRanges::smax | ( | ) | const |
---|
The maximum value of an integer when it is interpreted as signed.
Definition at line 29 of file InferIntRangeInterface.cpp.
Referenced by mlir::intrange::extSIRange(), fromSigned(), fromUnsigned(), getConstantValue(), mlir::intrange::inferAdd(), mlir::intrange::inferCeilDivS(), inferDivSRange(), mlir::intrange::inferIndexOp(), mlir::intrange::inferMaxS(), mlir::intrange::inferMinS(), mlir::intrange::inferMul(), mlir::intrange::inferRemS(), mlir::intrange::inferShapedDimOpInterface(), mlir::intrange::inferSub(), intersection(), isStaticallyTrue(), mlir::operator<<(), operator==(), rangeUnion(), and mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().
◆ smin()
const APInt & ConstantIntRanges::smin | ( | ) | const |
---|
The minimum value of an integer when it is interpreted as signed.
Definition at line 27 of file InferIntRangeInterface.cpp.
Referenced by mlir::intrange::extSIRange(), fromSigned(), fromUnsigned(), getConstantValue(), mlir::intrange::inferAdd(), mlir::intrange::inferCeilDivS(), inferDivSRange(), mlir::intrange::inferIndexOp(), mlir::intrange::inferMaxS(), mlir::intrange::inferMinS(), mlir::intrange::inferMul(), mlir::intrange::inferRemS(), mlir::intrange::inferShapedDimOpInterface(), mlir::intrange::inferSub(), intersection(), isStaticallyTrue(), mlir::operator<<(), operator==(), rangeUnion(), mlir::dataflow::staticallyNonNegative(), and mlir::dataflow::IntegerRangeAnalysis::visitNonControlFlowArguments().
◆ umax()
const APInt & ConstantIntRanges::umax | ( | ) | const |
---|
The maximum value of an integer when it is interpreted as unsigned.
Definition at line 25 of file InferIntRangeInterface.cpp.
Referenced by mlir::intrange::extUIRange(), fromSigned(), fromUnsigned(), getConstantValue(), getVaryingBitsMask(), mlir::intrange::inferAdd(), inferDivURange(), mlir::intrange::inferIndexOp(), mlir::intrange::inferMaxU(), mlir::intrange::inferMinU(), mlir::intrange::inferMul(), mlir::intrange::inferRemU(), mlir::intrange::inferSub(), intersection(), isStaticallyTrue(), mlir::operator<<(), operator==(), rangeUnion(), and widenBitwiseBounds().
◆ umin()
const APInt & ConstantIntRanges::umin | ( | ) | const |
---|
The minimum value of an integer when it is interpreted as unsigned.
Definition at line 23 of file InferIntRangeInterface.cpp.
Referenced by mlir::intrange::extUIRange(), fromSigned(), fromUnsigned(), getConstantValue(), getVaryingBitsMask(), mlir::intrange::inferAdd(), inferDivURange(), mlir::intrange::inferIndexOp(), mlir::intrange::inferMaxU(), mlir::intrange::inferMinU(), mlir::intrange::inferMul(), mlir::intrange::inferRemU(), mlir::intrange::inferSub(), mlir::intrange::inferXor(), intersection(), isStaticallyTrue(), mlir::operator<<(), operator==(), rangeUnion(), and widenBitwiseBounds().
◆ operator<<
The documentation for this class was generated from the following files:
- include/mlir/Interfaces/InferIntRangeInterface.h
- lib/Interfaces/InferIntRangeInterface.cpp