MLIR  20.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...
 

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 31 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 27 of file InferIntRangeCommon.h.

◆ InferRangeWithOvfFlagsFn

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

Definition at line 48 of file InferIntRangeCommon.h.

Enumeration Type Documentation

◆ CmpMode

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

Definition at line 37 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 126 of file InferIntRangeCommon.h.

◆ OverflowFlags

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

Definition at line 39 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 691 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 135 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 128 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 526 of file InferIntRangeCommon.cpp.

References minMaxBy(), and widenBitwiseBounds().

◆ inferCeilDivS()

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

Definition at line 362 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferCeilDivU()

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

Definition at line 313 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferDivS()

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

Definition at line 355 of file InferIntRangeCommon.cpp.

References inferDivSRange().

◆ inferDivU()

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

Definition at line 306 of file InferIntRangeCommon.cpp.

References inferDivURange().

◆ inferFloorDivS()

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

Definition at line 380 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 81 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 537 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,
OverflowFlags  ovfFlags = OverflowFlags::None 
)

Definition at line 563 of file InferIntRangeCommon.cpp.

◆ inferShrS()

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

Definition at line 597 of file InferIntRangeCommon.cpp.

◆ inferShrU()

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

Definition at line 610 of file InferIntRangeCommon.cpp.

◆ inferSub()

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

◆ inferXor()

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

Definition at line 548 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 35 of file InferIntRangeCommon.h.

Referenced by inferIndexOp().

◆ indexMinWidth

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

Definition at line 34 of file InferIntRangeCommon.h.

Referenced by inferIndexCast(), and inferIndexOp().