MLIR 23.0.0git
mlir::xegpu::detail::axis_dataflow::AxisInfo Struct Reference

Per-dimension axis information for an SSA vector value of integer / index type. More...

Public Member Functions

 AxisInfo ()=default
unsigned getRank () const
bool isInitialized () const
bool operator== (const AxisInfo &rhs) const
void print (raw_ostream &os) const

Static Public Member Functions

static AxisInfo getPessimistic (unsigned rank)
static AxisInfo join (const AxisInfo &lhs, const AxisInfo &rhs)
 Conservative join (lattice meet).

Public Attributes

SmallVector< int64_tcontiguity
SmallVector< int64_tconstancy
SmallVector< int64_tdivisibility
std::optional< int64_tknownConstant
std::optional< int64_tinnerStride

Detailed Description

Per-dimension axis information for an SSA vector value of integer / index type.

The fields describe, for each dimension d, the pattern of the values along d (examples use a 1-D vector, so d is the only / innermost dim):

  • contiguity[d]: longest run that increases by exactly 1. [0, 1, 2, 3] -> 4; [0, 1, 0, 1] -> 2.
  • constancy[d]: longest run of equal values. [5, 5, 5, 5] -> 4; [5, 5, 6, 6] -> 2.
  • divisibility[d]: a power-of-two divisor of every element. [8, 16, 24] -> 8; [3, 6, 9] -> 1.
  • knownConstant: the value, if the whole vector is one constant. dense<7> -> 7; [0, 1, 2] -> nullopt.
  • innerStride: if set, consecutive values along the innermost dim differ by this constant step. 1 is the contiguous case ([0,1,2,3]), 0 the all-equal case ([5,5,5,5]); any other value is a strided progression ([0,4,8,12] -> 4) that contiguity/constancy can't represent (both read 1). For a multi-dim vector each inner-dim slice is its own progression; their bases may differ, with the shared inner alignment in divisibility[innerDim].

Only contiguity[innerDim] is consumed when stamping, but all dimensions are tracked because vector.transpose / vector.shape_cast permute or move per-dim info between axes, so an intermediate value's outer dims can become the inner dim of a later value.

Pessimistic / entry value: contiguity=1, constancy=1, divisibility=1, innerStride absent.

Definition at line 87 of file XeGPUContiguityAnalysis.cpp.

Constructor & Destructor Documentation

◆ AxisInfo()

mlir::xegpu::detail::axis_dataflow::AxisInfo::AxisInfo ( )
default

Referenced by getPessimistic(), join(), and operator==().

Member Function Documentation

◆ getPessimistic()

AxisInfo mlir::xegpu::detail::axis_dataflow::AxisInfo::getPessimistic ( unsigned rank)
inlinestatic

◆ getRank()

unsigned mlir::xegpu::detail::axis_dataflow::AxisInfo::getRank ( ) const
inline

Definition at line 104 of file XeGPUContiguityAnalysis.cpp.

References contiguity.

Referenced by isInitialized().

◆ isInitialized()

bool mlir::xegpu::detail::axis_dataflow::AxisInfo::isInitialized ( ) const
inline

Definition at line 105 of file XeGPUContiguityAnalysis.cpp.

References getRank().

◆ join()

AxisInfo mlir::xegpu::detail::axis_dataflow::AxisInfo::join ( const AxisInfo & lhs,
const AxisInfo & rhs )
inlinestatic

Conservative join (lattice meet).

When a value can arrive from several paths (e.g. a block argument, or arith.select), only what holds on every path is safe to assume. So we keep the weaker fact per field: min of each run length (a run is only guaranteed as long as the shortest incoming one), gcd of divisibility, and a value/stride only when both sides agree. This is what makes the contiguity we later stamp sound rather than "undecidable" — it is the largest run guaranteed on all paths.

Definition at line 120 of file XeGPUContiguityAnalysis.cpp.

References AxisInfo(), constancy, contiguity, divisibility, innerStride, knownConstant, lhs, and rhs.

◆ operator==()

bool mlir::xegpu::detail::axis_dataflow::AxisInfo::operator== ( const AxisInfo & rhs) const
inline

◆ print()

void mlir::xegpu::detail::axis_dataflow::AxisInfo::print ( raw_ostream & os) const
inline

Member Data Documentation

◆ constancy

SmallVector<int64_t> mlir::xegpu::detail::axis_dataflow::AxisInfo::constancy

◆ contiguity

SmallVector<int64_t> mlir::xegpu::detail::axis_dataflow::AxisInfo::contiguity

◆ divisibility

SmallVector<int64_t> mlir::xegpu::detail::axis_dataflow::AxisInfo::divisibility

◆ innerStride

std::optional<int64_t> mlir::xegpu::detail::axis_dataflow::AxisInfo::innerStride

◆ knownConstant

std::optional<int64_t> mlir::xegpu::detail::axis_dataflow::AxisInfo::knownConstant

The documentation for this struct was generated from the following file: