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

Typedefs

using InferRangeFn = function_ref< 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...
 

Enumerations

enum class  CmpMode : uint32_t { Both , Signed , Unsigned }
 
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 (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)
 
ConstantIntRanges inferSub (ArrayRef< ConstantIntRanges > argRanges)
 
ConstantIntRanges inferMul (ArrayRef< ConstantIntRanges > argRanges)
 
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)
 
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...
 

Variables

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

Typedef Documentation

◆ 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 26 of file InferIntRangeCommon.h.

Enumeration Type Documentation

◆ CmpMode

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

Definition at line 32 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 105 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 655 of file InferIntRangeCommon.cpp.

References invertPredicate(), and isStaticallyTrue().

◆ 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 133 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 126 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)

◆ inferAnd()

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

Definition at line 508 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ inferCeilDivS()

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

Definition at line 344 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferCeilDivU()

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

Definition at line 295 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferDivS()

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

Definition at line 337 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferDivU()

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

Definition at line 288 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferFloorDivS()

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

Definition at line 362 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferIndexOp()

ConstantIntRanges mlir::intrange::inferIndexOp ( 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 79 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)

◆ inferOr()

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

Definition at line 519 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ inferRemS()

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

◆ inferRemU()

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

◆ inferShl()

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

◆ inferShrS()

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

◆ inferShrU()

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

◆ inferSub()

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

◆ inferXor()

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

Definition at line 530 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ 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 30 of file InferIntRangeCommon.h.

Referenced by inferIndexOp().

◆ indexMinWidth

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

Definition at line 29 of file InferIntRangeCommon.h.

Referenced by inferIndexCast(), and inferIndexOp().