MLIR  21.0.0git
Namespaces | Typedefs | Enumerations | Functions | Variables
mlir::intrange Namespace Reference

Namespaces

 detail
 

Typedefs

using InferRangeFn = std::function< ConstantIntRanges(ArrayRef< ConstantIntRanges >)>
 Function that performs inference on an array of ConstantIntRanges, abstracted away here to permit writing the function that handles both 64- and 32-bit index types. More...
 
using InferIntegerValueRangeFn = std::function< IntegerValueRange(ArrayRef< IntegerValueRange >)>
 Function that performs inferrence on an array of IntegerValueRange. More...
 
using InferRangeWithOvfFlagsFn = function_ref< ConstantIntRanges(ArrayRef< ConstantIntRanges >, OverflowFlags)>
 Function that performs inference on an array of ConstantIntRanges while taking special overflow behavior into account. More...
 

Enumerations

enum class  CmpMode : uint32_t { Both , Signed , Unsigned }
 
enum class  OverflowFlags : uint32_t { None = 0 , Nsw = 1 , Nuw = 2 }
 
enum class  CmpPredicate : uint64_t {
  eq , ne , slt , sle ,
  sgt , sge , ult , ule ,
  ugt , uge
}
 Copy of the enum from arith and index to allow the common integer range infrastructure to not depend on either dialect. More...
 

Functions

ConstantIntRanges inferIndexOp (const InferRangeFn &inferFn, ArrayRef< ConstantIntRanges > argRanges, CmpMode mode)
 Compute inferFn on ranges, whose size should be the index storage bitwidth. More...
 
ConstantIntRanges extRange (const ConstantIntRanges &range, unsigned destWidth)
 Independently zero-extend the unsigned values and sign-extend the signed values in range to destWidth bits, returning the resulting range. More...
 
ConstantIntRanges extUIRange (const ConstantIntRanges &range, unsigned destWidth)
 Use the unsigned values in range to zero-extend it to destWidth. More...
 
ConstantIntRanges extSIRange (const ConstantIntRanges &range, unsigned destWidth)
 Use the signed values in range to sign-extend it to destWidth. More...
 
ConstantIntRanges truncRange (const ConstantIntRanges &range, unsigned destWidth)
 Truncate range to destWidth bits, taking care to handle cases such as the truncation of [255, 256] to i8 not being a uniform range. More...
 
ConstantIntRanges inferAdd (ArrayRef< ConstantIntRanges > argRanges, OverflowFlags ovfFlags=OverflowFlags::None)
 
ConstantIntRanges inferSub (ArrayRef< ConstantIntRanges > argRanges, OverflowFlags ovfFlags=OverflowFlags::None)
 
ConstantIntRanges inferMul (ArrayRef< ConstantIntRanges > argRanges, OverflowFlags ovfFlags=OverflowFlags::None)
 
ConstantIntRanges inferDivS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferDivU (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferCeilDivS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferCeilDivU (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferFloorDivS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferRemS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferRemU (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferMaxS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferMaxU (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferMinS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferMinU (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferAnd (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferOr (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferXor (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferShl (ArrayRef< ConstantIntRanges > argRanges, OverflowFlags ovfFlags=OverflowFlags::None)
 
ConstantIntRanges inferShrS (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferShrU (ArrayRef< ConstantIntRanges > argRanges)
 
std::optional< bool > evaluatePred (CmpPredicate pred, const ConstantIntRanges &lhs, const ConstantIntRanges &rhs)
 Returns a boolean value if pred is statically true or false for anypossible inputs falling within lhs and rhs, and std::nullopt if the value of the predicate cannot be determined. More...
 
ConstantIntRanges inferShapedDimOpInterface (ShapedDimOpInterface op, const IntegerValueRange &maybeDim)
 Returns the integer range for the result of a ShapedDimOpInterface given the optional inferred ranges for the dimension index maybeDim. More...
 

Variables

static constexpr unsigned indexMinWidth = 32
 
static constexpr unsigned indexMaxWidth = 64
 

Typedef Documentation

◆ InferIntegerValueRangeFn

Function that performs inferrence on an array of IntegerValueRange.

Definition at line 33 of file InferIntRangeCommon.h.

◆ InferRangeFn

Function that performs inference on an array of ConstantIntRanges, abstracted away here to permit writing the function that handles both 64- and 32-bit index types.

Definition at line 29 of file InferIntRangeCommon.h.

◆ InferRangeWithOvfFlagsFn

Function that performs inference on an array of ConstantIntRanges while taking special overflow behavior into account.

Definition at line 50 of file InferIntRangeCommon.h.

Enumeration Type Documentation

◆ CmpMode

enum mlir::intrange::CmpMode : uint32_t
strong
Enumerator
Both 
Signed 
Unsigned 

Definition at line 39 of file InferIntRangeCommon.h.

◆ CmpPredicate

enum mlir::intrange::CmpPredicate : uint64_t
strong

Copy of the enum from arith and index to allow the common integer range infrastructure to not depend on either dialect.

Enumerator
eq 
ne 
slt 
sle 
sgt 
sge 
ult 
ule 
ugt 
uge 

Definition at line 128 of file InferIntRangeCommon.h.

◆ OverflowFlags

enum mlir::intrange::OverflowFlags : uint32_t
strong
Enumerator
None 
Nsw 
Nuw 

Definition at line 41 of file InferIntRangeCommon.h.

Function Documentation

◆ evaluatePred()

std::optional< bool > mlir::intrange::evaluatePred ( CmpPredicate  pred,
const ConstantIntRanges lhs,
const ConstantIntRanges rhs 
)

Returns a boolean value if pred is statically true or false for anypossible inputs falling within lhs and rhs, and std::nullopt if the value of the predicate cannot be determined.

Definition at line 720 of file InferIntRangeCommon.cpp.

References invertPredicate(), and isStaticallyTrue().

Referenced by foldCmpOfMaxOrMin().

◆ extRange()

ConstantIntRanges mlir::intrange::extRange ( const ConstantIntRanges range,
unsigned  destWidth 
)

Independently zero-extend the unsigned values and sign-extend the signed values in range to destWidth bits, returning the resulting range.

Referenced by inferIndexCast(), and inferIndexOp().

◆ extSIRange()

ConstantIntRanges mlir::intrange::extSIRange ( const ConstantIntRanges range,
unsigned  destWidth 
)

Use the signed values in range to sign-extend it to destWidth.

Definition at line 136 of file InferIntRangeCommon.cpp.

References mlir::ConstantIntRanges::fromSigned(), mlir::ConstantIntRanges::smax(), and mlir::ConstantIntRanges::smin().

Referenced by makeLikeDest().

◆ extUIRange()

ConstantIntRanges mlir::intrange::extUIRange ( const ConstantIntRanges range,
unsigned  destWidth 
)

Use the unsigned values in range to zero-extend it to destWidth.

Definition at line 129 of file InferIntRangeCommon.cpp.

References mlir::ConstantIntRanges::fromUnsigned(), mlir::ConstantIntRanges::umax(), and mlir::ConstantIntRanges::umin().

Referenced by makeLikeDest().

◆ inferAdd()

ConstantIntRanges mlir::intrange::inferAdd ( ArrayRef< ConstantIntRanges argRanges,
OverflowFlags  ovfFlags = OverflowFlags::None 
)

◆ inferAnd()

ConstantIntRanges mlir::intrange::inferAnd ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 547 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ inferCeilDivS()

ConstantIntRanges mlir::intrange::inferCeilDivS ( ArrayRef< ConstantIntRanges argRanges)

◆ inferCeilDivU()

ConstantIntRanges mlir::intrange::inferCeilDivU ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 320 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferDivS()

ConstantIntRanges mlir::intrange::inferDivS ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 361 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferDivU()

ConstantIntRanges mlir::intrange::inferDivU ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 313 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferFloorDivS()

ConstantIntRanges mlir::intrange::inferFloorDivS ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 402 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferIndexOp()

ConstantIntRanges mlir::intrange::inferIndexOp ( const InferRangeFn inferFn,
ArrayRef< ConstantIntRanges argRanges,
intrange::CmpMode  mode 
)

Compute inferFn on ranges, whose size should be the index storage bitwidth.

Then, compute the function on argRanges again after truncating the ranges to 32 bits. Finally, if the truncation of the 64-bit result is equal to the 32-bit result, use it (to preserve compatibility with folders and inference precision), and take the union of the results otherwise.

The mode argument specifies if the unsigned, signed, or both results of the inference computation should be used when comparing the results.

Definition at line 82 of file InferIntRangeCommon.cpp.

References Both, extRange(), indexMaxWidth, indexMinWidth, mlir::ConstantIntRanges::rangeUnion(), Signed, mlir::ConstantIntRanges::smax(), mlir::ConstantIntRanges::smin(), truncRange(), mlir::ConstantIntRanges::umax(), mlir::ConstantIntRanges::umin(), and Unsigned.

◆ inferMaxS()

ConstantIntRanges mlir::intrange::inferMaxS ( ArrayRef< ConstantIntRanges argRanges)

◆ inferMaxU()

ConstantIntRanges mlir::intrange::inferMaxU ( ArrayRef< ConstantIntRanges argRanges)

◆ inferMinS()

ConstantIntRanges mlir::intrange::inferMinS ( ArrayRef< ConstantIntRanges argRanges)

◆ inferMinU()

ConstantIntRanges mlir::intrange::inferMinU ( ArrayRef< ConstantIntRanges argRanges)

◆ inferMul()

ConstantIntRanges mlir::intrange::inferMul ( ArrayRef< ConstantIntRanges argRanges,
OverflowFlags  ovfFlags = OverflowFlags::None 
)

◆ inferOr()

ConstantIntRanges mlir::intrange::inferOr ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 558 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ inferRemS()

ConstantIntRanges mlir::intrange::inferRemS ( ArrayRef< ConstantIntRanges argRanges)

◆ inferRemU()

ConstantIntRanges mlir::intrange::inferRemU ( ArrayRef< ConstantIntRanges argRanges)

◆ inferShapedDimOpInterface()

ConstantIntRanges mlir::intrange::inferShapedDimOpInterface ( ShapedDimOpInterface  op,
const IntegerValueRange maybeDim 
)

Returns the integer range for the result of a ShapedDimOpInterface given the optional inferred ranges for the dimension index maybeDim.

When a dynamic dimension is encountered, returns [0, signed_max(type(result))].

Definition at line 735 of file InferIntRangeCommon.cpp.

References mlir::ConstantIntRanges::constant(), mlir::ConstantIntRanges::fromSigned(), mlir::ConstantIntRanges::getStorageBitwidth(), mlir::IntegerValueRange::getValue(), getZero(), mlir::IntegerValueRange::isUninitialized(), max(), min(), mlir::ConstantIntRanges::smax(), and mlir::ConstantIntRanges::smin().

◆ inferShl()

ConstantIntRanges mlir::intrange::inferShl ( ArrayRef< ConstantIntRanges argRanges,
OverflowFlags  ovfFlags = OverflowFlags::None 
)

Definition at line 594 of file InferIntRangeCommon.cpp.

◆ inferShrS()

ConstantIntRanges mlir::intrange::inferShrS ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 628 of file InferIntRangeCommon.cpp.

◆ inferShrU()

ConstantIntRanges mlir::intrange::inferShrU ( ArrayRef< ConstantIntRanges argRanges)

Definition at line 640 of file InferIntRangeCommon.cpp.

◆ inferSub()

ConstantIntRanges mlir::intrange::inferSub ( ArrayRef< ConstantIntRanges argRanges,
OverflowFlags  ovfFlags = OverflowFlags::None 
)

◆ inferXor()

ConstantIntRanges mlir::intrange::inferXor ( ArrayRef< ConstantIntRanges argRanges)

◆ truncRange()

ConstantIntRanges mlir::intrange::truncRange ( const ConstantIntRanges range,
unsigned  destWidth 
)

Truncate range to destWidth bits, taking care to handle cases such as the truncation of [255, 256] to i8 not being a uniform range.

Referenced by inferIndexOp(), and makeLikeDest().

Variable Documentation

◆ indexMaxWidth

constexpr unsigned mlir::intrange::indexMaxWidth = 64
staticconstexpr

Definition at line 37 of file InferIntRangeCommon.h.

Referenced by inferIndexOp().

◆ indexMinWidth

constexpr unsigned mlir::intrange::indexMinWidth = 32
staticconstexpr

Definition at line 36 of file InferIntRangeCommon.h.

Referenced by inferIndexCast(), and inferIndexOp().